Здравствуйте, Klapaucius, Вы писали:
K>Здравствуйте, Serginio1, Вы писали:
S>> эээ WolfHound утверждает что веревки это 2-3 дерево.
K>Ну, не обязательно 2-3.
Если мы хотим иметь поиск по индексу, то нужно иметь дерево, а значит при вставке его модифицировать, при имутабельно структуре
копировать ветку, с модифицированным количество символов.
и солнце б утром не вставало, когда бы не было меня
C>>Попробуйте Replace('1','2') заменить на Replace('c1', 'abc4') Будет куда интереснее, чем замена одного символа.
H>Померял -- не дождался
Уменьшите количество итераций при формировании еще на порядок (больше, если потребуется). У меня Делфи нет, так что проверить у себя не могу, а узнать интересно.
Здравствуйте, criosray, Вы писали:
C>А куда ей еще уйти? Все еще раз и еще раз сводится к примитивизму С++, как платформы, где даже такая элементращина, как преобразование типов, требует штудирования MSDN, а для банального replace всех вхождений подстроки в строку надо подкючать стороннюю библиотеку типа boost.
Так С++ это не фреймворк для разработки приложений.. Фреймворк это QT, например...
А С++ это стредство разработки фреймворков...
Если тебе хочется именно мощь фреймворков сравнивать, то имеет смысл сравнивать какие-то фреймворки, а не "голый С++", при этом стоит учесть, что С++ на самом деле предлагает широкий выбор фреймворков. Иногда это хорошо, а иногда плохо...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, criosray, Вы писали:
C>>>Попробуйте Replace('1','2') заменить на Replace('c1', 'abc4') Будет куда интереснее, чем замена одного символа.
H>>Померял -- не дождался
C>Уменьшите количество итераций при формировании еще на порядок (больше, если потребуется). У меня Делфи нет, так что проверить у себя не могу, а узнать интересно.
Результа удалось дождаться лишь на 100,000 итераций.
Впрочем, я не удивлен. Судя по всему (по алгоритмам, структуре, набору методов) TStringBuilder был добавлен чтоб облегчить создание форматированных строк, и по скорости не оптимизировался (хотя у меня только Update 1, в поздних, а их уже 4, его кажется пилили).
Здравствуйте, Erop, Вы писали:
C>>А куда ей еще уйти? Все еще раз и еще раз сводится к примитивизму С++, как платформы, где даже такая элементращина, как преобразование типов, требует штудирования MSDN, а для банального replace всех вхождений подстроки в строку надо подкючать стороннюю библиотеку типа boost.
E>Так С++ это не фреймворк для разработки приложений.. Фреймворк это QT, например...
Ну здраствуйте, капитан Очевидность... E>А С++ это стредство разработки фреймворков...
Ух ты, не может быть. E>Если тебе хочется именно мощь фреймворков сравнивать, то имеет смысл сравнивать какие-то фреймворки, а не "голый С++", при этом стоит учесть, что С++ на самом деле предлагает широкий выбор фреймворков. Иногда это хорошо, а иногда плохо...
STL это что? Я же не предлагаю сравнивать std::wstring с Rope из сторонней библиотеки. Да и вообще Вас не поймешь... то "зачем добавлять в язык то, что можно сделать в стандартной библиотеке", то "следует учесть, что С++ предлагает широкий выбор".
Ну учли. И что дальше? Ну давайте сравнивать не std::wstring, а СString, QString или что там еще есть в зоопарке строк С++...
Здравствуйте, criosray, Вы писали:
ГВ>>Цикл нужен только для того, чтобы время операции точней померить. C>Так что Вы меряете? Append или ToString? Ведь ToString`ов ровно столько же, сколько и Append`ов, что почти что нонсенс.
Я понял, согласен, мешанина получилась. Надо бы попробовать переструктурировать. Одна причина слива .Net понятна — ToString. Интересно, сколько она весит...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, criosray, Вы писали:
E>>Если тебе хочется именно мощь фреймворков сравнивать, то имеет смысл сравнивать какие-то фреймворки, а не "голый С++", при этом стоит учесть, что С++ на самом деле предлагает широкий выбор фреймворков. Иногда это хорошо, а иногда плохо... C>STL это что?
Библиотека, которой повезло быть включенной в стандарт C++. Библиотека. Хочешь — пользуйся, не хочешь — нет.
C>Я же не предлагаю сравнивать std::wstring с Rope из сторонней библиотеки.
А зря, это как раз было бы интересно.
C>Да и вообще Вас не поймешь... то "зачем добавлять в язык то, что можно сделать в стандартной библиотеке", то "следует учесть, что С++ предлагает широкий выбор". C>Ну учли. И что дальше? Ну давайте сравнивать не std::wstring, а СString, QString или что там еще есть в зоопарке строк С++...
Такое сравнение сможет ответить только на один вопрос — насколько хороша или плоха та или иная реализация строк.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>>Цикл нужен только для того, чтобы время операции точней померить. C>>Так что Вы меряете? Append или ToString? Ведь ToString`ов ровно столько же, сколько и Append`ов, что почти что нонсенс.
ГВ>Я понял, согласен, мешанина получилась. Надо бы попробовать переструктурировать. Одна причина слива .Net понятна — ToString. Интересно, сколько она весит...
Здравствуйте, Геннадий Васильев, Вы писали:
E>>>Если тебе хочется именно мощь фреймворков сравнивать, то имеет смысл сравнивать какие-то фреймворки, а не "голый С++", при этом стоит учесть, что С++ на самом деле предлагает широкий выбор фреймворков. Иногда это хорошо, а иногда плохо... C>>STL это что?
ГВ>Библиотека, которой повезло быть включенной в стандарт C++. Библиотека. Хочешь — пользуйся, не хочешь — нет.
.NET Framework это тоже библиотека "которой повезло", а String это тоже просто класс.
Только в дотнет к счастью не наплодили зоопарка лишних сущностей. С++ по-сути уникальный язык в плане того, что каждый норовит создать свою реализацию типа строк только потому, что стандартная — ущербна/неудобна... Или Вы знаете другие причины для появления СString, QString и иже с ними?
C>>Да и вообще Вас не поймешь... то "зачем добавлять в язык то, что можно сделать в стандартной библиотеке", то "следует учесть, что С++ предлагает широкий выбор". C>>Ну учли. И что дальше? Ну давайте сравнивать не std::wstring, а СString, QString или что там еще есть в зоопарке строк С++...
ГВ>Такое сравнение сможет ответить только на один вопрос — насколько хороша или плоха та или иная реализация строк.
Само собою. С реализацией std::wstring разобрались. Какая будет следущей?
Здравствуйте, criosray, Вы писали:
ГВ>>Я понял, согласен, мешанина получилась. Надо бы попробовать переструктурировать. Одна причина слива .Net понятна — ToString. Интересно, сколько она весит...
C>Слива? Вы ничего не путаете?
По цифрам получился слив.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>>Я понял, согласен, мешанина получилась. Надо бы попробовать переструктурировать. Одна причина слива .Net понятна — ToString. Интересно, сколько она весит...
C>>Слива? Вы ничего не путаете?
ГВ>По цифрам получился слив.
Хм? append — идентично по скорости. replace — StringBuilder на много быстрее. Это при том, что дотнет не занимается оптимизацией на этапе компилляции в IL, а в runtime, как мы выяснили, у компиллятора IL нет времени для особых оптимизаций. Не говоря уж о том, что StringBuilder в отличии от std::wstring — гарантированно потоко безопасный.
А-а, стоп! Я понял... Вы имели в виду слив С++ Тогда +1
Здравствуйте, criosray, Вы писали:
ГВ>>Библиотека, которой повезло быть включенной в стандарт C++. Библиотека. Хочешь — пользуйся, не хочешь — нет. C>.NET Framework это тоже библиотека "которой повезло", а String это тоже просто класс.
Ты можешь выкинуть String из .Net? А я вот, std::wstring смогу запросто.
C>Только в дотнет к счастью не наплодили зоопарка лишних сущностей. С++ по-сути уникальный язык в плане того, что каждый норовит создать свою реализацию типа строк только потому, что стандартная — ущербна/неудобна... Или Вы знаете другие причины для появления СString, QString и иже с ними?
CString точно старше std::wstring. На счёт QString точно не знаю.
ГВ>>Такое сравнение сможет ответить только на один вопрос — насколько хороша или плоха та или иная реализация строк. C>Само собою. С реализацией std::wstring разобрались. Какая будет следущей?
Можно продолжить играться с std::wstring. Например, подсунуть ей другой аллокатор.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>>Библиотека, которой повезло быть включенной в стандарт C++. Библиотека. Хочешь — пользуйся, не хочешь — нет. C>>.NET Framework это тоже библиотека "которой повезло", а String это тоже просто класс.
ГВ>Ты можешь выкинуть String из .Net? А я вот, std::wstring смогу запросто.
+1 — зоопарку строк С++ самое место там — на помойке. Выкидывайте.
C>>Только в дотнет к счастью не наплодили зоопарка лишних сущностей. С++ по-сути уникальный язык в плане того, что каждый норовит создать свою реализацию типа строк только потому, что стандартная — ущербна/неудобна... Или Вы знаете другие причины для появления СString, QString и иже с ними? ГВ>CString точно старше std::wstring. На счёт QString точно не знаю.
Так узнайте.
Например, проскочила информация, что QString immutable...
ГВ>>>Такое сравнение сможет ответить только на один вопрос — насколько хороша или плоха та или иная реализация строк. C>>Само собою. С реализацией std::wstring разобрались. Какая будет следущей?
ГВ>Можно продолжить играться с std::wstring. Например, подсунуть ей другой аллокатор.
Ну да. А еще можно переписать ее так, чтоб внутри было concatenation tree — сугубо, чтоб заточить под задачу аккумулирования строк.
Здравствуйте, criosray, Вы писали:
C>Хм? append — идентично по скорости. replace — StringBuilder на много быстрее. Это при том, что дотнет не занимается оптимизацией на этапе компилляции в IL, а в runtime, как мы выяснили, у компиллятора IL нет времени для особых оптимизаций. Не говоря уж о том, что StringBuilder в отличии от std::wstring — гарантированно потоко безопасный.
;####! в код заглядывал? Там unsafe code. К тому StringBuilder — класс заточенный на данную задачу. В итоге мы имеем фактически специальный нейтивный код, против all purpose. Ну и чему тут удивляться?
C>>Хм? append — идентично по скорости. replace — StringBuilder на много быстрее. Это при том, что дотнет не занимается оптимизацией на этапе компилляции в IL, а в runtime, как мы выяснили, у компиллятора IL нет времени для особых оптимизаций. Не говоря уж о том, что StringBuilder в отличии от std::wstring — гарантированно потоко безопасный.
_>;####! в код заглядывал? Там unsafe code.
И? В .NET FW порядочно блоков с unsafe блоками кода. Для Вас это новость? Или Вы просто не знаете зачем это делается?
_>К тому StringBuilder — класс заточенный на данную задачу.
Так и есть.
_>В итоге мы имеем фактически специальный нейтивный код, против all purpose.
Хм? Не понял. Где Вы увидели нейтив код?
_>Ну и чему тут удивляться?
А я ничему не удивляюсь. Результат тестов для меня был ожидаемым.
Здравствуйте, criosray, Вы писали:
ГВ>>Ты можешь выкинуть String из .Net? А я вот, std::wstring смогу запросто. C>+1 — зоопарку строк С++ самое место там — на помойке. Выкидывайте.
Ну к чему такой пафос?! Взять строки/управление памятью/процессами/ещё что-нибудь и заменить другим, более подходящим к текущей задаче — самое обыкновенное дело. Никаких тотемных плясок по этому поводу обычно не устраивают.
C>>>Только в дотнет к счастью не наплодили зоопарка лишних сущностей. С++ по-сути уникальный язык в плане того, что каждый норовит создать свою реализацию типа строк только потому, что стандартная — ущербна/неудобна... Или Вы знаете другие причины для появления СString, QString и иже с ними? ГВ>>CString точно старше std::wstring. На счёт QString точно не знаю.
C>Так узнайте.
Узнал. QT тоже старше стандарта C++, как минимум на три года. Вот тебе и причина появления QString.
C>Например, проскочила информация, что QString immutable...
Для immutable у неё слишком много методов append/insert/replace. Так что, пускай информация скачет дальше.
ГВ>>>>Такое сравнение сможет ответить только на один вопрос — насколько хороша или плоха та или иная реализация строк. C>>>Само собою. С реализацией std::wstring разобрались. Какая будет следущей? ГВ>>Можно продолжить играться с std::wstring. Например, подсунуть ей другой аллокатор. C>Ну да. А еще можно переписать ее так, чтоб внутри было concatenation tree — сугубо, чтоб заточить под задачу аккумулирования строк.
Как вариант. Потом, можно взять другую реализацию STL (не от Microsoft), например, широко известную STLPort.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>>Ты можешь выкинуть String из .Net? А я вот, std::wstring смогу запросто. C>>+1 — зоопарку строк С++ самое место там — на помойке. Выкидывайте.
ГВ>Ну к чему такой пафос?! Взять строки/управление памятью/процессами/ещё что-нибудь и заменить другим, более подходящим к текущей задаче — самое обыкновенное дело. Никаких тотемных плясок по этому поводу обычно не устраивают.
Да-да.
C>>Например, проскочила информация, что QString immutable...
ГВ>Для immutable у неё слишком много методов append/insert/replace. Так что, пускай информация скачет дальше.
А чем эти методы мешают immutable природе QString? Дотнетовский String тоже имеет эти методы. Не знали?
ГВ>>>>>Такое сравнение сможет ответить только на один вопрос — насколько хороша или плоха та или иная реализация строк. C>>>>Само собою. С реализацией std::wstring разобрались. Какая будет следущей? ГВ>>>Можно продолжить играться с std::wstring. Например, подсунуть ей другой аллокатор. C>>Ну да. А еще можно переписать ее так, чтоб внутри было concatenation tree — сугубо, чтоб заточить под задачу аккумулирования строк.
ГВ>Как вариант. Потом, можно взять другую реализацию STL (не от Microsoft), например, широко известную STLPort.
Здравствуйте, criosray, Вы писали:
C>>>Например, проскочила информация, что QString immutable... ГВ>>Для immutable у неё слишком много методов append/insert/replace. Так что, пускай информация скачет дальше. C>А чем эти методы мешают immutable природе QString? Дотнетовский String тоже имеет эти методы. Не знали?
Дотнетовский, например, String.insert возвращает string. А QT-шный QString::insert возвращает QString&. Разница понятна?
ГВ>>Как вариант. Потом, можно взять другую реализацию STL (не от Microsoft), например, широко известную STLPort. C>Да уж, скучать не приходится.
Странно, что здесь эдакого?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
C>>>>Например, проскочила информация, что QString immutable... ГВ>>>Для immutable у неё слишком много методов append/insert/replace. Так что, пускай информация скачет дальше. C>>А чем эти методы мешают immutable природе QString? Дотнетовский String тоже имеет эти методы. Не знали?
ГВ>Дотнетовский, например, String.insert возвращает string. А QT-шный QString::insert возвращает QString&. Разница понятна?
Разница понятна — и то и другое есть ссылка.
Я не знаю immutable ли QString или нет — за что купил, за то и продаю. Если можете доказать обратное — милости просим, но пока Ваши доводы ничего не доказали, равно как ничего и не опровергли.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Здравствуйте, criosray, Вы писали:
C>>>>Например, проскочила информация, что QString immutable... ГВ>>>Для immutable у неё слишком много методов append/insert/replace. Так что, пускай информация скачет дальше. C>>А чем эти методы мешают immutable природе QString? Дотнетовский String тоже имеет эти методы. Не знали?
ГВ>Дотнетовский, например, String.insert возвращает string. А QT-шный QString::insert возвращает QString&. Разница понятна?
Хочу уточнить насчет immutable QString. Дословно было так : здесь
QString uses implicit sharing (copy-on-write) to reduce memory usage and to avoid the needless copying of data. This also helps reduce the inherent overhead of storing 16-bit characters instead of 8-bit characters.
Implicit sharing automatically detaches the object from a shared block if the object is about to change and the reference count is greater than one. (This is often called copy-on-write or value semantics.)
An implicitly shared class has total control of its internal data. In any member functions that modify its data, it automatically detaches before modifying the data.