Язык программирования Pascal - универсальный язык программирования высокого уровня, разработанный Никлаусом Виртом (Niklaus K. Wirth), профессором Швейцарского федерального технологического института ETH (Eidgenoessische Technische Hochschule), как язык обучения программированию.
Датой рождения языка считается ноябрь 1970 г., когда вышла первая официальная публикация описания языка с изложением синтаксиса и семантики - технический отчет Швейцарского федерального технологического института ETH.
Написание компилятора в 1969 г. Вирт поручил своему студенту Э. Мармье. В тот момент Мармье владел лишь языком Fortran и писал компилятор на этом языке с последующей трансляцией его в Pascal. Затем компилятор Pascal должен был подвергнуться процессу раскрутки (переписан на самом Pascal). Выбор языка Fortran был серьезной ошибкой, т.к. он не мог адекватно отражать сложные структуры данных компилятора, поэтому первая попытка оказалась неудачной.
Вторая попытка создать компилятор началась с того, что он сразу формулировался на самом Pascal (в соответствии с описанием 1970 г.). Синтаксический анализ нового однопроходного компилятора осуществлялся методом рекурсивного спуска. Теперь в команду разработчиков вошли У. Амман, Э. Мармье и Р. Шилд. После того как компилятор был написан на еще не существующем языке, Шилд вручную транслировал программу во вспомогательный низкоуровневый язык, доступный на CDC-6000. В середине 1970г. компилятор ETH Pascal был готов.
Новая версия языка вышла в свет в 1972 г. Тогда же Вирт и его английский коллега Чарльз Энтони Хоар (Charles Anthony Richard Hoare) выпустили аксиоматическое описание Pascal. Он был интересен не только тем, что стал одной из первых реализаций языков высокого уровня на самом себе, примерно на два года опередив компилятор языка С. В ходе работ над ним в 1973 г. была придумана абстрактная Pascal-машина (P-машина), исполняющая специальный P-код. Чтобы решить проблему переноса компилятора Pascal на разные платформы, Вирт решил воспользоваться испытанными временем методами интерпретации.
Третья попытка реализации в ETH компилятора Pascal, ставшего впоследствии известным под названием P2, была предпринята учеником Вирта Урсом Амманом; в 1974 г. она завершилась успехом. Благодаря высокому качеству, Р2 получил широкое распространение в университетах и компаниях.
Впоследствии идеи P-кода нашли применение не только в платформах Java и .NET, других языках и машинах баз данных, но и в реализации аппаратных средств.
В 1975 г. профессор Кеннет Боулес, работавший в Университете Калифорнии в Сан-Диего (University of California at San Diego - UCSD), получил из Цюриха P-инструментарий, который вместе с компилятором P2 был положен в основу UCSD Pascal. В Институте изучения информации калифорнийского университета Боулес вместе со Стефеном Франклином и Альфредом Борком занялись созданием системы программирования и операционной системы на базе Pascal для микрокомпьютерных архитектур.
В UCSD Pascal были внесены изменения как на уровне языка (в плане расширения и использования низкоуровневых вставок кода, в том числе и P-кода), так и на уровне P-машины. Она была переделана. Для эффективности использования Pascal на разных компьютерах была включена дополнительная возможность генерирования машинного кода для нужной архитектуры сразу после получения P-кода. Весьма значительным усовершенствованием языка в UCSD Pascal стало введение unit-блоков, необходимых для поддержки раздельной компиляции. Впоследствии они были унаследованы в языке Turbo Pascal. За три года команда Боулеса разработала законченную систему, в которую вошли текстовый редактор, файловая система, а также отладчик. По сравнению с тем режимом работы, к которому привыкли пользователи больших машин (ввод программ и данных с перфолент и перфокарт, а также упрощенный терминальный ввод-вывод), это был огромный шаг вперед.
Появился прообраз того, что сегодня называют IDE-средой (интегрированной средой разработки). UCSD Pascal стала прародительницей системы Turbo Pascal, добившейся небывалой популярности. Реализация UCSD Pascal означала серьезный прорыв, сфера применения языка значительно расширилась.
Разработкой UCSD Pascal, сумевшей стать законченным коммерческим продуктом, заинтересовались многие компании. Причем их внимание привлекла и перспективная P-машина, на которую UCSD продал немало лицензий.
Огромную роль в массовом распространении Pascal сыграла компания Borland International. На основе идей UCSD Pascal она сумела создать знаменитую Turbo-среду разработки. В 1983г. Borland выкупила лицензию на компилятор датчанина Андерса Хейльсберга и приняла автора на работу. В ноябре того же года на рынке появился Turbo Pascal 1.0 для CP/M и компьютеров x86. Это был значительный шаг вперед в облегчении процесса программирования. Удобство визуальных средств в сочетании с тесной интеграцией инструментария стали для сотен тысяч программистов большим подспорьем. Правда, язык в исполнении Borland отдаленно напоминает то, что когда-то носило имя Pascal. В результате не язык стал определять реализацию, а наоборот. Язык видоизменялся едва ли не с каждой версией среды разработки. В версии 3.0 появилась встроенная графика, в версии 4.0 - модули, в версии 5.5 - средства объектно-ориентированного программирования. Также были добавлены средства непосредственного доступа к портам и ячейкам памяти и возможность включать в текст программы фрагменты, написанные на ассемблере. Начиная с версии 7.0 Turbo Pascal был переименован в Borland Pascal.
Следующим этапом развития стало появление в 1993г. интегрированной среды разработки Borland Delphi, в которой язык был в очередной раз сильно переработан и получил название Object Pascal. Позднее он был переименован в язык Delphi. Современные версии Borland Delphi являются мощным средством разработки программного обеспечения для решения широкого спектра задач от приложений баз данных до Web-сервисов и распределенных клиент-серверных архитектур.
Среди других компиляторов Pascal, достигших определенной степени "зрелости", - TMT Pascal и Free Pascal Compiler (FPC). Оба компилятора в определенной степени напоминают диалект Turbo/Borland Pascal, хотя и есть некоторые различия. TMT Pascal дополнился С-подобными операциями: "+:=", "-:=", перегружаемыми операторами и множеством других усовершенствований. В Free Pascal появились перегружаемые функции.
От языка Pascal принято отсчитывать эпоху структурного программирования, которое задавало нисходящий принцип разработки (пошаговая декомпозиция), предусматривало структурирование логики и данных, за счет простоты и математической основы повышало надежность программного обеспечения. Все это органично вписывалось в возможности лаконичного Pascal.
Главной инновацией языка Pascal было введение вариативности структур и типов данных. Pascal ввел дополнительные базовые типы и дал возможность определять новые базовые типы (перечисление, диапазоны), а также новые виды структурирования: запись, множество, файл (последовательность). Наиболее важной стала, конечно, рекурсивность структурных описаний и вытекающая из нее возможность осуществлять комбинирование и вложение структур.
Среди достоинств языка были следующие: механизм рекурсии, тип "перечисление", тип "запись", булевы переменные. Из серьезных недостатков - отсутствие поддержки массивов с открытыми границами, неудобство работы со строками, отсутствие статических переменных (по отношению к процедурам и функциям), настоятельная потребность в раздельной компиляции, ограниченные средства ввода-вывода.
Несмотря на указанные недостатки Pascal породил немало своих последователей и оказал глубокое воздействие на проектирование языков программирования.
Наиболее важные реализации языка Pascal
Система |
Год |
Руководитель |
География |
Организация |
ETH Pascal |
1970 |
Никлаус Вирт |
Европа |
ETH |
UCSD Pascal |
1978 |
Кеннет Боулес |
Америка |
UCSD |
Turbo Pascal |
1983 |
Андерс Хейльсберг |
Америка |
Borland Int. |
Borland Delphi |
1993 |
Андерс Хейльсберг |
Америка |
Borland Int. |
Стандарты языка Pascal
В 1978 г. для обсуждения расширения Паскаля на конференции в Сан-Диего, проходившей под руководством Кеннета Боулеса, встретились представители промышленных кругов. С этого момента началась стандартизация языка.
В 1982 г. Международная организация по стандартизации (ISO) выпустила стандарт ISO 7185:1983. В это же время вышел американский стандарт ANSI/IEEE 770X3.97:1983. Принято выделять три принципиально разных стандарта: Unextended Pascal (исходный), Extended Pascal (расширенный) и Object-Oriented Extensions to Pascal (объектно-ориентированный). В 1989 г. стандарт ISO 7185:1983 был подкорректирован, после чего надобность в самостоятельном ANSI-стандарте отпала и он был заменен ссылкой на ISO 7185:1990. Одним из главных отличий Extended Pascal стало введение модульности, необходимой для раздельной компиляции. Extended Pascal закреплен в международном стандарте ISO/IEC 10206 (1991) и американском ANSI/IEEE 770X3.160:1989. В 1993г. объектно-ориентированные расширения по отношению к Extended Pascal были сформулированы в техническом отчете ANSI/X3-TR-13:1994. Что касается самой распространенной реализации языка - Turbo Pascal, а также Object Pascal (Delphi), то ни одному из этих стандартов они не соответствуют. В свою очередь, они неявно сами задают соглашения, которым пытаются следовать некоторые реализации.