|
|
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael Longneck Код: pascal 1. 2. Компилируется в XE7. Зато совершенно точно не компилируется в XE2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:06 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
...и даже в XE6 оно не компилируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:09 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Ну я же говорил что в XE7 динамические массивы доработали Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:12 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
a RawByteString тоже ведь выпилен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:13 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
последний end. потому как локальные переменные не инициализирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:13 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckНу я же говорил что в XE7 динамические массивы доработали Еще 2-3+ версий дельфи и TBytes будет похож по функционалу на жалкое подобие RawByteString. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:13 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
fd00cha RawByteString тоже ведь выпилен? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:14 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Я тут сейчас такую жопу нарыл... Решил посмотреть как происходит присваивание константного массива переменной. Оказалось, в момент присваивания делается его полная копия, это для ссылочного-то типа. Ладно, подумал я, COW там нет, поэтому просто не стали заморачиваться и сделали тупо. Решил проверить строки. И жопа обнаружилась именно тут - теперь (проверял на XE7) они тоже делают копию строки, а не просто копируют ссылку. На XE2 копировалась только ссылка, с какой версии это млядство с полным копированием началось выяснять лень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:19 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
А пример? Что-то я такого не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:22 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckНу я же говорил что в XE7 динамические массивы доработали XE7 это теперь означает "всегда"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:22 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckА пример? Что-то я такого не вижу. Какой пример? Объявляешь константы, затем переменным присваиваешь значение этих констант. Ставишь бряк на присваивание и трейсишь до CopyDynArray (или что-то вроде того) или _NewUnicodeString. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:24 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyРешил проверить строки. И жопа обнаружилась именно тут - теперь (проверял на XE7) они тоже делают копию строки, а не просто копируют ссылку. На XE2 копировалась только ссылка, с какой версии это млядство с полным копированием началось выяснять лень.Это они походу в рамках подготовки к immutable strings родили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:25 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Не вижу. Счётчик щёлкает и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:26 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael LongneckНе вижу. Счётчик щёлкает и всё. Трейси присваивание переменной значения константы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:30 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
_UStrLAsg вот этот вызов и всё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:32 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Michael Longneck_UStrLAsg вот этот вызов и всё Его и нужно трейсить. Но уже не нужно. Посыпаю голову пеплом. Оказалось, что копирование делается только для глобальных переменных, локальные инициализируются всё так-же - счетчиком. Написал маленький тест демонстрирующий это: Тестик на скорую руку Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Проверять при закоментированной и раскоментированной локальной переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:42 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
...а массивы в любом случае копирует полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:45 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
а давайте для примера вернемся во времена появления Delphi 2009 с юникодными строками. PChar теперь другой. string другой. string[0] - ересь. Срочно пишем тикеты в QC на тему возврата старого поведения? Кому-то неохота переписывать компоненты? Чем кончилось-то? Аааа... появился какой-то AnsiString, против которого началась борьба. А потом AnsiString где-то исчез, и за него опять начинается борьба. Не было ведь всей этой мутотени в Delphi 2007. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:55 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyОказалось, что копирование делается только для глобальных переменных, локальные инициализируются всё так-же - счетчиком Оказалось, что полные копии строковых констант делаются не только для глобальных переменных, но и для полей объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 23:59 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdv, Перевод в 2009 string на юникод был болезненнен но оправдан, ибо надо было перевести на него UI. Однако для тех кому надо оставили полнофункциональные AnsiString и RawByteString. Где они равноценная им замена в NextGen-е? Ну и Zero Based Strings - зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:04 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvstring[0] - ересь. Я тебе освежу память - string[0] стал ересью с приходом ansistring. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:05 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyЯ тебе освежу память - string[0] стал ересью с приходом ansistring. до выхода 2009 на ansistring большинство клало болт. А я еще процитирую gunsmoker: http://www.gunsmoker.ru/2013/05/modern-delphi.html Если вы посмотрите на этот список, то заметите следующую вещь: всюду в вашей программе вы оперируете со строками типа string. Все прочие типы строк нужны вам исключительно для совместимости со сторонним кодом: вашим же старым кодом (AnsiString или Pascal-строки), ОС (нуль-терминированные или BSTR) и т.п. Такой зоопарк не только вызывает путаницу (вопросы вида "в чём разница между WideString и UnicodeString?"), но и весьма сложен для переноса на другие платформы (чему равен WideString на iOS?). Поэтому идея заключается в том, чтобы оставить один тип строк - самый удобный и универсальный. Гораздо лучше использовать не строковые типы (записи/классы) для коммуникации с внешним миром - так их семантика будет понятнее. А перегрузка операторов сделает безболезненным операции присваивания. Именно поэтому на новых LLVM компиляторах iOS есть только тип string. Все прочие типы строк там не объявлены и при попытке ими воспользоваться сгенерируют вам ошибку вида "Undeclared identificator AnsiString". Новый тип string в целом равен UnicodeString (т.е. хранит данные строки в UTF-16, имеет счётчик ссылок и длины, а также поле кодовой страницы, которое перманентно равно CP_UTF16 = 1200 ($4B0), и поле размера символа, которое перманентно равно 2 байтам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:29 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
kdvдо выхода 2009 на ansistring большинство клало болт. Дима, до выхода D2009 ansistring был эквивалентом string. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:44 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
...и если уж совсем позанудствовать, то появились они в Delphi 2, кажется. И именно тогда шортстринговый string[0] стал ересью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 00:46 |
|
||
|
NextGen compiler и AnsiString
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyДима, до выхода D2009 ansistring был эквивалентом string. эта фраза не стыкуется с "Я тебе освежу память - string[0] стал ересью с приходом ansistring" то есть, начиная с Delphi 2 никто не использовал string[0] ? Откуда тогда в документах по переходу на версию 2009 этот самый string[0] упоминается как однозначный источник проблем переноса кода с предыдущих Delphi, вплоть до 2007? я бы предложил не буквоедствовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2015, 01:08 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38948007&tid=2041097]: |
0ms |
get settings: |
4ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
158ms |
get topic data: |
8ms |
get forum data: |
7ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 486ms |

| 0 / 0 |
