Меню сайта

ETH Pascal и P-код

Первый компилятор Паскаля (ETH Pascal) был написан в 1970 г. Первое официальное описание Паскаля с изложением синтаксиса и семантики было опубликовано Виртом в конце 1970 г. Новая версия языка вышла в свет в 1972 г. Тогда же Вирт и его английский коллега Чарльз Энтони Хоар (Charles Anthony Richard Hoare) выпустили аксиоматическое описание Паскаля.

«Наш первый компилятор Паскаля был реализован на семействе компьютеров CDC-6000 и написан на самом Паскале. Никакого PL6000 не потребовалось, и я рассматривал это как существенный шаг вперед», — вспоминает Вирт. Несуществующий язык PL6000 Вирт упомянул в связи с тем, что несколькими годами раньше для эффективной реализации компилятора языка Algol-W на компьютере IBM/360 ему понадобилось разработать низкоуровневый язык PL360. Теперь же в этом необходимости не было.

Почему был выбран именно компьютер фирмы Control Data Corporation? Ответ прост: к тому моменту в ETH активно использовались именно эти машины, а выбор языков на них был более чем скромным: ассемблер или Фортран. Конкурировать с Фортраном в эффективности на этой платформе было непросто, ведь набор команд CDC-6000 создавался с прицелом именно на реализацию Фортрана.

Написание компилятора в 1969 г. Вирт поручил одному своему студенту (Э. Мармье). В тот момент Мармье владел лишь Фортраном и писал компилятор на этом языке с последующей трансляцией его в Паскаль. Затем компилятор Паскаля должен был подвергнуться процессу раскрутки (переписан на самом Паскале). Как отмечает Вирт, выбор Фортрана был серьезной ошибкой. Он не мог адекватно выражать сложные структуры данных компилятора, что все больше запутывало программу.

Вторая попытка создать компилятор началась с того, что он сразу формулировался на самом Паскале (в соответствии с описанием 1970 г.). Синтаксический анализ нового однопроходного компилятора осуществлялся методом рекурсивного спуска. Теперь в команду разработчиков вошли У. Амман, Э. Мармье и Р. Шилд. После того как компилятор был написан на еще не существующем языке, Шилд был отправлен к себе домой на две недели, где все это время он вручную транслировал программу во вспомогательный низкоуровневый язык, доступный на CDC-6000. Итак, в середине 1970 г. компилятор ETH Pascal был готов.

Он был интересен не только тем, что стал одной из первых реализаций языков высокого уровня на самом себе, примерно на два года опередив компилятор Си. В ходе работ над ним в 1973 г. была придумана абстрактная Pascal-машина (P-машина), исполняющая специальный P-код. Чтобы решить проблему переноса компилятора Паскаля на разные платформы, Вирт решил воспользоваться испытанными временем методами интерпретации. Из наиболее известных решений, предшествовавших P-коду, можно назвать реализацию языка Snobol-4 (Р. Грисуолд, 1967), где в качестве кода абстрактной машины использовался язык SIL (System Implementation Language).

Как известно, введение виртуальной (абстрактной) машины Java преподносилось ее разработчиками из Sun Labs едва ли как не фундаментальное открытие в практике языков программирования. Один из учеников Вирта, Михаэль Франц, заметил по этому поводу следующее: «Переносимость Java основана на наличии виртуальной машины, позволяющей легко имитировать большое число архитектур. Идея виртуальной машины была очень популярна уже более двадцати лет назад, хотя впоследствии о ней забыли. Тогда речь шла о Pascal-P — созданной в ETH реализации Паскаля, которая сыграла решающую роль в распространении этого языка. Интересно, что виртуальные машины для Паскаля и Java весьма схожи по архитектуре: в обеих используются однобайтовые инструкции без адресов (операнды помещаются в стек)».

Идеи P-кода нашли применение не только в платформах Java и NET, не только в других языках и машинах баз данных, но и в реализации аппаратных средств. Например, для непосредственного исполнения P-кода в Western Digital в 1979 г. был разработан специальный набор WD9000 P-Engine. В Стэнфордском университете в 1980 г. был создан экспериментальный процессор POMP. Появившаяся в 1978 г. коммерческая реализация Паскаля — UCSD Pascal стала еще более известной, и многие забыли, где же впервые возникли P-код и P-машина. Вот что говорит об этом Вирт: «После того как стало известно о существовании Паскаля, несколько человек попросили нас помочь в его реализации на различных машинах, подчеркива
я, что они намерены использовать его для обучения и что быстродействие для них не имеет первостепенного значения. После этого мы решили создать версию компилятора, которая генерировала бы код для машины нашей собственной конструкции. Позднее этот код стал известен как P-код… Pascal-P оказался исключительно удачным языком для распространения среди большого числа пользователей. И если бы у нас хватило мудрости предвидеть масштабы такого развития событий, то мы приложили бы больше усилий и тщательности при разработке и документировании P-кода».

Для удобства использования в ETH создали P-инструментарий, в который вошли компилятор в P-код и его интерпретатор, причем все это в виде исходных текстов. Одним из получивших такой набор стал Университет Калифорнии в Сан-Диего.

Третья попытка реализации в ETH компилятора Паскаля, ставшего впоследствии известным под названием P2, была предпринята учеником Вирта Урсом Амманом- в 1974 г. она завершилась успехом. Благодаря высокому качеству Р2 получил широкое распространение в университетах и компаниях.

Категория: Разные статьи Pascal | Дата: 29.04.13

Меню раздела
Блок