powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / NextGen compiler и AnsiString
25 сообщений из 118, страница 3 из 5
NextGen compiler и AnsiString
    #38947967
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck
Код: pascal
1.
2.
const
  Test: TBytes = [0,45,45, 245];



Компилируется в XE7.
Зато совершенно точно не компилируется в XE2.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947973
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...и даже в XE6 оно не компилируется.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947976
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я же говорил что в XE7 динамические массивы доработали

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var
  A: array of integer;
  B: TBytes = [1,2,3,4]; //Initialization can be done from declaration
begin
  ...
  A:=[1,2,3]; // assignation using constant array
  A:=A+[4,5]; // addition - A will become [1,2,3,4,5]

  A := Concat([1,2,3],[4,5,6]); //A will become [1,2,3,4,5,6]
 
  A:=[1,2,3,4];
  Insert(5,A,2); // A will become [1,2,5,3,4]

end;
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947978
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a RawByteString тоже ведь выпилен?
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947979
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
последний end. потому как локальные переменные не инициализирует.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947980
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael LongneckНу я же говорил что в XE7 динамические массивы доработали
Еще 2-3+ версий дельфи и TBytes будет похож по функционалу на жалкое подобие RawByteString.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947981
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00cha RawByteString тоже ведь выпилен?
Да.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947984
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут сейчас такую жопу нарыл... Решил посмотреть как происходит присваивание константного массива переменной. Оказалось, в момент присваивания делается его полная копия, это для ссылочного-то типа. Ладно, подумал я, COW там нет, поэтому просто не стали заморачиваться и сделали тупо. Решил проверить строки. И жопа обнаружилась именно тут - теперь (проверял на XE7) они тоже делают копию строки, а не просто копируют ссылку. На XE2 копировалась только ссылка, с какой версии это млядство с полным копированием началось выяснять лень.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947986
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пример? Что-то я такого не вижу.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947987
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael LongneckНу я же говорил что в XE7 динамические массивы доработали
XE7 это теперь означает "всегда"?
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947989
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael LongneckА пример? Что-то я такого не вижу.
Какой пример? Объявляешь константы, затем переменным присваиваешь значение этих констант. Ставишь бряк на присваивание и трейсишь до CopyDynArray (или что-то вроде того) или _NewUnicodeString.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947991
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyРешил проверить строки. И жопа обнаружилась именно тут - теперь (проверял на XE7) они тоже делают копию строки, а не просто копируют ссылку. На XE2 копировалась только ссылка, с какой версии это млядство с полным копированием началось выяснять лень.Это они походу в рамках подготовки к immutable strings родили.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947993
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
const
  sTest = 'Test';

procedure TForm17.FormCreate(Sender: TObject);
var
  s: String;
begin
  s := sTest;
  Caption := s;

...



Не вижу. Счётчик щёлкает и всё.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947996
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael LongneckНе вижу. Счётчик щёлкает и всё.
Трейси присваивание переменной значения константы.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38947997
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_UStrLAsg вот этот вызов и всё
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948001
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

var
 s:string;

procedure test;
const
 ss = '111111111111111111111111111111111111111111111111111111111111111111111111';
var
// s:string;
 ta : NativeUInt;
begin
 ta := getHeapStatus.TotalAllocated;
 s := ss;
 Writeln(getHeapStatus.TotalAllocated - ta);
end;
begin
 test;
 readln;
end.


Проверять при закоментированной и раскоментированной локальной переменной.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948002
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...а массивы в любом случае копирует полностью.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948007
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а давайте для примера вернемся во времена появления Delphi 2009 с юникодными строками.
PChar теперь другой. string другой. string[0] - ересь. Срочно пишем тикеты в QC на тему возврата старого поведения? Кому-то неохота переписывать компоненты?
Чем кончилось-то? Аааа... появился какой-то AnsiString, против которого началась борьба. А потом AnsiString где-то исчез, и за него опять начинается борьба. Не было ведь всей этой мутотени в Delphi 2007.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948009
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyОказалось, что копирование делается только для глобальных переменных, локальные инициализируются всё так-же - счетчиком
Оказалось, что полные копии строковых констант делаются не только для глобальных переменных, но и для полей объектов.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948010
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Перевод в 2009 string на юникод был болезненнен но оправдан, ибо надо было перевести на него UI.
Однако для тех кому надо оставили полнофункциональные AnsiString и RawByteString.

Где они равноценная им замена в NextGen-е?
Ну и Zero Based Strings - зачем?
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948011
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvstring[0] - ересь.
Я тебе освежу память - string[0] стал ересью с приходом ansistring.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948018
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 байтам).
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948020
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvдо выхода 2009 на ansistring большинство клало болт.
Дима, до выхода D2009 ansistring был эквивалентом string.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948021
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...и если уж совсем позанудствовать, то появились они в Delphi 2, кажется. И именно тогда шортстринговый string[0] стал ересью.
...
Рейтинг: 0 / 0
NextGen compiler и AnsiString
    #38948022
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyДима, до выхода D2009 ansistring был эквивалентом string.
эта фраза не стыкуется с
"Я тебе освежу память - string[0] стал ересью с приходом ansistring"

то есть, начиная с Delphi 2 никто не использовал string[0] ? Откуда тогда в документах по переходу на версию 2009 этот самый string[0] упоминается как однозначный источник проблем переноса кода с предыдущих Delphi, вплоть до 2007?
я бы предложил не буквоедствовать.
...
Рейтинг: 0 / 0
25 сообщений из 118, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / NextGen compiler и AnsiString
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]