Паскаль (язык программирования) - Pascal (programming language)

Паскаль
LagrangePAS.jpg
Парадигма
СемьяВирт Паскаль
РазработаноНиклаус Вирт
Впервые появился1970; 50 лет назад (1970)
Печатная дисциплина
Расширения имени файла.pp, .pas, .inc,
Основной реализации
Диалекты
Под влиянием
Под влиянием

Паскаль является императив и процедурный язык программирования, разработано Никлаус Вирт как небольшой, эффективный язык, предназначенный для поощрения хороших практик программирования с использованием структурное программирование и структурирование данных. Он назван в честь французского математика, философа и физика. Блез Паскаль.

На основе книги Вирта, Алгоритмы + Структуры данных = Программы, Паскаль был разработан по образцу АЛГОЛ 60 язык. Вирт участвовал в процессе улучшения языка в рамках АЛГОЛ X усилия и предложил версию, известную как АЛГОЛ W. Это не было принято, и процесс ALGOL X застрял. В 1968 году Вирт решил отказаться от процесса ALGOL X и улучшить ALGOL W, выпустив его в 1970 году как Pascal.

На вершине АЛГОЛА скаляры и массивы, Паскаль позволил определять сложные типы данных и создавать динамические и рекурсивные структуры данных, такие как списки, деревья и графики. Паскаль имеет строгая типизация для всех объектов, что означает, что один тип данных не может быть преобразован или интерпретирован как другой без явных преобразований. В отличие от C (и большинства языков в C-семья ), Паскаль позволяет вложенная процедура определения на любом уровне глубины, а также позволяет большинство видов определений и объявлений внутри подпрограммы (процедуры и функции). Таким образом, программа синтаксически похожа на отдельную процедуру или функцию. Это похоже на блочную структуру АЛГОЛА 60, но ограничено от произвольных блоковых операторов только процедурами и функциями.

Паскаль стал очень успешным в 1970-х годах, особенно в период расцвета миникомпьютер рынок. Компиляторы были также доступны для многих микрокомпьютеры поскольку это поле появилось в конце 1970-х годов. Он широко использовался в качестве языка обучения в Университет -уровневые курсы программирования в 1980-х годах, а также использовались в производственных условиях для написания коммерческого программного обеспечения в тот же период. Он был вытеснен Язык программирования C в конце 1980-х - начале 1990-х годов, когда UNIX -системы стали популярными, особенно с выпуском C ++.

Производная, известная как Object Pascal предназначен для объектно-ориентированного программирования был разработан в 1985 году; это было использовано Компьютер Apple и Borland в конце 1980-х и позже превратился в Delphi на Майкрософт Виндоус Платформа. Расширения концепций Паскаля привели к появлению языков Модула-2 и Оберон.

История

Предыдущие усилия

Большая часть истории компьютерный язык дизайн 1960-х годов можно проследить до АЛГОЛ 60 язык. Алгол был разработан в 1950-х годах с явной целью - иметь возможность четко описывать алгоритмы. Он включал ряд функций для структурное программирование которые остаются распространенными в языках по сей день.

Вскоре после его появления в 1962 году Вирт вместе с Гельмутом Вебером начал работать над диссертацией по теме Язык программирования Эйлера. Эйлер был основан на синтаксисе АЛГОЛА и многих концепциях, но не был производным. Его основная цель заключалась в добавлении динамических списков и типов, позволяющих использовать его в ролях, подобных Лисп. Язык был опубликован в 1965 году.

К этому времени в Алголе был выявлен ряд проблем, в частности, отсутствие стандартизированного нить система. Группа, которой было поручено поддерживать язык, начала АЛГОЛ X процесс выявления улучшений, запрос предложений. Вирт и Тони Хоар представил консервативный набор изменений для добавления строк и очистки синтаксиса. Они считались слишком незначительными, чтобы их можно было использовать в качестве нового стандартного АЛГОЛА, поэтому Вирт написал компилятор для языка, который стал известен как АЛГОЛ W.

Усилия ALGOL X продолжатся, чтобы выбрать гораздо более сложный язык, АЛГОЛ 68. Сложность этого языка привела к значительным трудностям при создании высокопроизводительных компиляторов, и он не получил широкого распространения в отрасли. Это оставило возможность для новых языков.

Паскаль

На Паскаль повлияли усилия ALGOL W с явными целями создания языка, который был бы эффективным как в компиляторе, так и во время выполнения, позволял разрабатывать хорошо структурированные программы и был полезен для обучения студентов. структурное программирование.[4] Некоторое поколение студентов использовали Паскаль в качестве вводного языка на курсах бакалавриата.

Одним из первых успехов языка было введение UCSD Паскаль, версия, работающая на пользовательском Операционная система которые можно было портировать на разные платформы. Ключевой платформой была Яблоко II, где он получил широкое распространение. Это привело к тому, что Паскаль стал основным языком высокого уровня, используемым для разработки в Яблочная Лиза, а позже Macintosh. Части оригинала Операционная система Macintosh были вручную переведены на Motorola 68000 язык ассемблера из источников Паскаля.[5]

В наборный система TeX к Дональд Э. Кнут был написан в WEB, оригинал грамотное программирование система, основанная на DEC PDP-10 Паскаль. Успешные коммерческие приложения, такие как Adobe Photoshop[6] были написаны в Мастерская программиста Macintosh Паскаль, а приложения вроде Total Commander, Skype[нужна цитата ] и Macromedia Captivate были написаны на Delphi (Object Pascal ). Аполлон Компьютер использовал Паскаль в качестве языка системного программирования для своих операционных систем, начиная с 1980 года.

Варианты Паскаля также использовались для всего, от исследовательских проектов до Компьютерные игры и встроенные системы. Существуют более новые компиляторы Pascal, которые широко используются.[7]

Object Pascal

Во время работы над Лизой, Ларри Теслер начал переписку с виртом по поводу идеи добавить объектно-ориентированный расширения к языку. Первоначально это привело к Clascal, представленный в 1983 году. Когда программа Lisa исчезла и была заменена Mac, следующая версия, известная как Object Pascal был создан. Это было введено на Macintosh в 1985 году как часть MacApp рамки приложения, и стал основным языком разработки Apple в начале 1990-х годов.

Расширения Object Pascal были добавлены в Турбо Паскаль с выпуском версии 5.5 в 1989 г.[8] Со временем Object Pascal стал основой Delphi система для Майкрософт Виндоус, который до сих пор используется для разработки приложений Windows и может кросс-компилировать код для других систем. Free Pascal - это кроссплатформенная альтернатива с открытым исходным кодом.

Реализации

Компиляторы раннего Паскаля

Первый Паскаль компилятор был разработан в Цюрих для CDC 6000 серии универсальный компьютер семья. Никлаус Вирт сообщает, что первая попытка реализовать его в FORTRAN 66 в 1969 году был неудачным из-за неадекватности FORTRAN 66 для выражения сложных структур данных. Вторая попытка была реализована на C-подобном языке (Scallop от Max Engeli) и затем вручную переведена (R. Schild) на сам Паскаль для начальной загрузки.[9] Он был введен в эксплуатацию к середине 1970 года. С тех пор многие компиляторы Паскаля самостоятельный хостинг, то есть компилятор сам написан на Паскале, и компилятор обычно способен перекомпилировать себя, когда к языку добавляются новые функции или когда компилятор должен быть портирован в новую среду. В GNU Pascal компилятор - одно заметное исключение, написанное на C.

Первый успешный перенос компилятора CDC Pascal на другой мэйнфрейм был завершен Уэлшем и Куинном в Королевский университет Белфаста (QUB) в 1972 году. ICL 1900 серии. Этот компилятор, в свою очередь, был родительским для компилятора Паскаля для Информационные компьютерные системы (ICS) Multum миникомпьютер. Порт Multum был разработан - с целью использования Паскаль в качестве языка системного программирования - Финдли, Купплз, Кавурас и Дэвис, работающие в Департаменте компьютерных наук в г. Университет Глазго. Считается, что Multum Pascal, завершенный летом 1973 года, мог быть первой 16-битной реализацией.

Совершенно новый компилятор был завершен Welsh et al. в QUB в 1977 году. Он предлагал функцию диагностики исходного языка (включая профилирование, трассировку и форматированные дампы с учетом типов), которые были реализованы Финдли и Ваттом в Университете Глазго. Эта реализация была перенесена в 1980 году на ICL 2900 серия от команды из Саутгемптонский университет и Университет Глазго. Реализация стандартной модели Паскаля также была основана на этом компиляторе, адаптированном Уэлшем и Хэем в Манчестерский университет в 1984 году для тщательной проверки соответствия стандарту BSI 6192 / ISO 7185 и создания кода для портативной абстрактной машины.

Первый Паскаль компилятор написанный в Северной Америке, был построен в Университет Иллинойса под Дональд Б. Гиллис для PDP-11 и сгенерированный машинный код.

Система Паскаля-П

Для быстрого распространения языка компилятор комплект для переноса был создан в Цюрихе, который включал компилятор, который генерировал так называемые p-код для виртуальный стековая машина, то есть код, который поддается достаточно эффективной интерпретации, вместе с интерпретатором для этого кода - Паскаль-П система. Компиляторы P-системы были названы Pascal-P1, Pascal-P2, Pascal-P3 и Pascal-P4. Pascal-P1 был первой версией, а Pascal-P4 был последней версией из Цюриха. Версия, названная Pascal-P1, была придумана задним числом для множества различных источников Pascal-P, которые существовали. Компилятор был переработан для повышения переносимости и выпущен как Pascal-P2. Позднее этот код был расширен и стал Pascal-P3 с промежуточным кодом. обратная совместимость с Pascal-P2 и Pascal-P4, который не был обратно совместим.

Компилятор-интерпретатор Pascal-P4 все еще можно запускать и компилировать в системах, совместимых с исходным Pascal. Однако он принимает только подмножество языка Паскаль.

Pascal-P5, созданный вне группы Zürich, принимает полный язык Pascal и поддерживает совместимость с ISO 7185.

UCSD Паскаль ответвился от Паскаля-P2, где Кеннет Боулз использовал его для создания толковательный UCSD p-System. Это была одна из трех операционных систем, доступных на момент запуска оригинальной Персональный компьютер IBM.[10] UCSD Pascal использовал промежуточный код, основанный на байтовых значениях, и поэтому был одним из первых компиляторы байтового кода. От Pascal-P1 до Pascal-P4 не было, а на основе 60-битной длины слова CDC 6600.

Компилятор на базе компилятора Pascal-P4, который создавал собственные двоичные файлы, был выпущен для IBM System / 370 универсальный компьютер посредством Комиссия по атомной энергии Австралии; он был назван Компилятор AAEC Pascal после аббревиатуры наименования комиссии.[11]

Object Pascal и Turbo Pascal

Apple Computer создала свою собственную Lisa Pascal для Lisa Workshop в 1982 году и перенесла компилятор на Apple Macintosh и MPW в 1985 г. В 1985 г. Ларри Теслер по согласованию с Никлаусом Виртом определил Object Pascal, и эти расширения были включены в компиляторы Lisa Pascal и Mac Pascal.

В 1980-х годах Андерс Хейлсберг написал компилятор Blue Label Pascal для Nascom -2. Повторная реализация этого компилятора для IBM PC продавалась под названиями Compas Pascal и PolyPascal до того, как была приобретена Borland и переименовал Турбо Паскаль.

Турбо Паскаль стал чрезвычайно популярным благодаря агрессивной стратегии ценообразования, наличию одной из первых полноэкранных IDE и очень короткому времени выполнения (всего секунды для компиляции, связывания и запуска). Он был написан и полностью оптимизирован на язык ассемблера, делая это меньше и быстрее, чем у многих конкурентов.

В 1986 году Андерс портировал Turbo Pascal на Macintosh и включил расширения Object Pascal от Apple в Turbo Pascal. Затем эти расширения были добавлены обратно в версию Turbo Pascal для ПК версии 5.5. В то же время Microsoft также реализовал компилятор Object Pascal.[12][13] Turbo Pascal 5.5 оказал большое влияние на сообщество Pascal, которое в конце 1980-х начало концентрироваться в основном на IBM PC. Многие любители ПК в поисках структурированной замены BASIC использовали этот продукт. Его также начали внедрять профессиональные разработчики. Примерно в то же время ряд концепций был импортирован из C позволить программистам на Паскале использовать основанный на C API из Майкрософт Виндоус напрямую. Эти расширения включают в себя завершенные нулем струны, арифметика указателя, указатели на функции, адрес оператора и небезопасный приведение типов.

Turbo Pascal и другие производные с единицы или концепции модуля модульные языки. Однако он не предоставляет концепцию вложенного модуля или квалифицированный импорт и экспорт определенных символов.

Другие варианты

Супер Паскаль - это вариант, в котором в качестве имен типов добавлены нечисловые метки, оператор возврата и выражения.

TMT Pascal был первым Borland -совместимый компилятор для 32-битных ДОС защищенный режим, OS / 2 и Win32 операционные системы. Язык TMT Pascal был первым, который позволил функционировать и перегрузка оператора.

Университеты Висконсин-Мэдисон, Цюрих, Карлсруэ и Вупперталь разработал Паскаль-SC[14][15] и Паскаль-XSC[16][17][18] (Расширения для научных вычислений ) компиляторы, предназначенные для программирования числовых вычислений. Разработка Pascal-SC началась в 1978 году с поддержкой ISO 7185 Pascal уровня 0, но поддержка уровня 2 была добавлена ​​на более позднем этапе.[19] Pascal-SC изначально был нацелен на Z80 процессор, но позже был переписан под DOS (x86 ) и 68000. Pascal-XSC в разное время переносился на Unix (Linux, SunOS, HP-UX, AIX ) и Microsoft / IBM (DOS с EMX, OS / 2, Windows ) операционные системы. Он работает, генерируя промежуточный исходный код C, который затем компилируется в собственный исполняемый файл. Некоторые расширения языка Pascal-SC были приняты GNU Pascal.

Паскаль Соль был разработан примерно в 1983 году французской командой для реализации Unix-подобный система под названием Sol. Это был стандартный Pascal level-1 (с параметризованными границами массивов), но определение допускало альтернативные ключевые слова и предопределенные идентификаторы на французском языке, а язык включал несколько расширений для упрощения системного программирования (например, эквивалент lseek).[20] Позднее команда Sol переехала в Припев проект по разработке распределенной операционной системы.[21]

IP Паскаль была реализацией языка программирования Паскаль с использованием Микрополис DOS, но был быстро перемещен на CP / M-80 работает на Z80. Он был перемещен в 80386 типов машин в 1994 году и существует сегодня как реализации Windows / XP и Linux. В 2008 году система была поднята на новый уровень, и в результате появился язык, названный «Паскалин» (после Калькулятор Паскаля ). Он включает объекты, элементы управления пространством имен, динамические массивы, наряду со многими другими расширениями, и обычно имеет те же функции и защиту типов, что и C #. Это единственная такая реализация, которая также совместима с исходной реализацией Паскаля, стандартизированной как ISO 7185.

Языковые конструкции

Паскаль в его первоначальном виде представляет собой чисто процедурный язык и включает в себя традиционный набор АЛГОЛ -подобные управляющие структуры с зарезервированными словами, например если, тогда, еще, пока, за, и дело начиная от одного утверждения или начинать-конец блок операторов. Паскаль также имеет конструкции структурирования данных, не включенные в исходный АЛГОЛ 60 типы, подобно записи, варианты, указатели, перечисления, и наборы и процедуры / указатели. Такие конструкции были частично унаследованы или вдохновлены Симула 67, АЛГОЛ 68, Никлаус Вирт собственный АЛГОЛ W и предложения К. А. Р. Хоар.

Программы на языке Pascal начинаются с программа ключевое слово со списком внешних файловые дескрипторы как параметры[22] (не требуется в Turbo Pascal и т. д.); далее следует основной блокировать заключенный в скобки начинать и конец ключевые слова. Точка с запятой отдельный заявления, а полная остановка (т.е. точка) завершает всю программу (или единица измерения). Регистр игнорируется в исходном коде Pascal.

Вот пример исходного кода, используемого для очень простого "Привет, мир!" программа:

программа Привет, мир(выход);начинать    Написать('Привет, мир!')    {Нет ";" требуется после последнего оператора блока -        добавление одного добавляет в программу "нулевой оператор", который игнорируется компилятором.}конец.

Типы данных

Тип в Паскале и нескольких других популярных языках программирования определяет переменную таким образом, что он определяет диапазон значений, которые переменная способна хранить, а также определяет набор операций, которые разрешено выполнять с переменные этого типа. Предопределенные типы:

Тип данныхТип значений, которые может сохранять переменная
целое числоцелые (целые) числа
настоящийчисла с плавающей запятой
логическийзначения True или False
charодин символ из упорядоченного набора символов
нитьпоследовательность или «строка» символов
наборэквивалентен массиву логический значения

Диапазон значений, разрешенных для каждого (кроме логического), определяется реализацией. Предусмотрены функции для преобразования некоторых данных. Для преобразования настоящий к целое числодоступны следующие функции: круглый (который округляется до целого числа с помощью банковское округление ) и усечение (округляется до нуля).

Программист может свободно определять другие часто используемые типы данных (например, байты, строки и т. Д.) В терминах предопределенных типов, используя, например, средство объявления типов Паскаля.

тип    байт        = 0..255;    подписанный_байт = -128..127;    нить      = упакованный множество[1..255] из char;

(Часто используемые типы, такие как byte и string, уже определены во многих реализациях.)

Типы поддиапазонов

Поддиапазоны любых порядковый тип данных (любой простой тип, кроме настоящего) также можно сделать:

вар    Икс : 1..10;    у : 'а'..'z';

Типы наборов

В отличие от других языков программирования того времени, Паскаль поддерживает заданный тип:[23]

вар    Set1 : набор из 1..10;    Set2 : набор из 'а'..'z';

Наборы - это фундаментальная концепция современной математики, и их можно использовать во многих алгоритмах. Такая функция полезна и может быть быстрее, чем эквивалентная конструкция на языке, который не поддерживает наборы. Например, для многих компиляторов Паскаля:

если я в [5..10] тогда ...

выполняется быстрее, чем:

если (я > 4) и (я < 11) тогда ...

Наборы несмежных значений могут быть особенно полезны с точки зрения производительности и удобочитаемости:

если я в [0..3, 7, 9, 12..15] тогда ...

Для этих примеров, которые включают наборы в небольших доменах, улучшенная производительность обычно достигается компилятором, представляющим переменные набора как битовые векторы. Набор операторы затем могут быть эффективно реализованы как операции побитового машинного кода.

Объявления типов

Типы могут быть определены из других типов с помощью объявлений типов:

тип    Икс = целое число;    у = Икс;...

Кроме того, сложные типы могут быть построены из простых типов:

тип    а = множество[1..10] из целое число;    б = записывать        Икс : целое число;        у : char  {дополнительная точка с запятой не требуется}    конец;    c = файл из а;

Тип файла

Как показано в примере выше, Паскаль файлы представляют собой последовательности компонентов. Каждый файл имеет буферную переменную, которая обозначается е ^. Процедуры получать (для чтения) и положить (для записи) переместите переменную буфера к следующему элементу. Чтение вводится таким образом, что читать (f, x) такой же как х: = е ^; получить (е);. Запись вводится так, что написать (f, x) такой же как е ^: = х; положить (f); Тип текста предопределен как файл char. Хотя переменную буфера можно было использовать для проверки следующего символа, который будет использоваться (проверка цифры перед чтением целого числа), это привело к серьезным проблемам с интерактивными программами в ранних реализациях, но позже было решено с помощью «ленивого ввода-вывода» концепция.

В Jensen & Wirth Pascal строки представлены как упакованные массивы символов; поэтому они имеют фиксированную длину и обычно заполнены пространством.

Типы указателей

Паскаль поддерживает использование указатели:

тип    pNode = ^Узел;    Узел  = записывать        а : целое число;        б : char;        c : pNode      конец;вар    NodePtr : pNode;    IntPtr  : ^целое число;

Здесь переменная NodePtr указатель на тип данных Узел, запись. Указатели можно использовать до их объявления. Это предварительная декларация, исключение из правила, что вещи должны быть объявлены перед их использованием.

Чтобы создать новую запись и присвоить значение 10 и характер А в поля а и б в записи и инициализировать указатель c к нулевой указатель ("NIL" в Паскале), утверждения будут такими:

Новый(NodePtr);...NodePtr^.а := 10;NodePtr^.б := 'А';NodePtr^.c := Ноль;...

Это также можно сделать с помощью с заявление, а именно:

Новый(NodePtr);...с NodePtr^ делатьначинать    а := 10;    б := 'А';    c := Нольконец;...

Внутри области действия с оператор, a и b относятся к подполям указателя записи NodePtr а не к записи Node или типу указателя pNode.

Связанные списки, стеки и очереди можно создать, включив в запись поле типа указателя (c).

В отличие от многих языков, в которых есть указатели, Паскаль позволяет указателям ссылаться только на динамически создаваемые анонимные переменные и не позволяет им ссылаться на стандартные статические или локальные переменные. Указатели также должны иметь связанный тип, а указатель на один тип несовместим с указателем на другой тип (например, указатель на char несовместим с указателем на целое число). Это помогает устранить проблемы безопасности типов, присущие другим реализациям указателей, особенно тем, которые используются для PL / I или же C. Это также устраняет некоторые риски, вызванные висячие указатели, но возможность динамически освобождать указанное пространство с помощью избавляться функция (которая имеет тот же эффект, что и свободный библиотечная функция найдена в C ) означает, что риск зависания указателей полностью не устранен.[24] как в таких языках, как Java и C #, которые предоставляют автоматический сбор мусора (но которые не устраняют полностью связанную с этим проблему утечки памяти ).

Некоторые из этих ограничений могут быть сняты в новых диалектах.

Структуры управления

Паскаль - это структурное программирование язык, что означает, что поток управления структурирован в стандартные заявления, обычно без 'идти к 'команды.

пока а <> б делать  WriteLn('Ожидающий');если а > б тогда WriteLn("Условие выполнено")   {точка с запятой не допускается перед else}    еще WriteLn(«Условие не выполнено»);за я := 1 к 10 делать  {здесь нет точки с запятой, так как она отделяет следующий оператор}    WriteLn('Итерация:', я);повторение    а := а + 1до того как а = 10;дело я из    0 : Написать('нуль');    1 : Написать('один');    2 : Написать('два');    3,4,5,6,7,8,9,10: Написать('?')конец;

Процедуры и функции

Паскаль структурирует программы на процедуры и функции.

программа Печать;вар я : целое число;процедура Распечатать(j : целое число);начинать    ...конец;начинать {основная программа}    ...    Распечатать(я);конец.

Процедуры и функции могут быть вложены на любую глубину, а конструкция «программа» является самым внешним логическим блоком.

По умолчанию параметры передаются по значению. Если 'var' предшествует имени параметра, он передается по ссылке.

Каждая процедура или функция могут иметь свои собственные объявления меток перехода, констант, типов, переменных и других процедур и функций, которые должны быть в указанном порядке. Это требование упорядочивания изначально предназначалось для обеспечения эффективного однопроходная компиляция. Однако в некоторых диалектах (например, Embarcadero Delphi ) было ослаблено требование строгого порядка разделов объявлений.

Точка с запятой как разделитель операторов

Паскаль заимствовал многие особенности синтаксиса языка из АЛГОЛ язык, включая использование точки с запятой в качестве разделителя операторов. Это контрастирует с другими языками, такими как PL / I, C и т. д., которые используют точку с запятой в качестве признака конца оператора. Точка с запятой перед конец ключевое слово объявления типа записи, блока или дело утверждение; перед до того как ключевое слово повторения оператора; и до еще ключевое слово если утверждение.

Наличие лишней точки с запятой не разрешалось в ранних версиях Паскаля. Однако добавление АЛГОЛ -как пустые заявления в 1973 году Пересмотренный отчет а более поздние изменения языка в ISO 7185: 1983 теперь допускают использование дополнительных точек с запятой в большинстве этих случаев. Точка с запятой по-прежнему не допускается непосредственно перед еще ключевое слово в если заявление, потому что еще следует за одним оператором, а не за последовательностью операторов. В случае вложенных ifs нельзя использовать точку с запятой, чтобы избежать болтается еще проблема (где внутреннее if не имеет else, но внешнее if имеет), предположительно завершая вложенное if точкой с запятой - вместо этого это завершает оба предложения if. Вместо этого явный начало ... конец блок должен использоваться.[25]

Ресурсы

Компиляторы и интерпретаторы

Для общего использования доступны несколько компиляторов и интерпретаторов Pascal:

  • Delphi флагман Embarcadero (ранее Borland / CodeGear) быстрая разработка приложений (RAD) продукт. Он использует язык Object Pascal (названный Borland "Delphi"), происходящий от Pascal, для создания приложений для Windows, macOS, iOS, и Android. Поддержка .NET, существовавшая с D8 по D2005, D2006 и D2007, была прекращена и заменена новым языком (Prism, который переименован в Oxygene, см. Ниже), который не является полностью обратно совместимым. В былые времена Unicode добавлена ​​поддержка и дженерики (D2009, D2010, Delphi XE).
  • Free Pascal это мультиплатформенный компилятор, написанный на Object Pascal (и является самостоятельный хостинг ). Он нацелен на предоставление удобного и мощного компилятора, способного как компилировать устаревшие приложения, так и средства разработки новых. Распространяется под GNU GPL, а пакеты и библиотека времени выполнения подпадают под измененный GNU LGPL. Помимо режимов совместимости для Турбо Паскаль, Delphi и Mac Pascal, он также имеет собственные процедурные и объектно-ориентированные режимы синтаксиса с поддержкой расширенных функций, таких как оператор перегрузка. Он поддерживает множество платформ и операционных систем. В текущих версиях также есть режим ISO.
  • Современный Паскаль это многоплатформенный интерпретатор и компилятор p-кода, написанный на Free Pascal. Он нацелен на предоставление альтернативных решений для PHP и node.js, использующих либо стандартный паскальский диалект ISO, либо гибридную поддержку операторов JavaScript / C. Из CLI он полезен как интерпретатор Free Pascal.
  • Турбо51 это бесплатный компилятор Pascal для 8051 семья микроконтроллеров, с Турбо Паскаль 7 синтаксис.
  • Кислород (ранее известный как Хром) является компилятором Object Pascal для .СЕТЬ и Мононуклеоз платформы. Он был создан и продается RemObjects Software, а некоторое время продан Embarcadero в качестве бэкэнд-компилятора для Призма.
  • Kylix был потомком Delphi, при поддержке Linux операционная система и улучшенная библиотека объектов. Больше не поддерживается. Компилятор и IDE теперь доступны для некоммерческого использования.
  • GNU Pascal Компилятор (GPC) - это компилятор языка Pascal для Коллекция компиляторов GNU (GCC). Сам компилятор написан на C, а библиотека времени выполнения - в основном на Паскале. Распространяется в рамках Стандартная общественная лицензия GNU, он работает на многих платформах и операционных системах. Он поддерживает стандартные языки ANSI / ISO и частично поддерживает диалект Turbo Pascal. Одним из наиболее болезненных упущений является отсутствие на 100% Turbo Pascal-совместимого (короткого) строкового типа. Поддержка Borland Delphi и других языковых вариаций весьма ограничена. Однако есть некоторая поддержка Mac-pascal.
  • Виртуальный Паскаль был создан Виталием Мирьяновым в 1995 году как собственный компилятор OS / 2, совместимый с синтаксисом Borland Pascal. Затем он был коммерчески разработан fPrint, добавив поддержку Win32, и в 2000 году стал бесплатным. Сегодня он может компилироваться для Win32, OS / 2 и Linux и в основном совместим с Borland Pascal и Delphi. Разработка была прекращена 4 апреля 2005 года.
  • Компилятор P4, основа для многих последующих компиляторов Pascal, реализованных в Pascal. Он реализует подмножество полного Паскаля.
  • Компилятор P5 - это адаптация стандарта P4 к стандарту ISO 7185 (полный Паскаль).
  • Smart Mobile Studio - это компилятор Pascal в HTML5 / Javascript.
  • Турбо Паскаль был доминирующим компилятором Паскаля для ПК в 1980-х и начале 1990-х годов, популярным как благодаря своим мощным расширениям, так и чрезвычайно короткому времени компиляции. Turbo Pascal был написан компактно и мог компилировать, запускать и отлаживать все из памяти без доступа к диску. Медленные дисководы гибких дисков были обычным явлением для программистов в то время, что еще больше увеличивало преимущество Turbo Pascal в скорости. В настоящее время более старые версии Turbo Pascal (до 5.5) доступны для бесплатной загрузки с сайта Borland.
  • IP Pascal Реализует язык "Pascaline" (названный в честь Калькулятор Паскаля ), который является сильно расширенным Паскалем, совместимым с исходным Паскалем в соответствии с ISO 7185. Он включает модули с контролем пространства имен, включая модули параллельного выполнения задач с семафорами, объектами, динамическими массивами любых размеров, которые выделяются во время выполнения, перегрузками, переопределениями и многим другим. другие расширения. IP Pascal имеет встроенную библиотеку переносимости, которая специально адаптирована для языка Pascal. Например, стандартное приложение вывода текста из оригинального Паскаля 1970-х годов можно перекомпилировать для работы в окне и даже добавить графические конструкции.
  • Pascal-XT был создан Сименс для них мэйнфрейм операционные системы BS2000 и SINIX.
  • PocketStudio это компилятор подмножества Паскаля и инструмент RAD для Palm OS и процессоры MC68xxx с некоторыми собственными расширениями для облегчения взаимодействия с Palm OS API. Он напоминает Delphi и Lazarus с визуальным конструктором форм, инспектором объектов и редактор исходного кода.
  • MIDletPascal - Компилятор Pascal и IDE, которые генерируют небольшой и быстрый байт-код Java, специально разработанный для создания программного обеспечения для мобильных устройств.
  • Vector Pascal - это язык для SIMD наборы команд, такие как MMX и AMD 3d Now, поддерживающие все процессоры Intel и AMD, а также движок Sony PlayStation 2 Emotion Engine.
  • Morfik Pascal позволяет разрабатывать веб-приложения, полностью написанные на Object Pascal (как на стороне сервера, так и на стороне браузера).
  • WDSibyl - визуальная среда разработки и компилятор Pascal для Win32 и OS / 2
  • PP Compiler, компилятор для Palm OS, работающий непосредственно на портативном компьютере.
  • Компилятор CDC 6000 Pascal - это исходный код для первого (CDC 6000) компилятора Pascal.
  • Паскаль-S[26]
  • AmigaPascal - это бесплатный компилятор Паскаля для компьютера Amiga.
  • VSI Паскаль (первоначально VAX Pascal) - компилятор, совместимый со стандартом ISO Standard Pascal для OpenVMS Операционная система.
  • Stony Brook Pascal + был 16-битным (позже 32-битным) оптимизирующим компилятором для DOS и OS / 2, который продавался как прямая замена Turbo Pascal, но производил код, который выполнялся как минимум в два раза быстрее.

Иды

Библиотеки

  • Библиотека WOL для создания приложений с графическим интерфейсом пользователя с помощью компилятора Free Pascal.

Стандарты

ISO / IEC 7185: 1990 Паскаль

В 1983 году язык был стандартизирован в международном стандарте IEC / ISO 7185,[27] и несколько местных национальных стандартов, включая американский ANSI / IEEE770X3.97-1983 и ISO 7185: 1983. Эти два стандарта различались только тем, что стандарт ISO включал расширение «уровня 1» для совместимых массивов (массив, границы которого неизвестны до времени выполнения), где ANSI не допускает этого расширения оригинала (Wirth версия) язык. В 1989 году ISO 7185 был пересмотрен (ISO 7185: 1990) для исправления различных ошибок и двусмысленностей, обнаруженных в исходном документе.

Стандарт ISO 7185 был заявлен как разъяснение языка Вирта 1974 года, как подробно описано в Руководстве пользователя и отчете [Дженсен и Вирт], но также отличался добавлением «Соответствующих параметров массива» в качестве уровня 1 к стандарту, уровень 0 - Паскаль. без соответствующих массивов. Это дополнение было сделано по просьбе К. А. Р. Хоар, и с одобрения Никлауса Вирта. Первопричиной было то, что Хоар хотел создать версию языка Паскаля. (NAG) Библиотека численных алгоритмов, который изначально был написан на FORTRAN, и обнаружил, что это невозможно сделать без расширения, которое допускало бы параметры массива различного размера. Аналогичные соображения мотивировали включение в ISO 7185 средства для определения типов параметров процедурных и функциональных параметров.

Сам Никлаус Вирт называл язык 1974 года «Стандартом», например, чтобы отличить его от машинных особенностей CDC 6000 компилятор. Этот язык был задокументирован в Отчет Pascal,[28] вторая часть «Руководства пользователя и отчета Pascal».

На больших машинах (мэйнфреймы и мини-компьютеры), на которых зародился Паскаль, в целом соблюдались стандарты. На IBM PC, они не были. На ПК IBM наибольшее количество пользователей имеют стандарты Borland Turbo Pascal и Delphi. Таким образом, обычно важно понимать, соответствует ли конкретная реализация исходному языку Pascal или его диалекту Borland.

Версии языка для IBM PC стали отличаться с появлением UCSD Pascal, интерпретируемой реализации, в которой было несколько расширений языка, а также несколько упущений и изменений. Многие возможности языка UCSD сохранились до наших дней, в том числе на диалекте Borland.

ISO / IEC 10206: 1990 Расширенный Паскаль

В 1990 году был создан расширенный стандарт Паскаля как ISO / IEC 10206,[29] идентичный по техническому содержанию[30] согласно IEEE / ANSI 770X3.160-1989[31]По состоянию на 2019 год поддержка расширенного Паскаля в FreePascal Компилятор планируется.[32]

Вариации

Цюрихская версия Паскаля Никлауса Вирта была выпущена снаружи ETH в двух основных формах: исходный код компилятора CDC 6000 и комплект для переноса, называемый системой Pascal-P. Компилятор Pascal-P упустил некоторые возможности полного языка, которые не требовались для начальной загрузки компилятора. Например, процедуры и функции, используемые в качестве параметров, неразборчивые записи вариантов, упаковка, удаление, межпроцедурные переходы и другие функции полного компилятора, были опущены.

UCSD Паскаль под руководством профессора Кеннет Боулз, был основан на наборе Pascal-P2 и, следовательно, разделял некоторые языковые ограничения Pascal-P. Позже UCSD Pascal был принят как Apple Pascal и продолжил работу в нескольких версиях. Хотя UCSD Pascal фактически расширил подмножество Pascal в наборе Pascal-P, добавив обратно стандартные конструкции Pascal, он все еще не был полной стандартной установкой Pascal.

В начале 1990-х гг. Алан Бернс и Джефф Дэвис разработал Pascal-FC, расширение для Pl / 0 (из книги Никлауса «Алгоритмы + структуры данных = программы»). Было добавлено несколько конструкций для использования Pascal-FC в качестве обучающего инструмента для параллельного программирования (например, семафоры, мониторы, каналы, удаленный вызов и ресурсы). Чтобы продемонстрировать параллелизм, вывод компилятора (своего рода P-код ) затем можно было запустить на виртуальной машине. Эта виртуальная машина не только моделирует нормальную - справедливую - среду, но также может моделировать экстремальные условия (несправедливый режим).

Компиляторы Паскаля, подобные Borland

Borland с Турбо Паскаль, написано Андерс Хейлсберг, был написан на языке ассемблера, независимом от компиляторов UCSD или Zürich. Однако он принял во многом те же подмножества и расширения, что и компилятор UCSD. Вероятно, это связано с тем, что система UCSD была наиболее распространенной системой Pascal, подходящей для разработки приложений на доступных в то время микропроцессорных системах с ограниченными ресурсами.

В термоусадка Turbo Pascal версии 3 и более поздних версий, включая Borland Object Pascal и Delphi и не-Borland, близкие к совместимости, стали популярными среди программистов, включая авторов условно-бесплатного программного обеспечения, и поэтому библиотека SWAG кода Pascal включает большой объем кода, написанного с учетом таких версий, как Delphi.

Программные продукты (компиляторы, и IDE /Быстрая разработка приложений (RAD) в этой категории:

  • Турбо Паскаль - «TURBO.EXE» до версии 7 и Turbo Pascal для Windows («TPW») и Turbo Pascal для Macintosh.
  • Borland Pascal 7 (по сути, Turbo Pascal 7 для Windows).
  • Object Pascal - расширение языка Pascal, разработанное в Компьютер Apple командой во главе с Ларри Теслер в консультации с Никлаус Вирт, изобретатель Паскаля; его функции были добавлены в Turbo Pascal для Macintosh и в 1989 году для Turbo Pascal 5.5 для DOS.
  • Delphi - Object Pascal, по сути, является его основным языком.
  • Free Pascal компилятор (FPC) - Free Pascal принял де-факто стандартный диалект программистов Pascal, Borland Pascal и, позже, Delphi. Freepascal также поддерживает оба стандарта ISO.
  • ПаскальABC.NET - это язык программирования Pascal нового поколения, включающий компилятор и IDE
  • Borland Kylix - это компилятор и IDE, ранее продававшиеся Borland, но позже прекращенные. Это Linux версия Borland Delphi среда разработки программного обеспечения и C ++ Builder.
  • Лазарь - аналогично Kylix по функциям, это бесплатная кроссплатформенная визуальная IDE для RAD с использованием компилятора Free Pascal, которая поддерживает диалекты Object Pascal, в разной степени.
  • Виртуальный Паскаль - VP2 / 1 - это полностью совместимый с Borland Pascal и Borland Delphi 32-битный компилятор Pascal для OS / 2 и Win 32 (с версией Linux "в пути").[33]
  • Sybil - это Delphi-подобная IDE и компилятор с открытым исходным кодом; реализации включают WDSibyl[34] за Майкрософт Виндоус и OS / 2, коммерческая среда, совместимая с Borland Pascal, выпущенная компанией Speedsoft, которая позже была преобразована в подобную Delphi РАД среда, названная Sybil, а затем открытая под лицензией GPL, когда эта компания закрылась; Откройте Sybil это текущий проект, Открытый исходный код Инструмент Pascal RAD (Rapid Application Development) для OS / 2 и eCS, который изначально был основан на источниках Speedsoft WDsybl SPCC (Sibyl Portable Component Classes) и SVDE (Sibyl Visual Development Tool), но теперь его ядром является SOM, WPS и OpenDoc.[35]

Список связанных стандартов

  • ISO 8651-2:1988 Системы обработки информации - Компьютерная графика - Привязки языков Graphical Kernel System (GKS) - Часть 2: Паскаль

Прием

Паскаль вызвал широкий спектр откликов в компьютерном сообществе, как критических, так и дополнительных.

Ранняя критика

Будучи очень популярными в 1980-х и в начале 1990-х, реализации Паскаля, которые точно следовали первоначальному определению языка Виртом, подвергались широкой критике как непригодные для использования вне обучения. Брайан Керниган, которые популяризировали Язык C, изложил свои наиболее заметные критические замечания в адрес Паскаль еще в 1981 году в своей статье «Почему Паскаль не является моим любимым языком программирования».[36] Самая серьезная проблема, описанная им, заключалась в том, что размеры массивов и длина строк были частью типа, поэтому было невозможно написать функцию, которая принимала бы массивы переменной длины или даже строки в качестве параметров. Это сделало невозможным написание, например, библиотеки сортировки. Керниган также раскритиковал непредсказуемый порядок оценки логических выражений, плохую поддержку библиотеки и отсутствие статические переменные, и поднял ряд более мелких вопросов. Кроме того, он заявил, что язык не предоставляет никаких простых конструкций для «ухода» (сознательного и принудительного игнорирования) ограничений и ограничений. Более общие жалобы из других источников[24][37] отметил, что объем деклараций не был четко определен в определении исходного языка, что иногда имело серьезные последствия при использовании предварительные объявления для определения типов указателей, или когда объявления записей привели к взаимная рекурсия, или когда идентификатор мог использоваться или не использоваться в списке перечисления. Другая трудность заключалась в том, что вроде АЛГОЛ 60, язык не позволял процедурам или функциям, передаваемым в качестве параметров, предопределять ожидаемый тип своих параметров.

Несмотря на первоначальную критику, Паскаль продолжал развиваться, и большинство замечаний Кернигана не применимы к версиям языка, которые были улучшены, чтобы быть пригодными для разработки коммерческих продуктов, например, Borland's. Турбо Паскаль. Как предсказал Керниган в своей статье, большинство расширений для исправления этих проблем несовместимы от компилятора к компилятору. Однако с начала 1990-х годов большинство разновидностей, похоже, объединены в две категории: ISO и Borland-like. Extended Pascal обращается ко многим из этих ранних критических замечаний. Он поддерживает строки переменной длины, инициализацию переменных, раздельную компиляцию, логические операторы короткого замыкания и значения по умолчанию (иначе) для операторов case.[38]

Смотрите также

Рекомендации

  1. ^ "Мы очень внимательно посмотрели на Delphi Object Pascal и построил рабочий прототип ссылок на связанные методы, чтобы понять их взаимодействие с языком программирования Java и его API ... Мы пришли к выводу, что ссылки на связанные методы не нужны и вредны для языка. Это решение было принято после консультации с Borland International, у которой был предыдущий опыт работы со связанными ссылками на методы в Delphi. Object Pascal." (из О «делегатах» Microsoft В архиве 2012-06-27 на Wayback Machine на java.sun.com.
  2. ^ TechMetrix Research (1999). «История Java» (PDF). Отчет о серверах приложений Java. Архивировано из оригинал (PDF) на 2010-12-29. Проект получил название «зеленый», а язык был основан на старой модели UCSD Паскаль, что позволяет генерировать интерпретирующий код
  3. ^ «Разговор с Джеймсом Гослингом - очередь ACM». В архиве из оригинала 16 июля 2015 г.. Получено 11 августа 2015.
  4. ^ Essential Pascal В архиве 2017-04-18 в Wayback Machine Марко Канто
  5. ^ Герцфельд, Энди. "Венгерский folklore.org В архиве 2015-11-18 на Wayback Machine: Истории Macintosh. Проверено 6 марта 2012.
  6. ^ https://www.computerhistory.org/atchm/adobe-photoshop-source-code/ В архиве 2014-05-07 в Wayback Machine, Исходный код Adobe Photoshop
  7. ^ tiobe.com В архиве 2012-03-15 в Wayback Machine, Индекс сообщества программистов за январь 2011 г.
  8. ^ «Античное программное обеспечение: Turbo Pascal v5.5».
  9. ^ Компьютеры и вычислительная техника. Личная перспектива. В архиве 2017-05-10 в Wayback Machine Никлаус Вирт
  10. ^ cbi.umn.edu, "Интервью с Джоном Брэкеттом и Дугом Россом"[постоянная мертвая ссылка ], стр. 15, Институт Чарльза Бэббиджа, 2004 г.
  11. ^ Исследовательское учреждение Австралийской комиссии по атомной энергии, Лукас Хайтс, Отчет отделения ядерной науки и технологий, исследования отделов (PDF). Международное агентство по атомной энергии (IEAE) (Отчет). 1977. с. 22.
  12. ^ Джон Уделл, Крушение объектно-ориентированных паскалей, BYTE, июль 1989 г.
  13. ^ М. И. Трофимов, Конец Паскаля ?, BYTE, март, 1990, с. 36.
  14. ^ Ралл, Л. Б. (1987). «Введение в язык научных вычислений Pascal-SC». Компьютеры. 14: 53–69. Дои:10.1016/0898-1221(87)90181-7.
  15. ^ PI (1986-08-29). "Cadmus jetzt mit Kulisch-Arithmetik - Uni Karlsruhe gibt Pascal-Compiler nach München" [Cadmus теперь поставляется с арифметикой Кулиша - Университет Карлсруэ поставляет компилятор Pascal в Мюнхен]. Computerwoche (на немецком). Мюнхен / Карлсруэ, Германия: IDG Business Media GmbH. Архивировано из оригинал на 2016-05-30. Получено 2016-05-30.
  16. ^ "PASCAL-XSC: PASCAL для расширенных научных вычислений". Архивировано из оригинал на 2014-01-05.
  17. ^ «Программное обеспечение XSC». Архивировано из оригинал 1 ноября 2015 г.. Получено 11 августа 2015.
  18. ^ "Universitaet Wuppertal: Wissenschaftliches Rechnen / Softwaretechnologie". Архивировано из оригинал 6 ноября 2015 г.. Получено 11 августа 2015.
  19. ^ Бамбергер, Лотар; Давенпорт, Джеймс Х .; Фишер, Ганс-Кристоф; Кок, Ян; Шумахер, Гюнтер; Ульрих, Кристиан; Уоллис, Питер Дж. Л .; Зима, Дик Т .; Вольф фон Гуденберг, Юрген (1990). Уоллис, Питер Дж. Л. (ред.). Улучшение программирования с плавающей запятой (1-е изд.). Бат, Великобритания: John Wiley & Sons Ltd. ISBN  0-471-92437-7.
  20. ^ Мишель Жьен, «Операционная система SOL», на конференции Usenix Summer '83, Торонто, Онтарио, (июль 1983 г.), стр. 75-78.
  21. ^ cs.berkeley.edu В архиве 2015-02-07 в Wayback Machine
  22. ^ Паскаль ISO 7185: 1990 В архиве 2012-06-17 в Wayback Machine 6.10
  23. ^ Манделл, Стивен Л. (1987). Программирование на Паскале сегодня. Западная издательская компания. ISBN  978-0-314-33935-5.
  24. ^ а б Дж. Уэлш, В. Дж. Снирингер и К. А. Р. Хоар, «Двусмысленность и ненадежность в Паскале», Практика и опыт работы с программным обеспечением 7, стр. 685–696 (1977).
  25. ^ Паскаль, Нелл Дейл и Чип Уимс, «Висячие другие», п. 160–161 В архиве 2017-03-18 в Wayback Machine
  26. ^ "Паскаль-S: подмножество и его реализация", Н. Вирт в Паскале - язык и его реализация, Д.У. Бэррон, Вили, 1979.
  27. ^ ISO / IEC 7185: 1990 Паскаль (PDF). Архивировано из оригинал (PDF) 27 января 2016 г.. Получено 16 сентября 2014.
  28. ^ Вирт, Никлаус (июль 1973 г.). Язык программирования Паскаль (пересмотренный отчет). ETH Zürich. Дои:10.3929 / ethz-a-000814158.
  29. ^ Расширенный Паскаль: ISO / IEC 10206: 1990. Архивировано из оригинал на 2016-03-27. Получено 16 сентября 2014.
  30. ^ «Стандарты языков: Паскаль, Расширенный Паскаль, Фортан». Архивировано из оригинал на 2014-07-14. Получено 16 сентября 2014.
  31. ^ 770X3.160-1989 - Стандарт IEEE / ANSI для языка программирования Extended Pascal. 1990. Дои:10.1109 / IEEESTD.1990.101061. ISBN  978-0-7381-4247-0.
  32. ^ http://wiki.freepascal.org/Extended_Pascal
  33. ^ «Виртуальный Паскаль для OS / 2». Архивировано из оригинал 30 августа 2011 г.. Получено 3 апреля 2016.
  34. ^ WDSibyl. "Домашняя страница :: WDSibyl :: Среда визуальной разработки". www.wdsibyl.org. Архивировано из оригинал на 2020-02-12. Получено 2020-04-20.
  35. ^ "netlabs.org - Проект: Открытая Сибилла". Архивировано из оригинал 4 марта 2016 г.. Получено 3 апреля 2016.
  36. ^ Брайан В. Керниган (1981). «Почему Паскаль не мой любимый язык программирования». В архиве 2009-04-28 на Wayback Machine
  37. ^ О. Лекарм, П. Дежарден, "Дополнительные комментарии к языку программирования Паскаль", Acta Informatica 41975. С. 231–243.
  38. ^ «Расширенный Паскаль». В архиве 2015-10-18 на Wayback Machine.

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

  • Никлаус Вирт: Язык программирования Паскаль. 35–63, Acta Informatica, Volume 1, 1971.
  • К. А. Р. Хоар: «Заметки о структурировании данных». В O.-J. Даль, Э. В. Дейкстра и К. А. Р. Хоар, редакторы, Структурированное программирование, страницы 83–174. Академическая пресса, 1972.
  • К. А. Р. Хор, Никлаус Вирт: Аксиоматическое определение языка программирования Паскаль. 335–355, Acta Informatica, том 2, 1973.
  • Кэтлин Дженсен и Никлаус Вирт: PASCAL - Руководство пользователя и отчет. Springer-Verlag, 1974, 1985, 1991, ISBN  0-387-97649-3 и ISBN  3-540-97649-3.
  • Никлаус Вирт: Алгоритмы + Структуры данных = Программы. Прентис-Холл, 1975 г., ISBN  0-13-022418-9.
  • Никлаус Вирт: Оценка языка программирования PASCAL. 23–30 Уведомления ACM SIGPLAN, том 10, выпуск 6, июнь 1975 г.
  • Н. Вирт, А. И. Вассерман, изд: Дизайн языка программирования. Издательство IEEE Computer Society Press, 1980 г.
  • Д. В. Бэррон (ред.): Паскаль - язык и его реализация. Джон Вили 1981, ISBN  0-471-27835-1
  • Питер Грогоно: Программирование на Паскале, Пересмотренное издание, Эддисон-Уэсли, 1980 г.
  • Ричард С. Форсайт: Паскаль в работе и игре, Чепмен и Холл, 1982
  • Н. Вирт, М. Брой, изд., И Э. Денерт, изд.: Паскаль и его преемники в Пионеры программного обеспечения: вклад в разработку программного обеспечения. Springer-Verlag, 2002 г., ISBN  3-540-43081-4
  • Н. Вирт: Воспоминания о развитии Паскаля. Уведомления ACM SIGPLAN, том 28, № 3, март 1993 г.