Сравнение Паскаля и Дельфи

Язык программирования

Разработанный Никлаусом Виртом в конце 1960-х и начале 1970-х годов, Pascal является языком программирования . Первоначально разработанный Borland Software Corporation, Embarcadero Delphi состоит из IDE, набора стандартных библиотек и языка на основе Pascal, обычно называемого Object Pascal , Delphi Pascal или просто «Delphi» (текущая документация Embarcadero называет его «языком Delphi (Object Pascal)» [1] ). С момента первого выпуска он стал самой популярной коммерческой реализацией Pascal.

При разработке Pascal Вирт использовал процедуру самонастройки , при которой каждая новая версия компилятора Pascal писалась и компилировалась с предыдущей. Таким образом, компилятор 'P2' был написан на диалекте, компилируемом 'P1', 'P3' в свою очередь был написан на 'P2' и так далее, вплоть до 'P5'. Компилятор 'P5' реализовал Pascal в его окончательном состоянии, как определено Виртом, и впоследствии был стандартизирован как 'ISO 7185 Pascal'.

Диалект Borland, как и популярный UCSD Pascal до него, взял за основу версию языка 'P4', а не окончательную редакцию Вирта. После значительной эволюции, независимой от Standard Pascal, вариант Borland стал основой для Delphi. На этой странице рассматриваются различия между Delphi и Standard Pascal. Она не затрагивает специфичные для Delphi расширения языка, которые многочисленны и продолжают расти.

Эксклюзивные возможности

Следующие функции являются взаимоисключающими. Реализация Standard Pascal не принимается Delphi и наоборот, код Delphi не принимается в Standard Pascal.

Модуль с отрицательным делителем

В стандартном языке Pascal определение оператора похоже на евклидово, modтогда как в Delphi используется усеченное определение.

Вложенные комментарии

Стандартный Pascal требует, чтобы разделители комментариев {и биграмма , а также и были синонимами друг друга. [2] Однако в Delphi блочный комментарий, начинающийся с , должен быть закрыт с помощью . [3] Биграмма закроет только любой комментарий, начинающийся с . [3] Эта схема допускает вложенные комментарии за счет сложности компилятора.(*}*){ }*)(*

Процедурные типы данных

Способ передачи процедур и функций в качестве параметров различается: Delphi требует явного объявления процедурных типов, тогда как в стандартном Pascal этого не требуется. [4]

сравнение процедурных типов данных
Стандартный ПаскальДельфи
программа procedureDataType ( выход ) ; { `printYIntersect` имеет один процедурный параметр: } procedure printYIntersect ( function f ( x : real ) : real ) ; begin writeLn ( f ( 0.0 )) ; end ; { В стандартном Паскале нет процедурных «указателей». } function f ( x : real ) : real ; begin f := cos ( x ) ; end ; { ─── MAIN ────────────────────────────────────────────────── } begin printYIntersect ( f ) ; end .         
тип TFunc = функция ( x : вещественное ) : вещественное ; процедура printYIntersect ( f : TFunc ) ; начало writeLn ( f ( 0.0 ) ) ; конец ;      функция f ( x : вещественное ) : вещественное ; начало f := cos ( x ) ; конец ; // ─── ГЛАВНАЯ ────────────────────────────────────────────────────────── начало printYIntersect ( @ f ) ; конец .     

Преобразование символов новой строки

Различные компьютерные системы показывают широкий спектр способов обозначения новой строки . Это влияет на внутреннее представление textфайлов, которые состоят из серии «строк». Чтобы избавить программиста от любой связанной с этим головной боли, стандартный Паскаль предписывает, чтобы чтение «символа конца строки» возвращало один символ пробела. Чтобы отличить такой символ пробела «конца строки» от символа пробела, который на самом деле является подлинной полезной нагрузкой строки, EOLnстановится true.

Delphi не показывает такого поведения. Чтение новой строки вернет любую последовательность символов, представляющую новую строку в текущей хост-системе, например, два charзначения (возврат каретки) плюс (перевод строки). [3]chr(13)chr(10)

Дополнительные или отсутствующие функции

Следующие функции присутствуют или отсутствуют в обоих языках.

Глобальныйgoto

Стандартный Pascal допускает a gotoк любому labelопределенному в области видимости. В Delphi a gotoдолжен быть в пределах текущей процедуры, т. е. не может покидать -frame . [3]begin  end

program jumpAround ; label 999 ; procedure foo ; begin { Это не разрешено в Delphi: } goto 999 ; end ; begin foo ; 999 : ; end .    

Буферные переменные

Delphi не поддерживает буферные переменные и связанные с ними стандартные процедуры getи put. [3]

program copy ( input , output ) ; begin while not EOF ( input ) do begin { Копировать файловые буферы. Не поддерживается Delphi} output := input ; { Input↑ содержит пробел, если произошел переход на новую строку. } if EOLn ( input ) then begin writeLn ( output ) ; end else begin put ( output ) ; end ; { Переместить курсор чтения. } get ( input ) ; end ; end .         

Распределение записей дискриминированных вариантов

В стандартном Паскале выделение памяти для варианта recordможет указывать на конкретный вариант. Это позволяет реализациям выделять наименьшее количество действительно необходимой памяти. Delphi не поддерживает это. [3]

program variationRecord ; type sex = ( female , male ) ; clothesMeasures = record girth : real ; case gender : sex of female : ( underbust : real ) ; male : ( ) ; end ; var size : clothesMeasures ; begin { NB: Для `underbust` не выделено место. } new ( size , male ) ; end .                

Временные файлы

В Delphi любой файл должен быть подкреплен файлом в файловой системе. Это означает, что любой fileфайл должен быть связан с именем файла с assignпроцедурой Delphi. Напротив, Standard Pascal можно использовать без имен файлов. Следующий код вызовет ошибку времени выполнения в Delphi. [3]

program temporaryFile ( output ) ; var FD : text ; begin rewrite ( FD ) ; writeLn ( FD , 'Привет, мир!' ) ; end .   

Упаковка

Delphi не реализует стандартные процедуры packи unpack. [3] Несмотря на это, передача данных между упакованными и распакованными типами данных — простая задача, хотя реализация может быть не столь эффективной, как реализация, предоставленная поставщиком компилятора.

Отсутствует writeширина по умолчанию

Delphi не связывает тип данных Booleanс шириной по умолчанию, если он указан как write/ writeLnпараметры. [3] Delphi демонстрирует поведение, как обычно, для символьных строк.

Перегрузка

Delphi допускает перегрузку процедур. В стандартном Pascal идентификаторы должны быть уникальными в каждом блоке.

функция f ( x : целое число ) : вещественное число ; начало результат := sin ( x ) ; конец ;     function f ( x : real ) : real ; begin result := cos ( x ) ; end ; // ─── MAIN ──────────────────────────────────────────────────────── begin // Обратите внимание на различные типы данных. writeLn ( f ( 3 )) ; writeLn ( f ( 3.0 )) ; end .     

Значения параметров по умолчанию

Delphi допускает параметры по умолчанию .

Особенности реализации

Стандартная writeширина

В Pascal, если файл назначения является файлом text, параметры в write/ writeLnимеют общую ширину по умолчанию, определяемую реализацией. В Delphi для integerзначений это просто 1. Это означает, что всегда занято наименьшее количество места. [3] Другие компиляторы показали ширину по умолчанию, например, 20позволяя получить прекрасный табличный вид без затрат на дополнительный код.

сравнение writeширины по умолчанию
фрагмент исходного кода
writeLn ( 1 ) ; writeLn ( 23456789 ) ;
производит в
Стандартный Паскаль ( GPC )Дельфи
 1 23456789
123456789

Ссылки

  1. ^ «Справочник по Delphi — RAD Studio XE2».
  2. ^ ван дер Хейден, Ян-Яап; Гервински, Питер; Хекенбах, Франк; деБоер, Беренд; Фреш, Доминик; Ланге, Эйке; Льюис, Питер; и др. «Руководство по GNU Pascal». Краткое руководство по переходу с Borland Pascal на GNU Pascal . Проверено 24 апреля 2023 г.
  3. ^ abcdefghij Мур, Скотт (2 декабря 2022 г.). "Часто задаваемые вопросы о стандартном Pascal". В. В чем разница между Borland Delphi и стандартом ISO 7185? . Получено 24 апреля 2023 г. .
  4. ^ Рейган, Джон (3 апреля 1995 г.). "Часто задаваемые вопросы по стандартам Pascal". Сравнение Borland Pascal со стандартами Pascal. Архивировано из оригинала 28 сентября 2021 г.

Дальнейшее чтение

  • Кэтлин Янсен и Никлаус Вирт : PASCAL — Руководство пользователя и отчет. Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3 , ISBN 0-387-90144-2 и ISBN 3-540-90144-2 [1]   
  • Никлаус Вирт: Язык программирования Паскаль. Acta Informatica, 1, (июнь 1971) 35–63
  • ISO/IEC 7185: Языки программирования - PASCAL. [2]
  • Дуг Купер: Standard Pascal: Справочное руководство пользователя. WW Norton & Company, 1983, ISBN 0-393-30121-4 , ISBN 978-0-393-30121-2  
  • Веб-сайт ISO 7185 Pascal
  • Документы стандартов Pascal
Retrieved from "https://en.wikipedia.org/w/index.php?title=Comparison_of_Pascal_and_Delphi&oldid=1228073015"