12 лет назад 5 октября 2006 в 12:14 116

Никлаус Вирт

Как-то на просторах Сети я натолкнулся на забавную веб-страницу с несколько претенциозным названием “Почему у Microsoft ничего не получится с .NET”. Неизвестный автор довольно остроумно сгруппировал создателей наиболее известных языков программирования по одному необычному признаку. По мнению создателя классификации, успех того или иного языка программирования (C, “Паскаль”, “Перл” и пр.) непосредственно зависит от наличия растительности, бороды или же пышных усов, на лице его создателя.

Выходило, что .NET будущее ничего хорошего не сулит, поскольку автор используемого в .NET языка C# Андерс Хейльсберг (Anders Hejlsberg) не носит ни усов, ни бороды. Забавно. Но по крайней мере Андерс Хейльсберг является исключением из вышеизложенного правила. Ибо именно он, несмотря на его гладко выбритое лицо, является создателем не просто популярных, а суперпопулярных “программ для программистов” – “Турбо Паскаля” и Delphi (ведь для программистов тоже кто-то должен писать программы). Однако, строго говоря, Хейльсберг лишь создал удобную среду разработки и несколько изменил синтаксис, но сам язык “Паскаль”, лежащий в основе его пакетов, придумал не он.

Никлаус Вирт (Niklaus Wirth), отец языка “Паскаль”, появился на свет в одном из пригородов Цюриха в 1934 году. Родись он лет на тридцать раньше, ему, возможно, довелось бы лицезреть, как по берегам Цюрихского озера прогуливаются Владимир Ильич с Надеждой Константиновной. Но ему не повезло (а может, как раз и повезло), и никаких особо ярких впечатлений в детстве он не получил (смайл). Война шла где-то вдалеке, о разрушенных городах и миллионах погибших мальчик мог прочесть только в газетах (если, конечно, в столь юном возрасте у него вообще была охота читать обо всех этих ужасах). Словом, скукотища. Дабы как-то разнообразить стандартное счастливое детство в швейцарской глухомани, маленький Никлаус занялся авиамоделированием.

Хобби оказалось настолько серьезным, что Вирт даже построил более десятка моделей по собственным чертежам. Между прочим, позднее он занялся настоящими полетами и пронес это увлечение через всю свою жизнь. Даже в весьма почтенном возрасте создатель популярного языка программирования не отказывал себе в удовольствии полетать на реактивном истребителе (правда, вторым пилотом). В 1952 году Вирт заказал по почте английский радиокомплект для дистанционного управления моделью самолета. Однако, увы, комплект оказался не слишком надежным: видимо, все лучшие электротехнические кадры англичане бросили на создание “Энигмы” (см. Upgrade #24 (114) за июнь 2003 г.), и на детские игрушки сил не оставалось. Поэтому пришлось Вирту углубленно изучать электротехнику. Увлекшись предметом, в 1954 году он поступил в Швейцарский федеральный технологический институт (Eidgenoessische technische hochschule) на факультет электротехники.

Окончив учебное заведение, Вирт получил степень бакалавра в области электротехники. Теперь можно было приступать к созданию качественной радиоуправляемой модели самолета, но Вирт посчитал, что игровая индустрия не сильно пострадает, если он продолжит свое образование за границей. Приняв такое решение, он отбыл в Новый Свет (правда, не в США, а в Канаду) и поступил в Университет Квебека. В 1960 году Никлаус Вирт получил степень магистра, после чего переехал в США по приглашению Университета Беркли, где через три года получил звание доктора…

философии. В 1963 году неугомонный Вирт отправился в Стэнфордский университет, где устроился доцентом в тогда еще очень молодой отдел компьютерных наук.
Собственно, в Стэнфордский университет Вирта погнала работа над диссертацией, которую он начал писать еще в Беркли. Она была посвящена осмыслению языка “Алгол-60” и новых веяний в программировании. В результате Никлаус Вирт создал свой первый язык программирования. Молодой ученый назвал его в честь своего соотечественника – математика, физика и астронома Леонарда Эйлера (кстати, в середине XVIII века Эйлер был академиком Петербургской академии наук). В Стэнфордском университете Вирт реализовывал язык Euler на компьютере IBM 704 (наши постоянные читатели должны помнить, что эту машину очень любили создатели первых языков программирования). Чуть позже Вирт разработал улучшенный вариант Euler для компьютера Burroughs B5000.

Молодого творца языка Euler заметили люди из так называемой рабочей группы IFIP, которые были заняты тем, что на базе языка “Алгол-60” пытались создать новый универсальный язык программирования. Никлаус Вирт был принят в группу. Не дожидаясь окончания всех согласований, он разработал собственную усовершенствованную версию “Алгола-60”, которую назвал “Алгол-W”. А чуть позже, в январе 1968 года, Вирт закончил работу над созданием языка низкого уровня PL360, являвшегося, по сути, структурированным ассемблером для IBM 360, использовавшим некоторые конструкции “Алгола-60”.
После появления всей этой череды новых языков авторитет Никлауса Вирта заметно повысился. И ученый стал критиковать группу IFIP за то, что она проектирует какой-то чересчур громоздкий и запутанный язык. Как полагал Вирт, надежность и простота всегда идут рука об руку.

“На то, чтобы спроектировать экономную, простую и эффективную систему, требуется гораздо больше таланта, проницательности и времени, чем на то, чтобы построить систему сложную и громоздкую”, – заявил Вирт и покинул IFIP. С отверженным гением был солидарен Энтони Хоар (Antony Hoare), один из главных теоретиков надежного программирования и близкий друг Вирта. Позднее, в 1980 году, когда Хоару вручали премию Тьюринга, он сказал: “Почти все в программном обеспечении можно реализовать, продать и даже использовать, если проявить достаточную настойчивость… Но существует одно качество, которое нельзя купить: надежность. Цена надежности – погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить”. Уж не Гейтса ли он имел в виду? Впрочем, в 1980 году Хоар наверняка ничего не слышал о Билле Гейтсе. Стало быть, он пророчествовал.

В 1970 году Никлаус Вирт представил ошарашенному компьютерному миру совершенно новый алголоподобный язык. Свое детище Вирт назвал по имени французского математика и религиозного мистика XVII века Блеза Паскаля (Blaise Paskal). Язык, в котором Вирт реализовал принципы структурного программирования, был очень прост, но вместе с тем весьма эффективен. Благодаря сочетанию этих двух качеств он получил широкое распространение, и вскоре появился ряд его “диалектов”. Феноменальный успех “Паскаля” подчеркнуло еще и то обстоятельство, что продукт творчества группы IFIP – язык “Алгол-68” потерпел полное фиаско.

Авторитет Никлауса Вирта в области языкостроения стал непререкаемым. Или почти непререкаемым. Во всяком случае, никто, кроме Брайна Кернигана (Brian Kernighan), одного из популяризаторов языка C, не осмелился критиковать Вирта. А Керниган осмелился, написав работу “Почему “Паскаль” не является моим любимым языком программирования”. Видимо, полемизируя с Керниганом, Вирт много лет спустя сказал: “Паскаль” распространился в учебных заведениях и проник в индустрию. Это произошло, несмотря на мощную конкуренцию с языками PL/1, “Алгол-68” и “Ада”. Однако “Модула-2 ” и “Оберон”, наследники “Паскаля”, существенно его превосходившие, не получили должного внимания среди преподавателей и сами пали перед лицом самого недостойного из соперников – C. Самого недостойного, так как в этом языке были нарушены все открытые к тому времени принципы серьезного программирования”.
Ну, как бы там ни было, а Керниган – это голова.

Впрочем, и Вирт тоже голова, и я бы ему палец в рот не положил. Кстати, Вирт доказал, что ему под силу не только разрабатывать новые языки программирования, но и создавать принципиально новые компьютеры. В период с 1978 по 1980 год в Швейцарском федеральном технологическом институте, куда Вирт вернулся еще в конце 60-х, он разрабатывает одну из первых компьютерных станций с графическим дисплеем 768 x 592 пикселя и мышью. Для своего компьютера он выбрал несколько странное название – “Лилит”. Лилит в иудейской традиции – злой демон в женском обличии. Она овладевает мужчинами против их воли. Кстати, согласно одной из апокрифических легенд, Лилит под именем Лилу (помните такого персонажа в фильме “Пятый элемент”?) была женой Адама до сотворения Евы. Наверное, Вирт имел в виду то, что его компьютер овладеет всеми мужчинами против их воли (таким образом, очевидно, Вирт накликал компьютерную зависимость).

“Лилит” (компьютер, а не демон) имел 64 кбайт оперативной памяти и процессор с частотой
7 МГц. Для 1980 года это было ой как неплохо. Все программное обеспечение для данной машины, включая оригинальную операционную систему, Вирт – при поддержке коллег – написал на языке “Модула-2”, который сам и разработал незадолго до этого. “Модула-2” был обновленной версией языка “Модула”, а тот, в свою очередь, являлся прямым потомком “Паскаля”.
Стандартный “Паскаль” образца 1970 года и его “диалекты” не позволяли конструировать сложные проекты из отдельных модулей, то есть тех строительных блоков, из которых собирается программа. Поэтому отсутствие возможности разрабатывать такие блоки в стандартном “Паскале” было очень серьезным упущением. Собственно, именно это критиковал Керниган в своей статье. Правда, он почему-то не заметил, что на момент написания его статьи уже существовал язык “Модула-2”, в котором все ограничения “Паскаля” были устранены. Кстати, Андерс Хейльсберг, реализуя свой “Турбо Паскаль”, в конечном счете пришел к идее модуля.

“Модула-2” была очень хорошим языком, и для популяризации своего детища Вирт даже выпустил очередную редакцию своего супербестселлер “Алгоритмы + структуры данных = программы”, в котором все примеры изначально приводились на “Паскале”. Очевидно, он рассчитывал на то, что успех книги (а ни один уважающий себя программист просто не имеет права ее игнорировать) поможет распространению “Модулы-2”. Однако этого не произошло, и “Модула-2”, по словам самого Вирта, пала в конкурентной борьбе с языком C (вернее, с С++). Почему? Попробую объяснить.
Программист в своей ежедневной практике имеет дело с огромными объемами тривиального кода. Поэтому он крайне заинтересован в том, чтобы сделать длину оператора минимальной. Язык C предоставляет ему широкий спектр конструкций, позволяющих сокращать запись типовых операторов. С точки зрения надежности это плохо. С точки зрения программирования – хорошо.

А язык “Модула-2”, напротив, ради повышения надежности кода заставлял программиста описывать все без каких-либо сокращений. Например, при подключении модуля программист должен был самым тщательным образом перечислить в секции EXPORT идентификаторы всех переменных и функций, которые он хотел из этого модуля получить. Язык “Модула-2” был очень надежным и очень простым (его описание занимает всего пять небольших страничек текста!), но Вирт не учел того, что в потогонной системе, какой стала со временем индустрия программирования, специалист вынужден приносить надежность в жертву скорости. Поэтому язык С (и особенно С++) положил “Модулу-2” на обе лопатки.

В 1988 году Никлаус Вирт создал проект “Оберон”, в рамках которого велась работа над созданием языка и операционной системы (коммерческая версия языка “Оберон” называется “Компонентный Паскаль”). Видимо, к тому времени Вирт увлекся сказками и легендами: Оберон – король, который вместе с королевой Титанией правил разными эльфами и прочими гномами (Шекспир отводит ему заметное место в своем “Сне в летнюю ночь”). Название проекта оказалось символичным, ибо “Оберон” оплодотворил индустрию целой россыпью идей. Из наиболее востребованных стоит отметить идеологию апплета, о которой в феврале 1994 года написал в своей диссертации сотрудник Вирта Михаэль Франц (Michael Franz). За концепцию апплета – программы, независимой от конкретной архитектуры, – ухватилась компания Sun при разработке своего языка Java (очень похожего на С++). Сегодня каждый владелец мобильного телефона с поддержкой Java может использовать апплеты (в мобильной терминологии называемые мидлетами).

В 2001 году Никлаус Вирт написал приветствие российским студентам и преподавателям в связи с введением курсов по изучению “Оберона” в МГУ: “Искренне надеюсь, что “Оберон” поможет в обучении высококлассных программистов и ученых в России и что его оценят в стране, где всегда придавали большое значение основательному образованию”.
Увы, в столь короткой статье сложно хоть сколько-нибудь подробно рассказать о таком человеке, как Никлаус Вирт, без которого современная отрасль разработки ПО выглядела бы совершенно по-другому. Но надеюсь, что и эта небольшая заметка позволит составить некоторое представление об этой незаурядной личности.

Дмитрий Румянцев

Никто не прокомментировал материал. Есть мысли?