Re[34]: Об эффективности программ
От: GlebZ Россия  
Дата: 21.10.05 14:16
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Здравствуйте, GlebZ, Вы писали:

GZ>>В старой версии при повторном ToString возвращалась ссылка на одну и ту же строку, и при ее изменении изменялись все связанные строки

ANS>Фига се баг! Не ожидал.

Да вообще-то багом это назвать трудно. Строка — сущность unmutable. Единственное исключение — unsafe код(и то, надо знать как ). В большинстве случаев программист знает что делает передавая строку(а за пределы домена Net она передается только в виде копии), но в случае с StringBuilder.ToString — это происходит неявно. Что и посчитали неправильным.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[35]: Об эффективности программ
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.10.05 14:24
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>>>В старой версии при повторном ToString возвращалась ссылка на одну и ту же строку, и при ее изменении изменялись все связанные строки


ANS>>Фига се баг! Не ожидал.

GZ>Да вообще-то багом это назвать трудно. Строка — сущность unmutable. Единственное исключение — unsafe код(и то, надо знать как ). В большинстве случаев программист знает что делает передавая строку(а за пределы домена Net она передается только в виде копии), но в случае с StringBuilder.ToString — это происходит неявно. Что и посчитали неправильным.

Не совсем понял. Я так понял, что при дозаписи в StringBuffer меняется полученная раннее строка. Я не правильно понял суть ошибки?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[36]: Об эффективности программ
От: GlebZ Россия  
Дата: 21.10.05 14:47
Оценка: +1
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Не совсем понял. Я так понял, что при дозаписи в StringBuffer меняется полученная раннее строка. Я не правильно понял суть ошибки?

Да. Неправильно. При любом дополнительном изменении StringBuilder после вызова ToString() выделяется новый буфер для изменений. Проблема примерно такая:
StringBuilder strBuilder=new StringBuilder("строка");
string str1=strBuilder.ToString();
string str2=strBuilder.ToString();
......
//здесь unsafe код который меняет строку
unsafe{fixed(char* pstr=str1){pstr[1]='F';}};
....
if (str2!='строка') Console.WriteLine("непонятный обломс");

этот код идентичен такому
StringBuilder strBuilder=new StringBuilder("строка");
string str1=strBuilder.ToString();
string str2=str1;
......
//здесь unsafe код который меняет строку
unsafe{fixed(char* pstr=str1){pstr[1]='F';}};
....
if (str2!='строка') Console.WriteLine("здесь мы хорошо знаем чем рискуем так как сознательно конкатенировали");


С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[37]: Об эффективности программ
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 22.10.05 08:31
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Andrei N.Sobchuck, Вы писали:


ANS>>Не совсем понял. Я так понял, что при дозаписи в StringBuffer меняется полученная раннее строка. Я не правильно понял суть ошибки?

GZ>Да. Неправильно. При любом дополнительном изменении StringBuilder после вызова ToString() выделяется новый буфер для изменений. Проблема примерно такая:

Аа. Ну это не баг, а фича.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[25]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 13:43
Оценка:
Здравствуйте, srggal, Вы писали:

S>Хоть Вы и читтер уважаемый, ан все равно приятно увидеть Думмера, ( поглаживая свой БФЖ ), и вспоминать как БФЖ рулит на 7мом уровне в дедматч. Эххх.


Думмер с БФГ имеет конкретное сокращенное наименование — ламер.

Помнится я как-то отучил своих коллег использовать ту самую БФГ на модифицированном 7-ом уровне (из Дума 2). Сделал это очень просто... взял ее и бегал по кругу собирая патроны и долбя об стенку. То ли дело базука. От это было оружие.

Ну, да завязывайте с думом. Тут это офотоп.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:17
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Так не пойдет. Чтобы было эквивалентно С++ варианту нужно ещё из StringBuilder получить String.


А зачем? Какой вообще смысл у этого теста? В реальной жизни ничего подобного не будет.
Создайте реальный тест который делает что-то осмысленное, и тогда измеряйте результат. А так это просто бред натуральный получается.

ЗЫ

А за работу со строками на уровне указателей вообще увольнять нужно.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:17
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Только с той разницей, что чтобы преобразовать буфер в строку в C, не нужно делать ничего. Например, нам надо передать строку после конкатенации в функцию foo(char*). В C — просто передаём этот самый буфер. В C# функция будет выглядеть как foo(string), и чтобы передать туда результирующую строку нам нужно сначала преобразовать StringBuffer в String.


Блни, а что такое "просто строка"? Это кусок памяти? А где его разместить? Вот размести его в плюсовой куче и сравни скорость. Уверю тебя плюсы будут в полной заднице.

A>В этом тесте используется конкретная возможность C — создание строк на стеке с прямой целью, чтобы показать приемущество этого языка по сравнению с C#.


Вот только на C# можно делать тоже самое. А не делают потому-что это каменный век.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:17
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Я бы тебе посоветовал вставить эту операцию в тест и посмотреть на то, как увеличится время. Уверяю тебя, будет очень близко к простой конкатенации строк оператором сложения. Так что мы ничего не выигрываем применяя StringBuilder для конкатенации двух строк, что собственно абсолютно не удивительно.


А ты вствь в код С++-теста код создания отдельных экземпляров строк. Уверяю тебя, что создать их в стеке у тебя не удастся. Останется только создавать строки в хипе. И если память не кончится, тормозить этот тест будет так, что Шарпу и не снилось.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:17
Оценка: -1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>олько одно имей в виду — StringBuilder постоянно хранит и изменяет поле длины. И это не бесплатно. Ты уже заплатил за вычисление этой длины вот здесь...


И этот человек препадет в институте!

Какие там на фиг абстракции? Мы за за длинну платим!!!
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:17
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> Излишней является любая оптимизация, которая не направлена на изменение ситуации, при которой система не способна уложиться в определенные в проекте временные рамки на том оборудовании, для работы на котором она предназначена.


ПК>Только та, которая стоит дополнительного времени при разработке.


И та что усложняет код.

А теперь назови оптимизации не далеющие того или другого.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:17
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Не любая. Например, есть выбор: написать сортировку "пузырьком" или использовать библиотечную std::sort. Первое делать дольше и в большинстве случаев работать будет медленнее, чем второе.


Это подмена понятий. Оптимизация — это, например, переписывание пузырька на быструю сортировку. А использование библиотечной функции оптимизацией не является. Это разумно сделать даже если речь о производительности не идет.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:17
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Да, но есть случаи, когда этот "пузырек" побьет std::sort в разы или даже десятки раз (на почти отсортированных массивах). В моей практике такой случай был, причем очень хитрый. В 99% случаев данные были отсортированы. В 0.9 процентов случаев — почти отсортированы. В 0.1% случаев — практически в беспорядке. Решение таково: пишем bubble sort (да, именно ее). Данная сортировка, являясь "наитупейшей" обладает важным свойством — мы можем контролировать, насколько нам удалось продвинуться и сколько мы сделали перестановок. В 99% случаев она срабатывала без единой перестановки. Но как только количество перестановок превышало некий предел (подобранный эмпирически), мы все бросали и отдавали на съедение quick sort. Это эмпирическое знание позволило ускорить некий процесс обработки данных более чем вдвое, по сравнению с просто вызовом std::sort().


Не вспомнишь... эта константа была 2 или 3?
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:18
Оценка: -3
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Нет. Я просто удивляюсь, что эти ситсемы используют алгоритмы, в которых вместо одного прохода требуется 3, вместо одного блока памяти — 2 и т.д. И мне говорят, что при этом повышается читабельность и легче сопровождение и т.д. Вот это я не понимаю и не принимаю.


Слушай, брось программировать. Береги нервы.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:18
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Когда-то спросил старого программера, как писать оптимальные программы. Я то думал, вопрос с подковыркой (оптимизировать по скорости или по размеру можно). А он ответил просто: "упрощай их".


Это плохой совет, так как неполный. "Простота" — понятие перегруженое. Если брать простые алгоритмы, то обычно они являются куда менее эффективными.

Но есть другая простота. Это простота восприятия. Добиться ее можно грамотно подбирая и исползуя абстракции.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Об эффективности программ
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.05 17:18
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Хотел я в исходном постинге напомнить про один принцип. Потом решил, что введет ненужную игривость


PD>KISS — Keep It Simple, Stupid!


Помнится один авторитетный товаришь к этот прицип формулировал несколько иначе "Все должно быть простым, настолько простым насколько это возможно — но не проще.". И я с ним согласен.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Об эффективности программ
От: IT Россия linq2db.com
Дата: 23.10.05 21:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это плохой совет, так как неполный. "Простота" — понятие перегруженое. Если брать простые алгоритмы, то обычно они являются куда менее эффективными.


Алгоритмы тут не причём. Упрощать нужно не их самих, а их реализацию.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: Об эффективности программ
От: gear nuke  
Дата: 23.10.05 22:29
Оценка:
Здравствуйте, VladD2,

GN>>Когда-то спросил старого программера, как писать оптимальные программы. Я то думал, вопрос с подковыркой (оптимизировать по скорости или по размеру можно). А он ответил просто: "упрощай их".


VD>Это плохой совет, так как неполный. "Простота" — понятие перегруженое. Если брать простые алгоритмы, то обычно они являются куда менее эффективными.


VD>Но есть другая простота. Это простота восприятия. Добиться ее можно грамотно подбирая и исползуя абстракции.


Мне кажется, он имел ввиду упрощение на самом верхнем уровне. В рамках целой задачи простой или сложный алго — лишь элементарное звено, упрощая его можно задачу и не упростить. В то же время — абстракция суть дополнительное элементарное звено, и слишком большое их количество может усложнить задачу.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: Об эффективности программ
От: Pavel Dvorkin Россия  
Дата: 24.10.05 04:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Нет. Я просто удивляюсь, что эти ситсемы используют алгоритмы, в которых вместо одного прохода требуется 3, вместо одного блока памяти — 2 и т.д. И мне говорят, что при этом повышается читабельность и легче сопровождение и т.д. Вот это я не понимаю и не принимаю.


VD>Слушай, брось программировать. Береги нервы.


Слушай, брось давать неумные советы.
With best regards
Pavel Dvorkin
Re[27]: Об эффективности программ
От: Pavel Dvorkin Россия  
Дата: 24.10.05 05:07
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>И этот человек препадет в институте!


Да уж... Не думал, что дело дойдет до личных наездов. Вот и спорь с такими личностями.
With best regards
Pavel Dvorkin
Re[35]: Об эффективности программ
От: alexeiz  
Дата: 24.10.05 06:49
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, alexeiz, Вы писали:


A>>Я посмотрю, как ты будешь со строками в unsafe коде работать.

GZ>Легко. Пишу примерно, возможны (или скорее всего будут) ошибки. Unsafe не часто пишешь.
<ужасный код пропущен>

Я даже не знаю, что бы я сделал такое с человеком, написавшим подобный код. Одно ясно: он явно напрашивается на неприятности (мягко говоря).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.