Главная страница проекта ИНФОРМАТИКА-21

Наука Школе

50 лет Паскаля

Никлаус Вирт

Английский оригинал (pdf)

Перевод: Ф.В.Ткачев, 2020-02-06

Язык программирования Паскаль завоевал всемирное признание. В связи с его 50-летием я хотел бы сказать несколько слов о его создании, распространении и дальнейшем развитии.

Обстоятельства создания

В начале 1960-х гг. доминировали языки Фортран (Джон Бэкус, IBM) для научных, и Кобол (Джин Саммет, IBM и Министерство обороны США) для коммерческих приложений. Программы писались на бумаге, потом пробивались на перфокартах, а результатов нужно было ждать примерно день. Языки программирования получили признание как важнейшие инструменты и ускорители трудоёмкого процесса программирования.

В 1960 году международный комитет опубликовал язык Алгол 60. Это был первый случай, когда язык определялся с помощью кратких конструкций и точного формального синтаксиса. Уже через два года стало понятно, что нужны некоторые исправления и усовершенствования. Но главное, что нужно было сделать, это расширить область применимости языка, потому что Алгол 60 предназначался только для научных расчётов (численная математика). Чтобы решить эту проблему, под эгидой ИФИП была создана специальная рабочая группа (WG 2.1).

Группа состояла примерно из 40 членов, и практически у каждого было своё мнение о том, каким должен быть преемник Алгола. Было множество споров, иногда доходивших чуть ли не до драк. В начале 1964 года я стал членом группы, и вскоре меня попросили дать конкретные предложения. В комитете образовались две партии. Одна ставила целью водрузить ещё одну, вторую после Алгола 60, веху, то есть создать язык, основанный на радикально новых, непроверенных идеях и всеохватно гибкий. Другая партия ставила более скромную цель довести до ума уже известные концепты. Ведь время не ждало, и вскоре должен был появиться язык PL/1 от IBM. Однако мои предложения, вполне реалистичные, были с небольшим перевесом отвергнуты большинством, нуждавшимся в новой вехе.

Было недостаточно просто постулировать язык и определить его на бумаге. Нужно было ещё построить надёжный компилятор, а это обычно очень сложная программа. В этом отношении у больших промышленных компаний было преимущество перед нашей рабочей группой, которая опиралась на энтузиастов из университетской среды. Я покинул группу в 1966 году и вместе с несколькими аспирантами в Стэнфордском университете сосредоточился на построении компилятора для своего проекта. Результатом стал язык Algol W, который использовался на мейнфреймах фирмы IBM начиная с 1967 года. Язык оказался довольно успешным. Рабочая же группа установила свою веху -- язык Алгол 68, который быстро сгинул под собственной тяжестью, хотя некоторые его идеи вошли в другие языки.

Однако Алгол W не вполне меня удовлетворял. В нём было слишком много компромиссов, унаследованных от работы в комитете. По возвращении в Швейцарию я спроектировал язык в соответствии со своими собственными представлениями: Паскаль. Вместе с небольшой группой ассистентов мы написали руководство и спроектировали компилятор. Но затем случилась серьёзная неприятность. Мы хотели написать компилятор на самом Паскале, потом перевести его вручную на Фортран и, наконец, скомпилировать. Этот план провалился, потому что оказалось невозможно перевести программу, написанную на структурированном языке, на нестуктурированный. После этого урока, дорого нам стоившего, была сделана вторая, уже удачная попытка, где вместо Фортрана мы использовали местную разработку -- язык Scallop (автор M. Engeli).

Паскаль

Подобно своему предшественнику Алголу 60, Паскаль имел точное определение и состоял из небольшого числа понятных элементов. Его синтаксис был формально определен с помощью расширенной нотации Бэкуса-Наура (EBNF). Утверждения языка описывали присваивания значений переменным, а также условное и повторяющееся выполнение. Кроме того, имелись процедуры. Важным усовершенствованием были типы и структуры данных: массивы, записи, файлы (последовательности) и указатели. Элементарными типами данных были целые и вещественные числа, булевские значения и перечисления (констант). Для процедур было предусмотрено два вида параметров: передаваемые по значению и параметры-переменные. Процедуры были рекурсивными.
Самой существенной была идея сквозной типизации данных: каждая константа, переменная или функция имела фиксированный статический тип. Таким образом в программе возникала специфическая избыточность, благодаря которой компилятор мог проверять согласованность типов. Это помогало находить ошибки, причём ещё до выполнения программы.

Паскаль было легко выучить, а широкая применимость была его серьёзным преимуществом по сравнению с Алголом, Фортраном и Коболом. Система программирования на Паскале была эффективной, компактной и лёгкой в использовании. На язык сильно повлияла новая дисциплина структурного программирования, которую продвигали Эдсгер Дейкстра и др. с целью предотвращения назревавшего кризиса программного обеспечения (1968).

Уже в 1970 году Паскаль был опубликован и впервые полномасштабно использован в учебных курсах Швейцарской высшей технической школы Цюриха. Нам даже пришлось определить подмножество языка Pascal-S и построить компилятор меньшего размера, чтобы сэкономить ресурсы нашего большого компьютера CDC и ускорить для студентов цикл программирования. В те времена процессорное время и память были ещё дефицитным ресурсом.

Распространение Паскаля

Вскоре на Паскаль обратили внимание в ряде университетов, и стал расти интерес к его использованию в обучении. Пошли просьбы о помощи с реализацией компиляторов для других компьютеров. Мне пришла в голову идея придумать воображаемый компьютер, который было бы легко эмулировать на различных мейнфреймах и для которого мы в ETH написали бы компилятор Паскаля. Этот воображаемый компьютер должен был допускать быструю и несложную реализацию с использованием уже существующих инструментов (ассемблеров). Так возникла архитектура Pascal-P (P от portable/переносимый), и этот приём оказался весьма успешным. Первые клиенты были из Белфаста (проф. Хоар). Два ассистента привезли в Цюрих две тяжелые коробки с перфокартами. Пограничники их тщательно проверили на предмет наличия в дырках перфокарт секретов, подлежащих обложению таможенной пошлиной. -- Всё это было сделано без международных проектов, без бюрократии и без грантов. Сейчас такое невозможно.

Интересным следствием этих событий было возникновение групп пользователей, состоящих в основном из молодых энтузиастов, которые хотели пропагандировать и распространять Паскаль. Одна из таких групп, лидером которой был Энди Микел из Миннеаполиса, регулярно публиковала новостную рассылку Pascal Newsletter. Это движение сильно помогло быстрому распространению Паскаля.

Прошло несколько лет, и в 1975 году на рынке появились первые микрокомпьютеры. Это были маленькие компьютеры, доступные частным лицам, с процессором в одном чипе и с 8-битной шиной данных. Стало понятно, что Паскаль подходил для таких процессоров благодаря компактному компилятору, которому хватало небольшой памяти (64K). Группа под руководством Кена Баулса в Университете Сан Диего, а также Филипп Кан в компании Борланд, Санта Крус снабдили наш компилятор простой операционной средой, редактором текстов и средствами обнаружения ошибок и диагностики. Они продавали этот комплект (Турбо Паскаль) на дискетах за $50. В результате Паскаль быстро распространился, особенно в школах, и многим открыл путь в программирование и компьютерные науки. Наше руководство по Паскалю стало бестселлером.

Это распространение не было ограничено Америкой и Европой. Паскаль был с энтузиазмом принят в России и Китае. Я узнал об этом уже во время своих первых поездок в Китай (1982) и Россию (1990), где мне подарили экземпляры руководства, напечатанные незнакомыми буквами и символами.

Преемники Паскаля

Но время шло. Компьютеры становились всё быстрее, рос спрос на программы и на программистов. Программы больше не писались одиночками. Их теперь разрабатывали команды. Языки программирования должны были предложить конструкции для поддержки командной работы. Тогда разные программисты смогли бы писать разные части системы -- модули, причём делать это более или менее независимо друг от друга. Затем модули нужно было автоматически компоновать и загружать для выполнения. Уже в Фортране были для этого средства, но теперь компоновщик должен был ещё проверять согласованность типов данных компонуемых модулей. Сделать это было не просто!

Именно модули с контролем типов на стыках модулей были важнейшим добавлением в первом преемнике Паскаля -- языке Модула-2 (1979). Модула-2 возникла на основе Паскаля, испытав также влияние языка Mesa, разработанного для системного программирования на основе того же Паскаля в исследовательском центре Xerox PARC. Меза, однако, слишком сильно разрослась и нуждалась в "обрезке". Модула-2 также содержала средства системного программирования, чтобы можно было учесть специфику оборудования при работе с внешними устройствами и сетями. Это, однако, означало отказ от самой сути языков высокого уровня, то есть от независимости программ от конкретного "железа". К счастью, такие части программы теперь можно было аккуратно изолировать в особых "низкоуровневых" модулях.

Кроме того, Модула содержала конструкции для программирования параллельных процессов (или квази-параллельных потоков). "Параллельное программирование" было доминирующей темой в 1970-х гг. В целом Модула-2 стала слишком большой и сложной на мой вкус, а также для целей обучения программированию. Встала задача её доработки и упрощения.

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

Из Приветствия Н.Вирта (2001)

Из таких соображений вырос язык Оберон, и снова после годичного отпуска, проведённого в Xerox PARC. Вместо мейнфреймов теперь были мощные рабочие станции с дисплеями высокого разрешения, на которых работа шла в интерактивном режиме. Для таких станций в Xerox PARC были разработаны язык и интерактивная операционная система Cedar. И снова было очевидно, что здесь требуется решительное упрощение и консолидация. Поэтому в Швейцарской высшей технической школе Цюриха были написаны операционная система, компилятор и текстовый редактор для Оберона. Это сделали всего лишь два программиста, Вирт и Гуткнехт, в своё нерабочее время за 6 месяцев. Оберон был опубликован в 1988. На язык повлияла новая дисциплина объектно-ориентированного программирования. Однако не было введено никаких новых средств сверх расширения типов. Тем самым впервые был создан язык, который был заметно проще, но при этом мощнее, чем его предшественник. Наконец-то можно было сказать, что желанная цель достигнута.

Оберон продолжает использоваться достаточно широко и успешно. Однако прорыва, подобного тому, какой случился с Паскалем, не произошло. Громоздкие коммерческие системы слишком прочно укоренены и широко используются. Но можно утверждать, что на многие из языков вроде Java (Sun Microsystems) и C# (Microsoft) сильное влияние оказали Оберон или Паскаль.

Примерно в 1995 году в продаже появились электронные компоненты, допускающие динамическое перепрограммирование на уровне вентилей. Такие устройства (FPGA) могут быть сконфигурированы почти в любую цифровую схему. Граница между "железом" и "софтом" всё больше размывается. В 1996 году (и в 2017) я разработал обероноподобный язык Lola (logic language) для описания цифровых схем. Такие языки описания аппаратуры позволяют использовать формальный текст вместо чертежей. Это упрощает совместное проектирование оборудования и программ, что становится всё более важным для приложений.

 

 

Главная страница проекта ИНФОРМАТИКА-21

Наука Школе