Ответ 1
Строки Паскаля стали популярными благодаря одной конкретной, но огромной влиятельной реализации Pascal, названной UCSD. Таким образом, строки UCSD - лучший термин. Это та же самая реализация, которая сделала популярные интерпретаторы байт-кода.
В общем, это не один конкретный тип, а основной принцип наличия размера, предваряемого символьными данными. Это позволяет получить длину постоянной операции (O (1)) вместо сканирования символьных данных для нулевого символа.
Не все Паскали использовали эту концепцию. IIRC, оригинальная (семидесятая) конвенция заключалась в том, чтобы космос заполнить выделение и отсканировать назад для символа без пробела (что делает невозможным прерывание строк). Более того, поскольку программное обеспечение в основном использовалось изолированно, использовались всевозможные схемы, часто основанные на том, что было выгодно для этой реализации/архитектуры.
Самые популярные диалекты из Borland (Turbo Pascal, Delphi и Free Pascal) обычно основываются на диалекте UCSD и, следовательно, имеют паскальные строки, Delphi в настоящее время имеет 5 таких строк. (short/ansi/wide/unicode/open)
С другой стороны, это означает, что в цикле вам нужна дополнительная проверка на основе индексов для проверки конца строки.
Итак, вместо этого, скопировав строку, используя
while (p^) do begin P^=p2^; inc(p) inc(p2); end;
что полностью эквивалентно
while (*s++ = *t++);
в C при использовании оптимизирующего компилятора.
вам нужно сделать, например.
while (len>0) do begin p^:=p2^; inc(p) inc(p2); dec(len); end;
или даже
i:=1;
while (i<=len) do begin p[i]:=p2[i]; inc(i); end;
Это привело к тому, что количество команд в цепочке строк Pascal немного больше, чем эквивалентная строка с нулевым завершением, и добавляет еще одно значение в реальном времени. Кроме того, UCSD был языком интерпретатора байт-кода (p-code), а последний код, основанный на использовании строки pascal, является "безопасным".
В случае архитектуры, которая построила операторы post increment (++) (например, PDP-8,11 C была разработана для первоначально), версия указателя была еще дешевле, особенно без оптимизации. В настоящее время оптимизация компиляторов может легко обнаружить любую из этих конструкций и преобразовать их в лучшее.
Более важно то, что с начала 90-х годов безопасность стала более важной и, в основном, исключительно полагаясь на свойство null terminated strings, неодобрилась, поскольку небольшие ошибки в проверке могут вызвать потенциально возможные проблемы с переполнением буфера. C и его стандарты, таким образом, не одобряли использование старой строки, а теперь используют версии "-n-" старых строковых подпрограмм (strNcpy и т.д.), Которым требуется максимальная длина. Это добавляет одно и то же дополнительное значение в реальном времени, подобное длине, например, как управляемый вручную принцип паскальских строк, где программист должен позаботиться о передаче длины (или максимального размера буфера для функций C -N). Строки Паскаля по-прежнему имеют преимущество перехода к последнему занятому char в операции O (1) и тому факту, что нет запрещенных символов.
Строки с префиксом длины также широко используются в формате файла, потому что, очевидно, полезно количество байтов для чтения вперед.