UCSD Pascal


Во второй половине 1970-х годов в Университете Сан-Диего (Калифорния, США) была разработана система UCSD p-System, которая включала в себя компилятор с языка Паскаль в переносимый p-код (сама идея компиляции в p-код была заимствована из более ранней системы Pascal-P). Первой получившей распространение за пределами университета версией была версия I.3, выпущенная в августе 1977 года[1].

В UCSD Pascal было впервые для языка Паскаль реализовано несколько важных расширений, таких как модули, являющиеся единицами компиляции, а также строки символов переменной длины. Кроме того, поддерживались распространённые к тому времени расширения стандарта языка Паскаль, такие как директивы трансляции в псевдокомментариях, указание фактического имени файла при его открытии, обработка ошибок ввода-вывода, необязательность перечисления файлов в заголовке программы и т. п. Впоследствии основные коммерческие реализации языка Паскаль основывались на этой модификации Паскаля, прежде всего Object Pascal фирмы Apple и Turbo Pascal фирмы Borland.

Максимальная длина строки символов в UCSD Pascal, как и в более поздних диалектах 1980-х годов, составляла 255 символов, но по умолчанию в UCSD Pascal использовалась длина 80 символов.

Избыточно ресурсоёмкое на тогдашних аппаратных средствах управление памятью в куче при помощи процедур new и dispose в UCSD Pascal было заменено на более эффективное, но менее удобное и провоцирующее ошибки стековое управление динамической памятью (процедура dispose была пустой, текущий указатель стека динамических переменных запоминался при помощи процедуры mark и восстанавливался при помощи процедуры release, освобождая всю память, выделенную после соответствующего вызова mark).

Аналогично строковому типу string [n], поддерживался двоично-десятичный тип данных integer [n] с заданным количеством десятичных цифр.

Интересной особенностью диалекта UCSD Pascal был действовавший по умолчанию запрет на использование оператора goto (если не был указан специальный режим трансляции {$G+}, то оператор goto считался ошибкой).