Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 374 375 [376] 377 378 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5626
,
|
|
|
|
|
Сообщ.
#5627
,
|
|
|
|
Цитата DesweR @ Писал же. Смотри. ![]() ![]() var s1, s2: TOneOfHugeSetDelfiString; begin s1 := 'aaaaBBBB'; s2 := 'AAAAbbbb'; if Comparer.Compare(s1, s2) then writeln('Хочу видеть это сообщение!'); end; У вас нет оператора проверки на равенство? И потом, мы же просили тип строк, экземпляры которого были бы нечувствительны к регистру. Если хочешь аналога в рантайме, то как минимум класс строк должен был принимать компоратор в конструкторе(или иметь соответствующее свойство). Вот ты говоришь, что у вас строк много разных. А вот у нас в стандарте один шаблон, который настраивается типом символов, набором характеристик символов и аллокатором. Четкое разделение описаний, прозрачна настройка. И никакой копипасты в реализации строк. На выходе же имеем полноценные типы и все преимущества статической типизации. А если нужна динамика - делаем как и вы. |
|
Сообщ.
#5628
,
|
|
|
|
Цитата D_KEY @ Вот ты говоришь, что у вас строк много разных. А вот у нас в стандарте один шаблон, который настраивается типом символов, набором характеристик символов и аллокатором. Четкое разделение описаний, прозрачна настройка. И никакой копипасты в реализации строк. На выходе же имеем полноценные типы и все преимущества статической типизации. А если нужна динамика - делаем как и вы. Дадада. Тип символов и т.д. Только что-то все время встречается в реальных исходниках смесь. Строк немного в Delphi на самом деле. Как и сказали, обычно просто string. Хочется свое - нет проблем. И для этого, кстати, не надо делать компарер, достаточно записи с перекрытием операторов. Вот только мне кажется, что делать регистронезависимое сравнение строк в компилетайме бессмысленно. |
|
Сообщ.
#5629
,
|
|
|
|
Цитата Romkin @ Дадада. Тип символов и т.д. Только что-то все время встречается в реальных исходниках смесь. Это еще наследие с достандартных времен, как правило. Цитата Хочется свое - нет проблем. И для этого, кстати, не надо делать компарер, достаточно записи с перекрытием операторов. Так в том-то и дело, что нужно переделать/переопределять реализацию. Здесь же фактически все декларативно Цитата Вот только мне кажется, что делать регистронезависимое сравнение строк в компилетайме бессмысленно. Само сравнение происходит в рантайме, а вот конструирование типа - в статике. |
|
Сообщ.
#5630
,
|
|
|
|
Цитата D_KEY @ Это еще наследие с достандартных времен, как правило. У нас тоже наследие есть, shortstring. И как ни странно, применяется. А кроме него есть string и widestring, и все. Не считая алиасов. Собственно, и WideString можно было вывести из языка и оформить в библиотеке, но никому это особо не нужно. Цитата D_KEY @ Само сравнение происходит в рантайме, а вот конструирование типа - в статике. Запись сделать - вот тебе и статика. Цитата D_KEY @ Так в том-то и дело, что нужно переделать/переопределять реализацию. Здесь же фактически все декларативно Разницы особой не вижу. Потому что не надо было вообще, имеющихся строк достаточно. Собственно, и если надо - тоже разницы нет. В Delphi, пожалуй, лучшая реализация строк: быстро и есть все что нужно. |
|
Сообщ.
#5631
,
|
|
|
|
Цитата Romkin @ А кроме него есть string и widestring, и все. А как они реализованы? В C++ std::string и std::wstring - и есть инстансы вышеупомянутого шаблона строк. В новом стандарте к ним добавились еще и строки для utf16 и utf32, точно так же, через задания характеристик. Описываешь характеристики и получаешь нужный тип(ведь все уже реализовано в шаблоне std::basic_string). Что тебе не нравится? Цитата Собственно, и если надо - тоже разницы нет. Нет разницы с чем? Все, что вы показываете, можно сделать и у нас. А вот обратное не верно Цитата В Delphi, пожалуй, лучшая реализация строк: быстро и есть все что нужно. Они умеют работать с utf32? |
|
Сообщ.
#5632
,
|
|
|
|
Цитата D_KEY @ Они умеют работать с utf32? Нет. Вообще - перемудрили эмбаркадеровцы со строками. ![]() ![]() const CP_UTF8 = 65001; CP_UTF32 = 65005; type UTF8String = type AnsiString(CP_UTF8); UTF32String = type AnsiString(CP_UTF32); var Str8: UTF8String; Str32: UTF32String; UStr: UnicodeString; AStr: AnsiString; begin AStr := '1234567890ф'; //11 символов UStr := '1234567890ф'; //11 символов Str8 := '1234567890ф'; //11 символов Str32 := '1234567890ф'; //11 символов Assert(Length(AStr) = 11); // кол-во символов и байт. для 1байтовой строки - это одно и тоже Assert(Length(UStr) = 11); // кол-во символов Assert(Length(Str8) = 12); // ВНЕЗАПНО кол-во байт Assert(Length(Str32) = 0); // ЕЩЕ БОЛЕЕ ВНЕЗАПНО end; |
|
Сообщ.
#5633
,
|
|
|
|
Цитата D_KEY @ А как они реализованы? В C++ std::string и std::wstring - и есть инстансы вышеупомянутого шаблона строк. В новом стандарте к ним добавились еще и строки для utf16 и utf32, точно так же, через задания характеристик. Описываешь характеристики и получаешь нужный тип(ведь все уже реализовано в шаблоне std::basic_string). Что тебе не нравится? Встроены в язык. Опять же - не вижу разницы. Строка это базовый тип, и предоставлять шаблон для нее странно. Если хочется своего, то ничто не мешает сделать тот же шаблон или структуру. Цитата D_KEY @ Они умеют работать с utf32? Да. Цитата In a Unicode character set, each character is represented by one or more bytes. Unicode has several Unicode Transformation Formats that use different but equivalent character encodings that can be easily transformed into each other. In UTF-8, for instance, characters may be one to 4 bytes. In UTF-8, the first 128 Unicode characters map to the US-ASCII characters. UTF-16 is another commonly used Unicode encoding in which characters are either 2 bytes or 4 bytes. The majority of the world's characters are in the Basic Multilingual Plane and can be represented in 2 bytes. The remaining characters require two 2 byte characters known as surrogate pairs. UTF-32 represents each character with 4 bytes. The Win32 platform supports single-byte and multibyte character sets as well as Unicode. The Windows operating system supports UTF-16. See the Unicode Standard for more information. The UnicodeString type has exactly the same structure as the AnsiString type. UnicodeString data is encoded in UTF-16. Since UnicodeString and AnsiString have the same structure, they function very similarly. When a UnicodeString variable is empty, it uses no additional memory. When it is not empty, it points to a dynamically allocated block of memory that contains the string value, and the memory handling for this is transparent to the user. UnicodeString variables are reference counted, and two or more of them can reference the same value without consuming additional memory. Цитата D_KEY @ Нет разницы с чем? Все, что вы показываете, можно сделать и у нас. А вот обратное не верно Надо ли делать "обратно", вот в чем вопрос. Можно сделать целочисленную арифметику, например, с обратным кодом, но надо ли? Добавлено Цитата jack128 @ Нет. Вообще - перемудрили эмбаркадеровцы со строками. Хм... Это для меня новость |
|
Сообщ.
#5634
,
|
|
|
|
Цитата Romkin @ Цитата (D_KEY @ Сегодня, 11:14) Они умеют работать с utf32? Да. а где тут про дельфийские строки?? Каким конкретно типом в дельфи можно представить UTF32 строку?? |
|
Сообщ.
#5635
,
|
|
|
|
Цитата D_KEY @ Описываешь характеристики и получаешь нужный тип(ведь все уже реализовано в шаблоне std::basic_string). Что тебе не нравится? Ага, все всем нравится, но как ни новая библа, обязательно MegaCoolString свой да присутствует... К чему бы это? |
|
Сообщ.
#5636
,
|
|
|
|
Цитата Romkin @ Строка это базовый тип Да ну. В идеале строки - это "список" символов. И в С++ это так и есть - порожденный шаблоном basic_string тип работает с массивами символов и их(символов) характеристиками. Добавлено Цитата KILLER @ Ага, все всем нравится, но как ни новая библа Покажи новую любу со своими строками. Разве что для utf-8 или другой мультибайтовой кодировки, ибо для работы с символами переменной длины basic_string будет не эффективен. |
|
Сообщ.
#5637
,
|
|
|
|
Цитата D_KEY @ Покажи новую любу со своими строками. Разве что для utf-8 или другой мультибайтовой кодировки, ибо для работы с символами переменной длины basic_string будет не эффективен. Да это собственно не только новых касалось либ, а вообще практически всех более менее масштабных проектов. Оглядись вокруг, везде свои стринги CString/QString/AnsiString/BSTRString.... И это при наличии незаменимо удобного, стандартного std::string ... Добавлено Я уж молчу про то, если необходимо работать с винапишными функциями, то вообще std::string летит в топку, ибо от него толку там, как от козла молока... |
|
Сообщ.
#5638
,
|
|
|
|
Цитата KILLER @ Оглядись вокруг, везде свои стринги CString/QString/AnsiString/BSTRString.... Все эти стринги появились до активного использования стандартных строк. |
|
Сообщ.
#5639
,
|
|
|
|
Цитата jack128 @ а где тут про дельфийские строки?? Каким конкретно типом в дельфи можно представить UTF32 строку?? UnicodeString должна глотать. С нужной страницей и размером элемента. Явно же не ansistring, издеваешься. И что-то мне подсказывает, что надо проверить на XE/XE2. |
|
Сообщ.
#5640
,
|
|
|
|
Цитата D_KEY @ Все эти стринги появились до активного использования стандартных строк. До этого о них не знали? Или их в стандарте небыло? |