Здравствуйте, Sinclair, Вы писали:
S>А вот по соседству бродит некий Егор, который ставит минусы на все мои посты, вот он уверен, что std::wstring — это епик вин С++, и что он не "гора компромиссов между ужами и ежами", а спроектирован побеждать во всех обстоятельствах.
Что то я такого в этой теме не припомню.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, criosray, Вы писали:
C>Кстати, спасибо, что напомнили. Публичные методы StringBuilder еще и thread safe в отличии от std::wstring.
Не совсем так
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
S>Изменяемые строки в моём любимом языке реализовали вполне эффективно — см StringBuilder.
Это, эта всякий случай, если не понятно: НЕ СМОГЛИ РЕАЛИЗОВАТЬ ЭФФЕКТИВНО СТРОКУ, НЕ РАЗДЕЛЯЯ ЕЁ НА МУТАБЕЛЬНУЮ И ИММУТАБЕЛЬНУЮ... А что, смогли что ли?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
S>>Изменяемые строки в моём любимом языке реализовали вполне эффективно — см StringBuilder.
S>Это, эта всякий случай, если не понятно: НЕ СМОГЛИ РЕАЛИЗОВАТЬ ЭФФЕКТИВНО СТРОКУ, НЕ РАЗДЕЛЯЯ ЕЁ НА МУТАБЕЛЬНУЮ И ИММУТАБЕЛЬНУЮ... А что, смогли что ли?
А где там про эпик вин std::wstring? Я что-то тоже такого не припоминаю.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали: ГВ>А где там про эпик вин std::wstring? Я что-то тоже такого не припоминаю.
IMHO, если бы от такого разделения на константные строки и фабрики строк была какая-то реальная польза, в C++ уже бы давно были бы популярны такие библиотеки.
E>Ты писал, что фишка в том, что создание копии строки дорого стоит, ну так это тогда всё в неэффективность мутабельной строки в С# упирается выходит? Потому, как в С++ удобно и легко получается COW и нет никаких мегапроблем. А для константных строк тоже нет проблем...
Ну то есть вот, наша неэффективная мутабельная строка порвала, значит, "удобные и лёгкие" строки в C++.
В общем, это мне уже как-то становится скучно. Есть медицинский факт: строки в С++ спроектированы отвратительно.
Я достаточно хорошо понимаю все исторические причины, которые привели к этому архитектурному убожеству.
Но фанаты от нефанатов отличаются только тем, что фанаты готовы тут ставить сотни минусов, лишь бы не признавать факт того, что кто-то может сделать лучше, чем в их любимой деревянной игрушке.
А нефанаты тем временем изучают вопросы типа "как правильно проектировать строки, чтобы получать эффективную реализацию". Я вовсе не считаю StringBuilder идеалом. Но то, что порвёт StringBuilder, оставит от ваших std::* кровавые ошмётки.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>В общем, это мне уже как-то становится скучно. Есть медицинский факт: строки в С++ спроектированы отвратительно. S>Я достаточно хорошо понимаю все исторические причины, которые привели к этому архитектурному убожеству.
Какие строки? "const char *"?
С++ как обычно даёт кучу возможностей сделать что-то красивое (как и выстрелить себе в ногу). Например, я писал свой пакет строк на основе Александресковских. С фичами, которых нет в С# (и не будет). Например, возможностью превратить immutable-строку в mutable при необходимости с почти нулевыми затратами.
Или с возможностью подсунуть хранилище с gap buffer'ом. Сейчас вот пытаюсь этот код найти....
Здравствуйте, Serginio1, Вы писали:
CC>>>>В С++ у тебя вылетает bad_alloc на ~1.4 Гб занятой памяти. C>>>1.4 гб это далеко не лимит — еще как минимум 600 мб должно быть доступно процессу. CC>>если посмотреть VMView то видно что куски то есть, но постоянно растущая строка некоторую часть хипа зафрагментировала. S>В свое время делал тесты http://www.rsdn.ru/forum/design/701354.1.aspx
S>Для Лохов память выделяется со старших адресов и не подвергается сборе мусора. Хотя давно было дело.
О чём ты?
Я писал про поведение С++ примера, откуда сборка мусора?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
C>С++ как обычно даёт кучу возможностей сделать что-то красивое (как и выстрелить себе в ногу). Например, я писал свой пакет строк на основе Александресковских. С фичами, которых нет в С# (и не будет). Например, возможностью превратить immutable-строку в mutable при необходимости с почти нулевыми затратами.
Stringbuilder занимается таким превращением. http://rsdn.ru/forum/flame.comp/3421959.1.aspx
Здравствуйте, Serginio1, Вы писали:
C>>С++ как обычно даёт кучу возможностей сделать что-то красивое (как и выстрелить себе в ногу). Например, я писал свой пакет строк на основе Александресковских. С фичами, которых нет в С# (и не будет). Например, возможностью превратить immutable-строку в mutable при необходимости с почти нулевыми затратами. S>Stringbuilder занимается таким превращением. http://rsdn.ru/forum/flame.comp/3421959.1.aspx
Здравствуйте, Sinclair, Вы писали:
ГВ>>А где там про эпик вин std::wstring? Я что-то тоже такого не припоминаю. S>
IMHO, если бы от такого разделения на константные строки и фабрики строк была какая-то реальная польза, в C++ уже бы давно были бы популярны такие библиотеки.
E>Ты писал, что фишка в том, что создание копии строки дорого стоит, ну так это тогда всё в неэффективность мутабельной строки в С# упирается выходит? Потому, как в С++ удобно и легко получается COW и нет никаких мегапроблем. А для константных строк тоже нет проблем...
S>Ну то есть вот, наша неэффективная мутабельная строка порвала, значит, "удобные и лёгкие" строки в C++.
В упомянутом тобой постинге Егора нет никаких восхвалений в адрес std::wstring (отучаемся додумывать ненаписанное), да и сама std::wstring не упоминается. COW — это не std::wstring.
Так где про эпик вин std::wstring?
S>В общем, это мне уже как-то становится скучно. Есть медицинский факт: строки в С++ спроектированы отвратительно.
Не "строки в C++", а "строки MS STL". Даже не смотря на то, что эти строки описаны в стандарте, нет никаких оснований переносить недостатки, свойственные тем или иным реализциям std::basic_string на весь C++.
S>Я достаточно хорошо понимаю все исторические причины, которые привели к этому архитектурному убожеству. S>Но фанаты от нефанатов отличаются только тем, что фанаты готовы тут ставить сотни минусов, лишь бы не признавать факт того, что кто-то может сделать лучше, чем в их любимой деревянной игрушке.
Не смеши меня, ладно? Никто из C++-ников не говорил (AFAIR), что std::wstring есть лучшее решение на все случаи жизни. Это только строка, предусмотренная стандартной библиотекой. Но "стандартная" не означает "обязательная к применению", поэтому нельзя апеллировать к этой реализации, как к обязательно используемой везде в C++ ("строка в C++" — фраза содержит именно такое неявное обобщение). Сама по себе подобная апелляция уже ошибочна. Не нравятся те или иные строки? Сделай другие.
S>А нефанаты тем временем изучают вопросы типа "как правильно проектировать строки, чтобы получать эффективную реализацию". Я вовсе не считаю StringBuilder идеалом. Но то, что порвёт StringBuilder, оставит от ваших std::* кровавые ошмётки.
Ну, поздравляю нефанатов. Наконец-то они дошли до того, что известно любому C++-нику. Что универсальных решений не бывает.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Cyberax, Вы писали:
C>Не, у меня круче всё было
Ну своё то оно всегда
Просто имутабельность строки, гарантируется фреймворком в сэйв режиме. В нативе это возможно только через пометку памяти R/O.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
C>>С++ как обычно даёт кучу возможностей сделать что-то красивое (как и выстрелить себе в ногу). Например, я писал свой пакет строк на основе Александресковских. С фичами, которых нет в С# (и не будет). Например, возможностью превратить immutable-строку в mutable при необходимости с почти нулевыми затратами. S>Stringbuilder занимается таким превращением. http://rsdn.ru/forum/flame.comp/3421959.1.aspx
Занимается, но только при одном сценарии использования.
var sb = new StringBuilder();
/* цикл модификаций */string result = sb.ToString();
/* забыли про sb */
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Serginio1, Вы писали:
C>>Не, у меня круче всё было S>Ну своё то оно всегда S> Просто имутабельность строки, гарантируется фреймворком в сэйв режиме. В нативе это возможно только через пометку памяти R/O.
В С++ для этого есть слово "const". Конечно, его можно снять const_cast'ом, но это уже ССЗБ.
Суть то в том, что занимается. И нефиг для этих целей стрингбуилдер трогать уже строка для этого есть.
Скорее проблема в том, что в мануалах я этого вроде не видел, хотя и могу ошибаться.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Cyberax, Вы писали:
C>С фичами, которых нет в С# (и не будет). Например, возможностью превратить immutable-строку в mutable при необходимости с почти нулевыми затратами.
Лучше молчать, если не знает.
Здравствуйте, CreatorCray, Вы писали:
CC>>>На 10к строк С# падает с out of memory C>>??? Не падает. Выполняется за 3.9 сек. CC>У тя или 64битная ОС или памяти > 2гиг
Слабо прочитать топик?
CC>>>В С++ у тебя вылетает bad_alloc на ~1.4 Гб занятой памяти. C>>1.4 гб это далеко не лимит — еще как минимум 600 мб должно быть доступно процессу. CC>если посмотреть VMView то видно что куски то есть, но постоянно растущая строка некоторую часть хипа зафрагментировала
Еще один камень в огород С++.
Здравствуйте, CreatorCray, Вы писали:
ГВ>>>Можно продолжить играться с std::wstring. Например, подсунуть ей другой аллокатор. C>>Ну да. А еще можно переписать ее так, чтоб внутри было concatenation tree — сугубо, чтоб заточить под задачу аккумулирования строк. CC>Мне кажется или ты начинаешь понемногу понимать?
Это Вы начинаете немного понимать. У меня-то проблем с пониманием не было и я изначально говорил, что разделение строк по методам работы с ними (а не по способу внутренней реализации, как это сделано в с++ ) на строку и аккумулятор в дотнет — гениальное решение, которое на много эфективнее (и удобнее) строк С++.
ГВ>>>Дотнетовский, например, String.insert возвращает string. А QT-шный QString::insert возвращает QString&. Разница понятна? C>>Разница понятна — и то и другое есть ссылка. CC>О да!
CC>Как ты там говорить любишь: "не позорьтесь"
Здравствуйте, criosray, Вы писали:
C>>С фичами, которых нет в С# (и не будет). Например, возможностью превратить immutable-строку в mutable при необходимости с почти нулевыми затратами. C>Лучше молчать, если не знает.
Таки нет в .NET тех фич, которые у меня были.
Здравствуйте, Cyberax, Вы писали:
C>>>С фичами, которых нет в С# (и не будет). Например, возможностью превратить immutable-строку в mutable при необходимости с почти нулевыми затратами. C>>Лучше молчать, если не знает. C>Таки нет в .NET тех фич, которые у меня были.
Ну давайте рассказывайте что за фичи-то.