kuj>>>Ну и что ты пытаешься доказать? Что mutable строки Delphi быстрее выполняют конкатенацию, чем immutable строки дотнет? Это как бэ by design фича. Поэтому строки в дотнет разделены по функциям на неизменяемый класс String и вспомогательный класс StringBuilder для быстрой конкатенации. Говоря иначе, везде, где требуется выполнять большое количество модификаций в строке используется StringBuilder, и скорости он дает такую, что С++ и Delphi скромно курят в сторонке — особенно на replace`ах. ;]
WF>>С какой радости? Тот же массив чаров (в одном, правда, это символы, в другом байты, но не суть важно), что в .NET StringBuilder, что в C++ std::string. Алгоритмическая сложность replace будет та же самая.
H>У StringBuilder'а двукратный оверхед по памяти, какой же там массив чаров?
Нет там двухкратного оверхеда, кроме редчайших случаев: типа буфер заполнен на 100% и нужно добавить всего один символ. RTFM.
Re[37]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, hattab, Вы писали:
Y>>>При этом проводя в ToArray() больше времени, чем в Concat()
Y>>Дабы избежать возможных дебатов по выделенному, перепишу: Y>>
Y>>var timer = new Stopwatch();
Y>> timer.Start();
Y>> var source = new string[100000];
Y>> for (int i = 0; i < 100000; i++)
Y>> {
Y>> source[i] = "c1";
Y>> }
Y>> var s = string.Concat(source);
Y>> timer.Stop();
Y>> Console.WriteLine("result: elapsed {0} ({1})", timer.ElapsedMilliseconds, s.Length);
Y>>
Y>>result: elapsed 2 (200000)
H> И сколько тут операци конкатенации?
Догадайся. Если сможешь. ;] Если не сможешь, rtfm исходник string.Concat. ;]
Re[36]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, WFrag, Вы писали:
kuj>>Ну и что ты пытаешься доказать? Что mutable строки Delphi быстрее выполняют конкатенацию, чем immutable строки дотнет? Это как бэ by design фича. Поэтому строки в дотнет разделены по функциям на неизменяемый класс String и вспомогательный класс StringBuilder для быстрой конкатенации. Говоря иначе, везде, где требуется выполнять большое количество модификаций в строке используется StringBuilder, и скорости он дает такую, что С++ и Delphi скромно курят в сторонке — особенно на replace`ах. ;]
WF>С какой радости? Тот же массив чаров (в одном, правда, это символы, в другом байты, но не суть важно), что в .NET StringBuilder, что в C++ std::string. Алгоритмическая сложность replace будет та же самая.
По факту.
Re[36]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, WFrag, Вы писали:
kuj>>Ну и что ты пытаешься доказать? Что mutable строки Delphi быстрее выполняют конкатенацию, чем immutable строки дотнет? Это как бэ by design фича. Поэтому строки в дотнет разделены по функциям на неизменяемый класс String и вспомогательный класс StringBuilder для быстрой конкатенации. Говоря иначе, везде, где требуется выполнять большое количество модификаций в строке используется StringBuilder, и скорости он дает такую, что С++ и Delphi скромно курят в сторонке — особенно на replace`ах. ;]
WF>С какой радости? Тот же массив чаров (в одном, правда, это символы, в другом байты, но не суть важно), что в .NET StringBuilder, что в C++ std::string. Алгоритмическая сложность replace будет та же самая.
В std::string отсутствует полнотекстовый поиск-замена. Если же в цикле делать find/replace`ы, то работать будет на порядки дольше StringBuilder.Replace (StringBuilder 4 сек, std::string ждал 5 минут(!!!) не дождался, отключил).
В Delphi ситуация не лучше, как г-н хаттаб сам недавно подтвердил.
Re[36]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, hattab, Вы писали:
H>Как раз таки наоборот. criosray сравнил сишную std:string с .NET'овским StringBuilder'ом.
Вы хоть поняли зачем я это делал? Это было сравнение для того, чтоб расставить точки над и в споре о целесообразности решения сделать строки immutable. Я показал, что имя все плюсы неизменяемых строк, мы так же имеем возможность очень быстро формировать и модифицировать строки с помощью вспомогательного класса StringBuilder.
По большому счету это был ответ на "выпад" г-на Егора в сообщении к Синклеру, где он утверждал, что mutable строки С++ более универсальны и быстры (примерно так, точной фразы не помню, но суть такая была)...
H>Я по аналогии сделал сравнение со строками Delphi, но это был вовсе не идентичный алгоритм.
Идентичный. Просто реализация разнится в силу разности языков и платформ.
H>В выделеном, я как раз и говорю, что даже при использовании спец.класса ориентированного на перформанс, обычные строки Delphi при конкатенации ему ничуть не уступают. А далее говорю, что если сделать алгоритм идентичным...
А как же чей-то контрпример давече, где в цикле вызываются конструкторы объекта и предлагается сравнить использование памяти?.. Он идентичный? Получается (по Вашей логике), что идентичный... Хотя в действительности идентична там реализация, но при этом реализация на Делфи некорректна в виду отсутствия явных вызовов деструкторов, что приведет к утечке памяти....
Re[37]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, kuj, Вы писали:
H>>>>Строки Delphi и строки .NET. Не классы со сложным внутренним представлением строки, а именно, непосредствено, строки.
kuj>>>Ну и что ты пытаешься доказать?
H>>Еще раз, для тебя, умника: я ничего не сравнивал. Научись уже читать и улавливать смысл.
kuj>Я ржал. Теперь он уже ничего не сравнивал. Написал фигню, ткнули носом в фигню, а теперь вместо того, чтоб скромно в сторонке обтекать да обсыхать, пытаешься съехать с темы.
Покойся с миром.
Re[37]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, gandjustas, Вы писали:
H>>Это и есть идентичный алгоритм, а ни какая не самодеятельность. Строки со строками, вполне естественно. G>Это не идентичный алгоритм. Так как ты сравниваешь мутабельные строки с иммутабельными.
Platform SDK: This class represents a string-like object whose value is a mutable sequence of characters. Вопросы?
H>>Как раз таки наоборот. criosray сравнил сишную std:string с .NET'овским StringBuilder'ом. Я по аналогии сделал сравнение со строками Delphi, но это был вовсе не идентичный алгоритм. В выделеном, я как раз и говорю, что даже при использовании спец.класса ориентированного на перформанс, обычные строки Delphi при конкатенации ему ничуть не уступают. А далее говорю, что если сделать алгоритм идентичным... G> G>Не сливай так откровенно. G>Идентичный алгоритм — тот который использует объекты с одинаковым предназначением, а не с одинаковым названием.
Одна функция копирует память по одному байту, другая по 4. Обе копируют память. Следуя твоей логике их алгоритмы идентичны, а это не так.
Re[38]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, WFrag, Вы писали:
H>>У StringBuilder'а двукратный оверхед по памяти, какой же там массив чаров?
WF>В огороде бузина, а в Киеве дядька?
WF>У std::string длина строки и capacity тоже могут не совпадать. Как там в Delphi — не в курсе.
Это слова criosray'я о полнотекстовом поиске занесли в мою душу сомнения (думал, мож там строка организуется более сложной структурой) Сейчас глянул ildasm'ом, магии не обнаружил
Re[38]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, yuriylsh, Вы писали:
Y>>>>При этом проводя в ToArray() больше времени, чем в Concat()
Y>>>Дабы избежать возможных дебатов по выделенному, перепишу:
H>> И сколько тут операци конкатенации?
Y>Ты читать умеешь? Я написал для чего я переписал код. Могу добавить выделение, так понятней?
А зачем ты вообще писал этот код? Идентичности ты не добавил, а меряться органами у меня цели не было
Re[37]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, criosray, Вы писали:
H>>Как раз таки наоборот. criosray сравнил сишную std:string с .NET'овским StringBuilder'ом. C>Вы хоть поняли зачем я это делал? Это было сравнение для того, чтоб расставить точки над и в споре о целесообразности решения сделать строки immutable. Я показал, что имя все плюсы неизменяемых строк, мы так же имеем возможность очень быстро формировать и модифицировать строки с помощью вспомогательного класса StringBuilder.
Причина твоего сравнения тут не важна. Я просто использовал его для иллюстрации утопичности стремления к идентичным алгоритмам.
C>По большому счету это был ответ на "выпад" г-на Егора в сообщении к Синклеру, где он утверждал, что mutable строки С++ более универсальны и быстры (примерно так, точной фразы не помню, но суть такая была)...
H>>Я по аналогии сделал сравнение со строками Delphi, но это был вовсе не идентичный алгоритм. C>Идентичный. Просто реализация разнится в силу разности языков и платформ.
Так я об этом пишу, уже почти в каждом посте...
H>>В выделеном, я как раз и говорю, что даже при использовании спец.класса ориентированного на перформанс, обычные строки Delphi при конкатенации ему ничуть не уступают. А далее говорю, что если сделать алгоритм идентичным... C>А как же чей-то контрпример давече, где в цикле вызываются конструкторы объекта и предлагается сравнить использование памяти?.. Он идентичный? Получается (по Вашей логике), что идентичный... Хотя в действительности идентична там реализация, но при этом реализация на Делфи некорректна в виду отсутствия явных вызовов деструкторов, что приведет к утечке памяти....
Требование убрать мусор, как раз таки увеличивает идентичность т.к. в случае с C# он таки убирается т.е. алгоритмическое действие, явно не прописанное, но существующее в силу организации платформы, выполняется. Неидентичным он был бы, еслиб я предложил заменить TMyObject.Create на TMyAdvRec.Create() (advanced record).
Re[38]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, hattab, Вы писали:
H>Здравствуйте, gandjustas, Вы писали:
H>>>Это и есть идентичный алгоритм, а ни какая не самодеятельность. Строки со строками, вполне естественно. G>>Это не идентичный алгоритм. Так как ты сравниваешь мутабельные строки с иммутабельными. H>Platform SDK: This class represents a string-like object whose value is a mutable sequence of characters. Вопросы?
is a mutable sequence of characters прочитал? В чем отличия семантические от дельфовой строки?
H>>>Как раз таки наоборот. criosray сравнил сишную std:string с .NET'овским StringBuilder'ом. Я по аналогии сделал сравнение со строками Delphi, но это был вовсе не идентичный алгоритм. В выделеном, я как раз и говорю, что даже при использовании спец.класса ориентированного на перформанс, обычные строки Delphi при конкатенации ему ничуть не уступают. А далее говорю, что если сделать алгоритм идентичным... G>> G>>Не сливай так откровенно. G>>Идентичный алгоритм — тот который использует объекты с одинаковым предназначением, а не с одинаковым названием.
H>Одна функция копирует память по одному байту, другая по 4. Обе копируют память. Следуя твоей логике их алгоритмы идентичны, а это не так.
Тут стоит говорить об эквивалентности
Re[38]: Коробочные продукты на .NET (НЕ для программистов/ад
H>Требование убрать мусор, как раз таки увеличивает идентичность т.к. в случае с C# он таки убирается т.е. алгоритмическое действие, явно не прописанное, но существующее в силу организации платформы, выполняется. Неидентичным он был бы, еслиб я предложил заменить TMyObject.Create на TMyAdvRec.Create() (advanced record).
Ну так допиши создание новой строки на делфи. Это ж тоже "алгоритмическое действие, явно не прописанное, но существующие в силу организации платформы". ;]
Re[22]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, criosray, Вы писали:
C>Я Вас правильно понял? Студия тормозит на процессоре, которому сто лет в обед (скороу уж десять лет с момента выпуска первых p4) — да как она смеет!
Да, 2008я студия тормозит там, где 2003я не тормозит. Причем с точки зрения редактирования С++ кода ничего нового с тех пор не добавилось. 2008я студия даже до уровня VAX не дотянулась.
Процу этом кстати сильно меньше 10 лет.
Хочешь проспонсировать апгрейд?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[23]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, hattab, Вы писали:
C>>Я Вас правильно понял? Студия тормозит на процессоре, которому сто лет в обед (скороу уж десять лет с момента выпуска первых p4) — да как она смеет!
H>А она, что, загружает проц на 100% при наборе текста
Нет, заметно лагает.
Такое ощущение что сидишь не за локальным компом а за удаленным через RDP
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[39]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, gandjustas, Вы писали:
H>>>>Это и есть идентичный алгоритм, а ни какая не самодеятельность. Строки со строками, вполне естественно. G>>>Это не идентичный алгоритм. Так как ты сравниваешь мутабельные строки с иммутабельными. H>>Platform SDK: This class represents a string-like object whose value is a mutable sequence of characters. Вопросы? G>is a mutable sequence of characters прочитал? В чем отличия семантические от дельфовой строки?
Прочитал. Array Of Char и кусок памяти кратный размеру Сhar'а тоже имеют семантическую схожесть. Вот только строками они не являются.
Re[40]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, hattab, Вы писали:
H>Здравствуйте, gandjustas, Вы писали:
H>>>>>Это и есть идентичный алгоритм, а ни какая не самодеятельность. Строки со строками, вполне естественно. G>>>>Это не идентичный алгоритм. Так как ты сравниваешь мутабельные строки с иммутабельными. H>>>Platform SDK: This class represents a string-like object whose value is a mutable sequence of characters. Вопросы? G>>is a mutable sequence of characters прочитал? В чем отличия семантические от дельфовой строки?
H>Прочитал. Array Of Char и кусок памяти кратный размеру Сhar'а тоже имеют семантическую схожесть. Вот только строками они не являются.
Не съезжай.
Re[41]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, gandjustas, Вы писали:
H>>>>>>Это и есть идентичный алгоритм, а ни какая не самодеятельность. Строки со строками, вполне естественно. G>>>>>Это не идентичный алгоритм. Так как ты сравниваешь мутабельные строки с иммутабельными. H>>>>Platform SDK: This class represents a string-like object whose value is a mutable sequence of characters. Вопросы? G>>>is a mutable sequence of characters прочитал? В чем отличия семантические от дельфовой строки?
H>>Прочитал. Array Of Char и кусок памяти кратный размеру Сhar'а тоже имеют семантическую схожесть. Вот только строками они не являются. G>Не съезжай.
Я и не съезжаю. Я показываю несостоятельность твоих аргументов.
Re[42]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, hattab, Вы писали:
H>Здравствуйте, gandjustas, Вы писали:
H>>>>>>>Это и есть идентичный алгоритм, а ни какая не самодеятельность. Строки со строками, вполне естественно. G>>>>>>Это не идентичный алгоритм. Так как ты сравниваешь мутабельные строки с иммутабельными. H>>>>>Platform SDK: This class represents a string-like object whose value is a mutable sequence of characters. Вопросы? G>>>>is a mutable sequence of characters прочитал? В чем отличия семантические от дельфовой строки?
H>>>Прочитал. Array Of Char и кусок памяти кратный размеру Сhar'а тоже имеют семантическую схожесть. Вот только строками они не являются. G>>Не съезжай.
H>Я и не съезжаю.
Съезжаешь, ты на вопрос не ответил.
H>Я показываю несостоятельность твоих аргументов.
Ты пытаешься доказать что StringBuilder не является строкой.
Лично ты можешь так считать, но правдой это не станет.
И не пытайся этот бред кому-либо доказывать.
Re[43]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, gandjustas, Вы писали:
H>>>>>>>>Это и есть идентичный алгоритм, а ни какая не самодеятельность. Строки со строками, вполне естественно. G>>>>>>>Это не идентичный алгоритм. Так как ты сравниваешь мутабельные строки с иммутабельными. H>>>>>>Platform SDK: This class represents a string-like object whose value is a mutable sequence of characters. Вопросы? G>>>>>is a mutable sequence of characters прочитал? В чем отличия семантические от дельфовой строки?
H>>>>Прочитал. Array Of Char и кусок памяти кратный размеру Сhar'а тоже имеют семантическую схожесть. Вот только строками они не являются. G>>>Не съезжай.
H>>Я и не съезжаю. G>Съезжаешь, ты на вопрос не ответил.
Ответил, ты перечитай.
H>>Я показываю несостоятельность твоих аргументов. G>Ты пытаешься доказать что StringBuilder не является строкой. G>Лично ты можешь так считать, но правдой это не станет. G>И не пытайся этот бред кому-либо доказывать.
Не только я так считаю, об этом даже в Platform SDK написано. "Похож на строку/как строка/(сравнение в общем)" не тождественно "является строкой".
Re[44]: Коробочные продукты на .NET (НЕ для программистов/ад
Здравствуйте, hattab, Вы писали:
H>>>Я показываю несостоятельность твоих аргументов. G>>Ты пытаешься доказать что StringBuilder не является строкой. G>>Лично ты можешь так считать, но правдой это не станет. G>>И не пытайся этот бред кому-либо доказывать. H>Не только я так считаю, об этом даже в Platform SDK написано. "Похож на строку/как строка/(сравнение в общем)" не тождественно "является строкой".
Да ты видимо еще и чушь какую-то читаешь.
В MSDN про StringBuilder написано: Represents a mutable string of characters.