Re[32]: Ну ты вообще многого не видишь... ;)
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.06.09 14:05
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Я са могу создать иммутабл тип ? Есть такие средства в языке ?

Конечно. Будет ничуть не хуже, чем строка. См. DateTime.

PD>Ладно, оставим твои аппеляции к потокобезопасности в стороне. Не всегда она нужна, и уж тебе ли не знать, что большинство классов .Net не являются потокобезопасными, а значит, эту безопасность придется делать вне. Также и здесь можно было бы поступить. Но я даже и это обсуждать не хочу. Допустим, у меня вообще один всего поток — почему я должен платить за эту самую потокобезопасность, если она мне не нужна.

Потому что это не С++ здесь некоторые решения приняты за тебя. В частности, написать свою потокобезопасную строку намного сложнее, чем взять готовую.

PD>Слушай, не наводи тень на плетень. Хоть какие вргументы приводи — не докажешь, что не выполнять лишних действий лучше, чем их выполнять

Не хочешь — не буду. Это твое дело, насколько неэффективные программы ты будешь писать на управляемых языках.

PD>И потом — а скорость уборки GC всей этой кунсткамеры тоже пренебрежимо мала ?

Стоимость уборки строк равна нулю — у них нет финализатора.

PD>Да нет, в общем-то, угадал. В сущности этот самый m_StringValue и есть кусок из short, точнее, ссылка на него .

Не наводи тень на плетень. Ты спрашивал "где строки" — я показал тебе строки. Еще раз тебе объясняю: в управляемой среде в 99% случаев не надо ни "мешать" сборщику мусора, ни "помогать" ему. Понять, что ты попал в 1%, можно исключительно с помощью профайлера. Рассуждения типа "ой, тут что-то копируется, наверное без этого будет дешевле" не работают. Работает только профайлер.

Отдельные личности, к примеру, "для скорости" открывают коннекшн к базе данных в Application_Start и кладут в сессию веб-приложения. А потом удивляются, почему открытие/закрытие на каждый реквест работает так зверски лучше.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[32]: Ну ты вообще многого не видишь... ;)
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.06.09 14:05
Оценка: :)
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>А оно таки всегда надо ? Строки, конечно, могут быть в кэше, кэш доступен из разных потоков, тут нужна потокобезопасность и другие случаи есть. Но если я в своей C/C++ функции завел локальную auto переменную (хоть std::string, хоть char[N]), то к ней все равно никто добраться не может, и почему я должен платить за эту потокобезопасность ? Ну а если уж она нужна, кто мешает обертку в виде thread_safe_string соорудить ?
Thread_safe_string крайне труден в написании. Более того, использование "обычной" строки вместо thread_safe — прямой путь к трудноуловимым граблям. А судя по количеству вопросов в наших форумах на тему "почему мне label.Text = "..." выкидывает исключение", рассчитывать на лёгкость применения здесь не стоит.
В дотнете баланс смещен с лозунга "не плати за то, чего не используешь" на лозунг "TANSTAAFL". Зато ленчи — гарантированные .

Это как Скандинавия — высокие налоги, зато офигенный уровень жизни и массовые гарантии. Не нравится — езжай в Сомали, там смелым мачо не мешает тотальный государственный контроль.

... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[33]: Ну ты вообще многого не видишь... ;)
От: CreatorCray  
Дата: 04.06.09 14:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Thread_safe_string крайне труден в написании.

Да ну??? Неужто написать COW строку на refcounterах так сложно?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[26]: Ну ты вообще многого не видишь... ;)
От: WolfHound  
Дата: 04.06.09 14:26
Оценка: +1 -1 :))
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>char szString[N];

PD>gets(szString);
PD>strupr(szString);

PD>и ни одного лишнего байта. Можно такое сделать ?

Что сделать?
Проезд по памяти?
Конечно нет.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: Ну ты вообще многого не видишь... ;)
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.06.09 14:41
Оценка:
Здравствуйте, CreatorCray, Вы писали:
S>>Thread_safe_string крайне труден в написании.
CC>Да ну??? Неужто написать COW строку на refcounterах так сложно?
И она будет прямо таки вся thread safe?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[27]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.06.09 14:42
Оценка:
Здравствуйте, WolfHound, Вы писали:

ГВ>>"Парадокс блаба" апеллирует к зашоренности сознания и потому превосходно работает и в обратную сторону: если ты не научился усматривать необходимые конструктивные возможности в языке X, то ты их не усмотришь нигде, и хуже того — никогда не будешь уметь в полной мере использовать тот язык, которым располагаешь. В конце концов, какая разница, где именно находится тот пресловутый пунктик, которым ограничена мыслительная деятельность?

WH>Если ты намекаешь на то что я не знаю С++ то ты мягко говоря не на того напал.

Нет. Всё, на что я "намекаю" написано открытым текстом.

WH>Можешь заглянуть в топ форума по С++... и это при том что я там уже не первый год почти не появляюсь.


Я знаю, что ты знаешь C++. Перечитай внимательно написанное.

ГВ>>Вот-вот. Возвращаемся к тому, с чего начали: к внутренней структуре строки.

WH>И как грамотная реализация строки относится к тому что строк должно быть много?

Так грамотная — это rope или линейный буфер?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Ну ты вообще многого не видишь... ;)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 04.06.09 14:52
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>Так грамотная — это rope или линейный буфер?

Все же для разных задач разные алгоритмы. В С# досих пор стандартных Б+ деревьев нет.
Все что требует частого удаления всавок по аналогии с б деревьями должны иметь такую структуру.
Либо буилдер стрингбуилдеров с ограничением на длину стрингбуилдера.
Но нелинейность оправдывает себя на больших размеров, и соответсвенно частые вставки и удаления.
Все под задачу. Поэтому 3 вида строк вполне оправдано.
и солнце б утром не вставало, когда бы не было меня
Re[28]: Ну ты вообще многого не видишь... ;)
От: WolfHound  
Дата: 04.06.09 14:54
Оценка:
Здравствуйте, WFrag, Вы писали:

WF>И что, даже на коротких строках (очень частый случай) «верёвки» будут эффективнее String/StringBuilder?

Они им не уступят.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[28]: Ну ты вообще многого не видишь... ;)
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.06.09 14:56
Оценка:
Здравствуйте, WFrag, Вы писали:
WF>И что, даже на коротких строках (очень частый случай) «верёвки» будут эффективнее String/StringBuilder?
Нет, будут также эффективны.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[32]: Ну ты вообще многого не видишь... ;)
От: Eugeny__ Украина  
Дата: 04.06.09 14:58
Оценка:
Здравствуйте, WFrag, Вы писали:



WF>Забавно. А с какой целью String/StringBuilder сделаны именно так, а не на базе char[] (который мог бы так же передаваться в String без копирования в StringBuilder.ToString())?


Не мог бы. Так как при внесении изменений в билдере(например, замене некоторых символов) эти изменения отразились бы и на строке, которая ранее была получена из этого билдера. А это
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[34]: Ну ты вообще многого не видишь... ;)
От: WolfHound  
Дата: 04.06.09 14:58
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Да ну??? Неужто написать COW строку на refcounterах так сложно?

Чтобы она еще и работала быстро на многопроцессорной тачке очень сложно.
Ибо даже InterlockedIncrement/InterlockedDecrement весьма не бесплатны на многопроцессорных машинах.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[33]: Ну ты вообще многого не видишь... ;)
От: WFrag США  
Дата: 04.06.09 15:00
Оценка:
Здравствуйте, Eugeny__, Вы писали:

E__>Не мог бы. Так как при внесении изменений в билдере(например, замене некоторых символов) эти изменения отразились бы и на строке, которая ранее была получена из этого билдера. А это


С изменяемым string ситуация ровно такая же. Ничто не мешает применить тот же финт ушами, что сделан в StringBuilder.ToString.
Re[32]: Ну ты вообще многого не видишь... ;)
От: Erop Россия  
Дата: 04.06.09 15:02
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А оно таки всегда надо ? Строки, конечно, могут быть в кэше, кэш доступен из разных потоков, тут нужна потокобезопасность и другие случаи есть. Но если я в своей C/C++ функции завел локальную auto переменную (хоть std::string, хоть char[N]), то к ней все равно никто добраться не может, и почему я должен платить за эту потокобезопасность ? Ну а если уж она нужна, кто мешает обертку в виде thread_safe_string соорудить ?


Ну в случае когда GC нет, ты всё более или мене верно говоришь, но в шарпее есть GC а COW фиг реализуешь, наоборот...
Так что фишка в том, получается, что в до-диезе хоршо одно работает, а в плюсах другое...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[28]: Ну ты вообще многого не видишь... ;)
От: WolfHound  
Дата: 04.06.09 15:02
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Так грамотная — это rope или линейный буфер?

rope. Другие не нужны.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: Ну ты вообще многого не видишь... ;)
От: WFrag США  
Дата: 04.06.09 15:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

WF>>И что, даже на коротких строках (очень частый случай) «верёвки» будут эффективнее String/StringBuilder?

WH>Они им не уступят.

Да, действительно, не сообразил.

А как быть с заменой символа (например, 1000-ый, в строке, созданной конкатенацией пачки других строк)? В этом случае хочется по возможности не создавать лишние объекты, а значит изменяемый кусок не должен разделяться другими строками.
Re[29]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.06.09 15:04
Оценка: +1 :)
Здравствуйте, Serginio1, Вы писали:

ГВ>>Так грамотная — это rope или линейный буфер?

S> Все же для разных задач разные алгоритмы. В С# досих пор стандартных Б+ деревьев нет.

Угу, угу.

S>Все что требует частого удаления всавок по аналогии с б деревьями должны иметь такую структуру.

S>Либо буилдер стрингбуилдеров с ограничением на длину стрингбуилдера.
S> Но нелинейность оправдывает себя на больших размеров, и соответсвенно частые вставки и удаления.
S>Все под задачу. Поэтому 3 вида строк вполне оправдано.

О! Итак, ты уже нашёл оправдания для трёх видов строк. Кто больше?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[29]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.06.09 15:07
Оценка:
Здравствуйте, WolfHound, Вы писали:

ГВ>>Так грамотная — это rope или линейный буфер?

WH>rope. Другие не нужны.

Даже с учётом immutability? Обход узлов — это уже бесплатно?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Ну ты вообще многого не видишь... ;)
От: WolfHound  
Дата: 04.06.09 15:10
Оценка:
Здравствуйте, WFrag, Вы писали:

WF>А как быть с заменой символа (например, 1000-ый, в строке, созданной конкатенацией пачки других строк)? В этом случае хочется по возможности не создавать лишние объекты, а значит изменяемый кусок не должен разделяться другими строками.

А давай ты реалистичную задачу придумаешь где это может понадобиться.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[30]: Ну ты вообще многого не видишь... ;)
От: WolfHound  
Дата: 04.06.09 15:14
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Даже с учётом immutability?

Это к чему?
Ропы сами неизменяемые.

ГВ>Обход узлов — это уже бесплатно?

А зачем нам их обходить?
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[29]: Ну ты вообще многого не видишь... ;)
От: WFrag США  
Дата: 04.06.09 15:25
Оценка:
Здравствуйте, Sinclair, Вы писали:

WF>>И что, даже на коротких строках (очень частый случай) «верёвки» будут эффективнее String/StringBuilder?

S>Нет, будут также эффективны.

В терминах O-большого или с учётом константы?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.