В этой статье речь пойдет о Никлаусе Вирте, его проекте Lilith и язык Modula-2. За этот проект Вирт был удостоен премии Алана Тьюринга в 1984 году. Премия Алана Тьюринга — это аналог Нобелевской премии в области информатики, она была учреждена еще в 1966 году и ежегодно вручается Ассоциацией вычислительной техники за выдающиеся достижения в области вычислительных наук. С 2007 года премия Тьюринга спонсировалась Google совместно с Intel, cумма премии составляла 250 тысяч долларов. После того как Intel вышла из числа спонсоров, гигант Google повысил сумму выплаты в четыре раза до 1 млн долларов.



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

Никлаус Вирт — всемирно известный ученый, инженер, исследователь, доктор наук в области электротехники и компьютерных наук, профессор федерального технологического института ETH в Цюрихе, его мы знаем как создателя языков программирования Паскаль, Оберон. В 1934 году 15 февраля он родился в городке Винтертур (Швейцария) в семье учителя. В родительском доме была большая библиотека и маленький Вирт уже с детства интересовался книгами о железной дороге, турбинах и телеграфе. Его увлекала техника, он занимался авиамоделированием и не просто мечтал о полетах, а жил этой мечтой, мечтой покорить воздушное пространство. Еще, будучи в школе, Вирт «оборудовал» в школьном подвале секретную лабораторию, где занимался моделированием.


Швейцарский федеральный технологический институт в Цюрихе

Когда Вирту исполнилось 18 лет, он и еще два цюрихских авиамоделиста получили из Англии такую долгожданную радиоаппаратуру. Такая страсть к моделированию, позже разработке дистанционного управления, можно сказать, определила дальнейшую судьбу великого ума. В 1954 году Вирт поступил на факультет электроники Швейцарского федерального технологического института в Цюрихе, получил степень бакалавра по электротехнике. После этого Вирт учился в Лавальском Университете в Квебеке (Universite Laval, Canada), в 1960 году получил степень магистра. Был приглашен в университет Калифорнии в Беркли (США), где в будущем получил степень доктора наук в области электротехники и компьютерных наук, в 1963 году под руководством профессора Гарри Хаски защитил диссертацию, посвященную развитию Алгола средствами Лиспа. В середине 60 годов прошлого столетия IFIP (Международная федерация по обработке информации) сделала предложение некоторым специалистам в области информатики поучаствовать в разработке и создании нового языка программирования преемника Алгола-60.

Никлаус Вирт был среди тех приглашенных, он участвовал в создании проекта языка Алгол-W, но IFIP его проект отклонила на пользу проекта языка Алгол-68. До 1967 года Вирт проработал доцентом в Стэнфордском университете, в этом же году вернулся в родную Швейцарию в университет Цюриха. У него родилась идея на своей родине создать что-то подобное Стэнфорду. Став профессора компьютерных наук он не только «творил и создавал», но еще занимался организационной деятельностью. Университетский городок ETH по духу стал очень напоминать знаменитый Стэнфорд.

Дважды, с 1982 по 1984 год и с 1988 по 1990 год, Вирт был главой ETH факультета компьютерных наук, в 1990 году занял должность руководителя Института компьютерных систем (Institute of Computer Systems) при ETH.

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

«В моем понимании — язык программирования – это неправильно выбранный термин, который многих вводит в заблуждение. Термин „программная символика“ (program notation) был бы куда более подходящим».

Вот так началась дорога к созданию всем известного Паскаля. Сначала была разработана его первая версия, потом первый вариант компилятора, а в 1971 году и описание нового языка. Главной его особенностью была простота, он был построен на "… четких принципах структурного программирования, сформулированных Эдсгером Дейкстрой, на красивой математической базе, заложенной Энтони Хоаром, и на блестящем архитектурном воплощении идей Algol-W, реализованных Никлаусом Виртом".

Технологически он был интересен тем, что его компилятор был первой реализацией языков высокого уровня на самом себе. Через два года была разработана Pascal-машина (P-машина) со специальным P-кодом (байт-код). Метод интерпретации решил проблему переноса компилятора Паскаля на разные платформы. К слову, концепция Р-машины была использована Джеймсом Гослингом при построении языка и архитектуры Java.

Вирт о Паскале и Р-коде:
После того как стало известно о существовании Паскаля, несколько человек попросили нас помочь в его реализации на различных машинах, подчеркивая, что они намерены использовать его для обучения и что быстродействие для них не имеет первостепенного значения. После этого мы решили создать версию компилятора, которая генерировала бы код для машины нашей собственной конструкции. Позднее этот код стал известен как P-код… Pascal- P оказался исключительно удачным языком для распространения среди большого числа пользователей. И если бы у нас хватило мудрости предвидеть масштабы такого развития событий, то мы приложили бы больше усилий и тщательности при разработке и документировании P-кода.

Паскаль воспринимался многими как инструмент для обучения студентов программированию. Исходя из слов самого Вирта, стать обучающим «материалом» не было главной целью языка Паскаль, скорее это был "… разумный компромисс между тем, что было желательно, и тем, что было эффективно". Ведь нельзя успешно применять во время обучения язык, который не подходит для решения каких-либо практических задач.

Подойдем все же к ключевой теме данной статьи о поворотном моменте в судьбе Никлауса Вирта.

Вирту "… надоели и языки программирования, и необходимость писать хорошие компиляторы для имеющихся компьютеров. Было желание создать своими руками нечто новое, неизведанное".


Xerox Alto

Во время своего отпуска в Исследовательском центре фирмы Xerox в Пало-Альто в 1977 году, Вирт взялся за серьезный технический проект — создание языка структурного программирования, который предназначался бы для построения больших и сложных систем и его особенностью была бы конструкция для выражения единиц отдельно от компилированных системных компонентов, известных как модули. Это был профессорский отпуск, длительностью в один год, который предоставлялся «представителям данной профессии» раз в семилетку, поэтому время на подготовку к проекту было предостаточно. В исследовательском центре перед его взором предстала настоящая персональная станция с вертикальным монитором, мышью и собственным диском Xerox Alto. Такая готовая реализация послужила катализатором для реализации давно носимой в голове Вирта идеи о создании собственного компьютера, да еще и реализации на нем компилятора языка, куда более сложного, чем Паскаль. Создать целостную компьютерную систему для пользователя и для разработчика с персональной рабочей станцией под конкретный язык — вот что поглотило с новой силой Вирта.

Проект Lilith и язык Modula-2




Нужно было с нуля выстроить свою собственную компьютерную систему, в которую бы входила аппаратная часть, микрокод, компилятор, операционная система, различные сервисные программы. Нужно было создать компактный, универсальный язык, который смог бы решать задачи системного и прикладного программирования. В 1977 году вычислительные машины представляли собой огромные мэйнфреймы с системами разделения времени, а доступы к ним были с помощью терминалов и удаленных спутников. Мощная персональная рабочая станция — революционная идея того времени. Вирт понимал, что нет смысла разрабатывать программное обеспечение, которое ориентировано на старую вычислительную среду. Проблема была в том, что нужно было спроектировать и создать новую вычислительную среду, а именно, мощную персональной рабочую станцию. Так и началась работа над созданием рабочей станции Lilith.



Никлаус Вирт:

«Мне довелось вплотную познакомиться с разработанным в PARC языком Mesa, который имел такую конструкцию. Я чувствовал, что изящный потомок Паскаля мог бы при новой попытке следовать духу своего предка, если его создавать как крайне экономный язык. Его имя Modula-2 свидетельствует о доминировании в наших взглядах концепции модуля, и имя это было выбрано — возможно, к сожалению — не Pascal++».

Работы по созданию и разработке новой аппаратуры и нового ПО проводились одновременно, Вирт и его группа единомышленников работали над созданием нового языка программирования и его компилятора, создавалась базовая ОС, утилиты, первые приложения.

Язык Modula-2 должен был быть простым и универсальным, использоваться для всего программного обеспечения Lilith. Вирт использовал в нем средства разграничения переносимой (прикладной) и непереносимой (системной) частей языка, ввел псевдомодуль SYSTEM, в котором разместились все средства низкоуровневого программирования (включая и функции преобразования типов).

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

Как писал Вирт "… Модульность — решающее свойство, позволяющее сочетать противоречивые требования: обеспечение надежности абстракции высокого уровня через проверку на избыточность и наличие средств низкого уровня, обеспечивающих доступ к индивидуальным конструктивным особенностям конкретного компьютера. Это дает возможность программисту локализовать использование средств низкого уровня в нескольких небольших частях системы, защищаясь таким образом от непредвиденных осложнений".

Из языка Mesa было взято понятие модуля с явными списками импортируемых и экспортируемых идентификаторов, заимствована идея символьного файла (symbol file) как специальной информации для компилятора об объектах, экспортируемых соответствующим модулем. ОС для Lilith представляла собой единственную иерархию модулей, которая могла расширяться или сокращаться по требованию разработчика.
Модульность, опирающаяся на принцип экспорта/импорта программных элементов и на поддержку раздельной компиляции (separate compilation), стала доминантой нового языка. Средства поддержки мультипрограммирования в отличии от языка Modula в Modula-2 вынесли на уровень библиотек.

В 1979 году, на основе компилятора для PDP-11, начал функционировать первый Modula-компилятор. Изначально он состоял из 7 проходов, каждый из которых генерировал промежуточный код и записывал его на диск размером в 2Мбайт, позже количество проходов сократили до 5. На первом проходе лексический анализатор (scanner) порождал строку лексем и хештаблицу идентификаторов, второй проход (он же — парсер) осуществлял синтаксический анализ, третий проход решал задачу проверки типов, четвертый и пятый проходы осуществлялась кодогенерация.

Первые эксперименты проводились на легендарном компьютере PDP-11 (Digital) с 64 Кбайт памяти.


несколько мейнфреймов PDP-11 в корпусе tower, собранные в кластер

Никлаус Вирт совместно c Ричардом Ораном занимались разработкой первого макета Lilith. Ричард Оран — специалист в области электроники- хотел пройти расширенный курс ПО и защитить диссертацию, Вирт предложил ему заняться проектом Lilith. Работа над проектом настолько поглотила Орана, что он даже забыл о своей диссертации, все его мысли увлек P-код и Р-машина. Нужно было спроектировать архитектуру, которая наиболее оптимальным образом подходила бы для интерпретации M-кода (компактного кода), Modula-эквивалента соответствующего P-кода Паскаля. Компактность кода — фактор первостепенной важности для реализации сложных систем на маленьких рабочих станциях. Компактность была достигнута благодаря использованию разных длин адресов и операндов, 70% всех параметров инструкций имело значения в диапазоне от 0 до 15, операнд упаковывался в одном байте с кодом операции. Для промежуточных результатов был организован стек (реализован как 16-словная быстрая SRAM-память — небольшой набор быстрых биполярных регистров). Благодаря стеку и гибкой схеме адресации средняя длина инструкций, включая код операции и данные, составляла 10 разрядов. M-код не содержал номеров регистров, так как они покрывались схемой стека.
Для сравнения:

«Код для M-машины был в три-четыре раза меньше кода для PDP-11 и i8086, в два-три раза меньше кода для Motorola 68000 и в полтора-два раза меньше кода для National Semiconductor 32000».

Lilith представлял собой компьютер c 4 процессорными наборами Am2901, выполненными на плате, был ориентированный на работу с 16 разрядными словами, M-код был ориентирован на поток байтов. Размер памяти был 216 слов (128 Кб). Макет был построен из микросхем 4К*1 бит. Доступ к памяти в Lilith обеспечивался через 64-разрядную шину, для поддержки векторной графики, шрифтов, функций копирования блоков памяти, увеличения точности операций с плавающей запятой процессор Lilith использовал дополнительные микропрограммы.



Инновацией стал растровый дисплей с высоким разрешением. Изначально это был дисплей размером 768*592 пикселов, позже вертикальный дисплей размером 704*928 пикселов c частотой приблизительно 30 МГц. В качестве диска использовался Honeywell-Bull D-120 емкостью 10 Мбайт. Была разработана трехкнопочная мышь (увы, хорошего наглядного примера именно данной мышки не нашла).


так на то время выглядела трехкнопочная компьютерная мышь к Xerox Star


пример графического манипулятора «Колобок» от отечественных ПЭВМ типа ЕС-1840 / ЕС-1841

Одновременно Кристианом Якоби была реализована программная поддержка дисплея и графических окон. Это стало основой первых прикладных программ, например таких как текстовый редактор с раскрывающимися меню.

Modula-2, после воплощения в жизнь, стал эффективным языком. В конце 80 годов в штате Юта была выпущена пробная серия персональных рабочих станции Lilith (20 штук).

Позже в течение 1984 года был разработал новый компилятор для Modula-2.

"… Я чувствовал, что многие части компиляции могли бы выполняться проще и более эффективно, если бы тогда можно было использовать доступные ныне объемы памяти (те, в которых мы работали, по сегодняшним меркам крайне скромны). Память Lilith составляла 64 Кслов и ее высокая компактность кода позволяла реализовать однопроходный компилятор. Это подразумевает существенное сокращение операций с диском, которые поглощали наибольшую часть времени компиляции. Действительно, время компиляции самого компилятора сократилось с 4 минут до всего лишь 45 секунд. Новый компилятор сохранял, однако, разбиение на задачи. Но вместо того, чтобы каждая задача задавала свой проход — с последовательным вводом и выводом на диск — в нем был выделен специальный модуль с наиболее общим процедурным интерфейсом. Общие структуры данных, такие как таблица символов, были определены в отдельном модуле описания данных, который импортировался (почти) всеми другими модулями. Те модули представляли собой сканер, парсер, кодогенератор и обработчик символьных файлов. Когда завершается разработка нового компилятора, редко удается удержаться от искушения внести в язык некоторые изменения. Вот и в этом случае были внесены некоторые уточнения и изменения, которые нашли свое отражение в пересмотренном описании языка. Единственное важное изменение было связано с интерфейсными модулями (или даже точнее, с интерфейсной частью модуля). Это изменение постулировало, что все идентификаторы, описанные в интерфейсной части, экспортируются, что делает список экспорта уже ненужным".

Наличие сети, соединяющей все рабочие станции вызвало потребность в серверах (первый был принтерный сервер, подключенный к лазерному принтеру Canon LBP-10, второй — файловый сервер). Кстати, Lilith стал первым компьютером в Европе, который полностью использовал возможности лазерной печати. В целом таких компьютеров за все время было выпущено 60 штук. В 1990 году они были сняты с производства.

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

Вирт всегда стремился к гармонии, органичному единству аппаратной и программной составляющих, а его упорство, талант бесспорно внесли бесценный вклад в развитие вычислительных наук. Cчитается, что его язык Modula-2 был компактной и эффективной альтернативой языку Ada. Такие системы как OS/400 для IBM AS/400 тоже была реализована на Modula-2, корпорация Digital за основу для реализации своих внутренних проектов создали язык Modula-3 на основе того же Modula-2. Были созданы компиляторы для персональных компьютеров PC, Apple II, Lisa, Macintosh, SIRIUS/VICTOR 9000, SAGE II, Amiga, Atari ST, рабочих станций IBM RS/6000, Hewlett-Packard (MOCKA), Sun SPARC (Edinburgh), мэйнфреймов IBM (WATCOM), SGI и VAX (MOCKA), Digital Alpha (ModulaWare).

Виртом были созданы языки Oberon и Oberon-2 (вместе с профессором Х.Мессенбоком), операционная система Oberon.

Как уже упоминалось в начале статьи в 1984 году Никлаус Вирт был удостоен почетной премии Алана Тьюринга, в 1989 году — премии Max Petitpierre Prize, а также премии Science and Technology Prize от IBM Europe.



Что интересно, многие не знают, что Java и С# построены на идеях Вирта. Лучшие языки Вирта — Modula-2 и Оберон — почти не используются, хотя программы, написанные на них, все еще работают.

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

«Make it as simple as possible»- любимая фраза Никлауса Вирта, напоминает старую шутку, что совершенный компьютер должен иметь всего две команды: RPM и MAKEIT

RPM – Read Programmers Mind («прочти мысли программиста»).

MAKEIT – Make It («сделай это»).

Проекты Никлауса Вирта


Награды Никлауса Вирта



«Путь, пройденный Виртом в поиске приемлемого формализма системного программирования, начиная с NELIAC, через Алгол-60 к языкам Euler и Algol-W, Паскаль, Modula-2 и, в конечном итоге, до Lilith, полон впечатляющих открытий и удивительных результатов».



Благодаря дружбе и личным отношениям с нашим советским пионером программирования Андреем Петровичем Ершовым ( после его посещения в 1965 году США), Никлаус Вирт неоднократно приезжал в Академгородок в 1990, в 1996 и в 2005 годах. Это сыграло большую роль в популяризации в нашей стране языков и систем Вирта. В группе Поттосина из ИСИ СО РАН возникла идея повторить эксперимент Вирта и реализовать процессор с архитектурой ориентированной на языки высокого уровня (проект СОКРАТ).



Язык Modula-2 был принят Советом Министров СССР в качестве базового языка разработки программного обеспечения для бортовых систем. В 2005 году Вирт снова посетил Академгородок и привез в подарок свой компьютер Lilith, но не смог его презентовать, так как таможня задержала «ценный груз».

Комментарии (8)


  1. Caelwyn
    17.03.2016 19:38

    Но ведь в 1966 году не было корпорации Google, она не могла выплачивать 250 тысяч. Да и Intel основана в 1968, если верить википедии.


    1. TashaFridrih
      17.03.2016 20:58

      С 2007 года премия Тьюринга спонсировалась корпорациями Google и Intel. Лауреату вручали 250 тысяч долларов, эту сумму компании делили поровну.


  1. potan
    17.03.2016 23:21

    "защитил диссертацию, посвященную развитию Алгола средствами Лиспа." — на сколько я помню Вирт и его команда всегда пренебрежительно относились к метапрограммированию и функциональному программированию. Не известно какими именно средствами Лиспа расширялся Алгол?

    "Такие системы как OS/400 для IBM AS/400 тоже была реализована на Modula-2" — в книге по AS-400 утверждалось, что система писалась на C++ и для этого IBM тогда нанимала много C++-программистов. Модула-2 там не упоминалась.


  1. demin
    17.03.2016 23:50
    +1

    Все же он Никлаус, а не Николаус.


    1. TashaFridrih
      17.03.2016 23:53

      спасибо) исправила


  1. w0lf
    18.03.2016 10:06

    На фото https://habrastorage.org/files/541/fed/772/541fed7720bb4aad821690a5cffb159a.jpg с подписью "Трехкнопочная мышь" — графический манипулятор "Колобок" от отечественных ПЭВМ типа ЕС-1840 / ЕС-1841. Особого отношения к теме статьи он не имеет.


  1. Bedal
    18.03.2016 11:11

    «мейнфреймов PDP-11» :-D


  1. NickB53
    21.03.2016 12:22

    Манипулятор «Колобок» для ЕС1842 обладал эффектом памяти. За счет жесткости соединительного кабеля после перемещения старался возвратиться на прежнее место.