Re[65]: Ну ты вообще многого не видишь... ;)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 08.06.09 19:12
Оценка:
Здравствуйте, Klapaucius, Вы писали:

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


S>> эээ WolfHound утверждает что веревки это 2-3 дерево.


K>Ну, не обязательно 2-3.

Если мы хотим иметь поиск по индексу, то нужно иметь дерево, а значит при вставке его модифицировать, при имутабельно структуре
копировать ветку, с модифицированным количество символов.
и солнце б утром не вставало, когда бы не было меня
Re[56]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 19:20
Оценка:
Здравствуйте, hattab, Вы писали:


C>>Попробуйте Replace('1','2') заменить на Replace('c1', 'abc4') Будет куда интереснее, чем замена одного символа.


H>Померял -- не дождался


Уменьшите количество итераций при формировании еще на порядок (больше, если потребуется). У меня Делфи нет, так что проверить у себя не могу, а узнать интересно.
Re[58]: Ну ты вообще многого не видишь... ;)
От: Erop Россия  
Дата: 08.06.09 19:37
Оценка: +1
Здравствуйте, criosray, Вы писали:

C>А куда ей еще уйти? Все еще раз и еще раз сводится к примитивизму С++, как платформы, где даже такая элементращина, как преобразование типов, требует штудирования MSDN, а для банального replace всех вхождений подстроки в строку надо подкючать стороннюю библиотеку типа boost.


Так С++ это не фреймворк для разработки приложений.. Фреймворк это QT, например...
А С++ это стредство разработки фреймворков...
Если тебе хочется именно мощь фреймворков сравнивать, то имеет смысл сравнивать какие-то фреймворки, а не "голый С++", при этом стоит учесть, что С++ на самом деле предлагает широкий выбор фреймворков. Иногда это хорошо, а иногда плохо...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[57]: Ну ты вообще многого не видишь... ;)
От: hattab  
Дата: 08.06.09 19:52
Оценка: 1 (1)
Здравствуйте, criosray, Вы писали:

C>>>Попробуйте Replace('1','2') заменить на Replace('c1', 'abc4') Будет куда интереснее, чем замена одного символа.


H>>Померял -- не дождался


C>Уменьшите количество итераций при формировании еще на порядок (больше, если потребуется). У меня Делфи нет, так что проверить у себя не могу, а узнать интересно.


Результа удалось дождаться лишь на 100,000 итераций.

C#:
append: elapsed 00:00:00.0049570
200000
replace: elapsed 00:00:00.0097196
400000
insert: elapsed 00:00:00.0345641
400090

Delphi 2009 (миллисекунды):
string.append: elapsed 4 (200000)
string.insert: elapsed 12 (200090)
-----------
sb.append: elapsed 8 (200000)
sb.replace: elapsed 4840 (300000)
sb.insert: elapsed 21 (300090)

Впрочем, я не удивлен. Судя по всему (по алгоритмам, структуре, набору методов) TStringBuilder был добавлен чтоб облегчить создание форматированных строк, и по скорости не оптимизировался (хотя у меня только Update 1, в поздних, а их уже 4, его кажется пилили).
Re[59]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 20:01
Оценка:
Здравствуйте, Erop, Вы писали:

C>>А куда ей еще уйти? Все еще раз и еще раз сводится к примитивизму С++, как платформы, где даже такая элементращина, как преобразование типов, требует штудирования MSDN, а для банального replace всех вхождений подстроки в строку надо подкючать стороннюю библиотеку типа boost.


E>Так С++ это не фреймворк для разработки приложений.. Фреймворк это QT, например...

Ну здраствуйте, капитан Очевидность...
E>А С++ это стредство разработки фреймворков...
Ух ты, не может быть.
E>Если тебе хочется именно мощь фреймворков сравнивать, то имеет смысл сравнивать какие-то фреймворки, а не "голый С++", при этом стоит учесть, что С++ на самом деле предлагает широкий выбор фреймворков. Иногда это хорошо, а иногда плохо...
STL это что? Я же не предлагаю сравнивать std::wstring с Rope из сторонней библиотеки. Да и вообще Вас не поймешь... то "зачем добавлять в язык то, что можно сделать в стандартной библиотеке", то "следует учесть, что С++ предлагает широкий выбор".
Ну учли. И что дальше? Ну давайте сравнивать не std::wstring, а СString, QString или что там еще есть в зоопарке строк С++...
Re[56]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.06.09 21:26
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Цикл нужен только для того, чтобы время операции точней померить.

C>Так что Вы меряете? Append или ToString? Ведь ToString`ов ровно столько же, сколько и Append`ов, что почти что нонсенс.

Я понял, согласен, мешанина получилась. Надо бы попробовать переструктурировать. Одна причина слива .Net понятна — ToString. Интересно, сколько она весит...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[60]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.06.09 21:34
Оценка:
Здравствуйте, criosray, Вы писали:

E>>Если тебе хочется именно мощь фреймворков сравнивать, то имеет смысл сравнивать какие-то фреймворки, а не "голый С++", при этом стоит учесть, что С++ на самом деле предлагает широкий выбор фреймворков. Иногда это хорошо, а иногда плохо...

C>STL это что?

Библиотека, которой повезло быть включенной в стандарт C++. Библиотека. Хочешь — пользуйся, не хочешь — нет.

C>Я же не предлагаю сравнивать std::wstring с Rope из сторонней библиотеки.


А зря, это как раз было бы интересно.

C>Да и вообще Вас не поймешь... то "зачем добавлять в язык то, что можно сделать в стандартной библиотеке", то "следует учесть, что С++ предлагает широкий выбор".

C>Ну учли. И что дальше? Ну давайте сравнивать не std::wstring, а СString, QString или что там еще есть в зоопарке строк С++...

Такое сравнение сможет ответить только на один вопрос — насколько хороша или плоха та или иная реализация строк.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[57]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 21:44
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Цикл нужен только для того, чтобы время операции точней померить.

C>>Так что Вы меряете? Append или ToString? Ведь ToString`ов ровно столько же, сколько и Append`ов, что почти что нонсенс.

ГВ>Я понял, согласен, мешанина получилась. Надо бы попробовать переструктурировать. Одна причина слива .Net понятна — ToString. Интересно, сколько она весит...


Слива? Вы ничего не путаете?
Re[61]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 21:49
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

E>>>Если тебе хочется именно мощь фреймворков сравнивать, то имеет смысл сравнивать какие-то фреймворки, а не "голый С++", при этом стоит учесть, что С++ на самом деле предлагает широкий выбор фреймворков. Иногда это хорошо, а иногда плохо...

C>>STL это что?

ГВ>Библиотека, которой повезло быть включенной в стандарт C++. Библиотека. Хочешь — пользуйся, не хочешь — нет.

.NET Framework это тоже библиотека "которой повезло", а String это тоже просто класс.

Только в дотнет к счастью не наплодили зоопарка лишних сущностей. С++ по-сути уникальный язык в плане того, что каждый норовит создать свою реализацию типа строк только потому, что стандартная — ущербна/неудобна... Или Вы знаете другие причины для появления СString, QString и иже с ними?

C>>Да и вообще Вас не поймешь... то "зачем добавлять в язык то, что можно сделать в стандартной библиотеке", то "следует учесть, что С++ предлагает широкий выбор".

C>>Ну учли. И что дальше? Ну давайте сравнивать не std::wstring, а СString, QString или что там еще есть в зоопарке строк С++...

ГВ>Такое сравнение сможет ответить только на один вопрос — насколько хороша или плоха та или иная реализация строк.

Само собою. С реализацией std::wstring разобрались. Какая будет следущей?
Re[58]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.06.09 21:52
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Я понял, согласен, мешанина получилась. Надо бы попробовать переструктурировать. Одна причина слива .Net понятна — ToString. Интересно, сколько она весит...


C>Слива? Вы ничего не путаете?


По цифрам получился слив.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[59]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 21:59
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Я понял, согласен, мешанина получилась. Надо бы попробовать переструктурировать. Одна причина слива .Net понятна — ToString. Интересно, сколько она весит...


C>>Слива? Вы ничего не путаете?


ГВ>По цифрам получился слив.


Хм? append — идентично по скорости. replace — StringBuilder на много быстрее. Это при том, что дотнет не занимается оптимизацией на этапе компилляции в IL, а в runtime, как мы выяснили, у компиллятора IL нет времени для особых оптимизаций. Не говоря уж о том, что StringBuilder в отличии от std::wstring — гарантированно потоко безопасный.

А-а, стоп! Я понял... Вы имели в виду слив С++ Тогда +1
Re[62]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.06.09 22:02
Оценка:
Здравствуйте, 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.: Винодельческие провинции — это есть рулез!
Re[63]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 22:08
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Библиотека, которой повезло быть включенной в стандарт 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 — сугубо, чтоб заточить под задачу аккумулирования строк.
Re[60]: Ну ты вообще многого не видишь... ;)
От: skeptik_  
Дата: 08.06.09 22:11
Оценка: +1 -1
Здравствуйте, criosray, Вы писали:

C>Хм? append — идентично по скорости. replace — StringBuilder на много быстрее. Это при том, что дотнет не занимается оптимизацией на этапе компилляции в IL, а в runtime, как мы выяснили, у компиллятора IL нет времени для особых оптимизаций. Не говоря уж о том, что StringBuilder в отличии от std::wstring — гарантированно потоко безопасный.


;####! в код заглядывал? Там unsafe code. К тому StringBuilder — класс заточенный на данную задачу. В итоге мы имеем фактически специальный нейтивный код, против all purpose. Ну и чему тут удивляться?
Re[61]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 22:18
Оценка:
Здравствуйте, skeptik_, Вы писали:


C>>Хм? append — идентично по скорости. replace — StringBuilder на много быстрее. Это при том, что дотнет не занимается оптимизацией на этапе компилляции в IL, а в runtime, как мы выяснили, у компиллятора IL нет времени для особых оптимизаций. Не говоря уж о том, что StringBuilder в отличии от std::wstring — гарантированно потоко безопасный.


_>;####! в код заглядывал? Там unsafe code.

И? В .NET FW порядочно блоков с unsafe блоками кода. Для Вас это новость? Или Вы просто не знаете зачем это делается?

_>К тому StringBuilder — класс заточенный на данную задачу.

Так и есть.

_>В итоге мы имеем фактически специальный нейтивный код, против all purpose.

Хм? Не понял. Где Вы увидели нейтив код?

_>Ну и чему тут удивляться?

А я ничему не удивляюсь. Результат тестов для меня был ожидаемым.
Re[64]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.06.09 22:26
Оценка:
Здравствуйте, 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.: Винодельческие провинции — это есть рулез!
Re[65]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 22:30
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Ты можешь выкинуть 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.


Да уж, скучать не приходится.
Re[66]: Ну ты вообще многого не видишь... ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.06.09 23:58
Оценка: +1
Здравствуйте, 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.: Винодельческие провинции — это есть рулез!
Re[67]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 09.06.09 06:36
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:


C>>>>Например, проскочила информация, что QString immutable...

ГВ>>>Для immutable у неё слишком много методов append/insert/replace. Так что, пускай информация скачет дальше.
C>>А чем эти методы мешают immutable природе QString? Дотнетовский String тоже имеет эти методы. Не знали?

ГВ>Дотнетовский, например, String.insert возвращает string. А QT-шный QString::insert возвращает QString&. Разница понятна?

Разница понятна — и то и другое есть ссылка.

Я не знаю immutable ли QString или нет — за что купил, за то и продаю. Если можете доказать обратное — милости просим, но пока Ваши доводы ничего не доказали, равно как ничего и не опровергли.
Re[67]: Ну ты вообще многого не видишь... ;)
От: alexey_ma Израиль  
Дата: 09.06.09 06:41
Оценка: +2
Здравствуйте, Геннадий Васильев, Вы писали:

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


C>>>>Например, проскочила информация, что QString immutable...

ГВ>>>Для immutable у неё слишком много методов append/insert/replace. Так что, пускай информация скачет дальше.
C>>А чем эти методы мешают immutable природе QString? Дотнетовский String тоже имеет эти методы. Не знали?

ГВ>Дотнетовский, например, String.insert возвращает string. А QT-шный QString::insert возвращает QString&. Разница понятна?

Хочу уточнить насчет immutable QString. Дословно было так :
здесь
Автор: alexey_ma
Дата: 02.06.09
. QString — он несоммненно СOW.

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.

хurl=http://doc.trolltech.com/4.5/qstring.html]здесь[/url]

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.

здесь
ИМХО СOW != immutable
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.