Обзоры
Oberon – «космос» Никласа Вирта
0

Oberon – «космос» Никласа Вирта

     В полумиллионе километров от затерянной в глубине "близкого" космоса гигантской планеты Уран со скоростью чуть больше 3 км/с совершает свое неостановимое движение маленькая (почти в 12 раз меньше нашей Земли), незаметная планета. Открытая в 1787 г. английским астрономом сэром Вильямом Гершелем (William Herschel), она получила имя короля эльфов из шекспировcкой пьесы "Сон в летнюю ночь". Звучное и загадочное имя — Оберон.

     Через двести лет, в 1987 г., в мире компьютинга произошло открытие одноименного абсолютно нового объекта "малой величины" космического масштаба — в Швейцарии увидела свет первая работающая версия системы Oberon, созданная гением Никласа Вирта (Niklaus Wirth) и Юрга Гуткнехта (Ju3rg Gutknecht). Миниатюрной, изящной и концептуально совершенной Oberon досталась участь "маленького спутника", но… На примерах реализации этой системы подготовлены десятки тысяч настоящих профессионалов высочайшего класса в области проектирования ОС и информационных систем, многие решения, которые можно назвать "изюминкой Oberon", легли в основу систем управления реального времени, масштабных программных комплексов анализа данных (речь идет о программных комплексах сбора/обработки многогигабайтовых экспериментальных информационных массивов, формируемых ускорителями частиц), концепции пользовательского интерфейса Oberon оказали существенное влияние на разработчиков новых перспективных ОС (в первую очередь, Plan9).
     

     Никлас Вирт

     Никлас Вирт родился 15 февраля 1934 г. в небольшом швейцарском городе Винтертюре (Winterthur). В 1958 г. молодой Вирт получил степень бакалавра в Федеральном технологическом институте Цюриха (ETH), которому остался верен по сей день. На непродолжительный срок он покинул Швейцарию, поступив в Университет Лаваль (Laval) в Квебеке (Канада) — здесь в 1960 г. будущий автор компьютерных инноваций получил степень магистра.

     Канада стала первой страной, которая предоставила Вирту доступ к "настоящим" компьютерам — сначала к практически никогда не работающей машине Alvac IIIE, возможности программирования которой ограничивались крайне низкой надежностью аппаратной части, затем — к Bendix G-15. Об этой машине стоит сказать несколько слов: по воспоминаниям Вирта, умопомрачительная процедура программирования этого "чуда техники" и натолкнула его на мысль о необходимости существенного усовершенствования инструментальных средств, столь необходимых всем, выбравшим зарождающуюся тогда "профессию будущего", — программистам. Феноменальная особенность Bendix G-15 — зависимость скорости работы компьютера от физического размещения кодов машинных команд на магнитном барабане — заставляла программиста того времени заботиться не столько о логике разрабатываемой программы, сколько о решении геометрической головоломки — ведь из-за "неудачного" размещения команд Bendix работала чуть ли не в 100 раз медленнее.

     Затем в жизни Вирта наступил "первый американский период" — знаменитый Университет Беркли (UCB, Калифорния), в котором в 1963 г. он получил докторскую степень. Здесь уместно вспомнить, что с UCB связан целый ряд имен истинных "виртуозов от компьютинга" (см. "Компьютерное Обозрение", # 20, 1999).

     Во время "второго американского периода" (до 1967 г.) Вирт занимает должность профессора на свежеобразованной кафедре компьютерной науки (computer science) Стэнфордского университета. В Стэнфорде Вирт возглавлял проект по разработке компилятора с языка NELIAC (навсегда забытый диалект Алгол-68) для компьютера IBM 704. NELIAC выявил очень любопытную деталь — вероятнее всего, идеи, предшествовавшие появлению Unix несколькими годами позже, уже буквально "витали в воздухе" — по крайней мере, NELIAC был написан в соответствии с аналогичной концепцией: много маленьких и понятных независимых частей, соединенных высокоуровневыми командами в единое целое.

     "Третий американский период" в жизни Вирта связан с его квартальной контрактной работой в знаменитом исследовательском центре Xerox в Palo Alto. Здесь Вирт ознакомился с передовыми разработками американских коллег в области интерактивных графических интерфейсов и с прообразами современных multimedia-систем.

      С 1967 г. по сегодняшний день вся творческая биография Н. Вирта неразрывно связана с ETH.
     

     Астрономическая аналогия

     Если в начале статьи автор "повесил ружье на стену" — упомянул о планете Оберон, то в соответствии с канонами жанра оно неизбежно должно выстрелить… Итак, попытаемся представить себе ситуацию с языками программирования в середине 60-х годов в виде планетной системы звезды под названием "Идеальный Язык Программирования" (ИЯП).

     В глубоком космосе, далеко от ИЯП, носилась в темноте гигантская масса планеты Algol, аналогичной Урану в нашей Солнечной системе. Громадное количество астероидов — языков с давно забытыми именами — пролетали из ниоткуда в никуда, оставляя лишь маленькие заметки в исторической астрономии, извините — в истории компьютинга.

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

     В 1968 г. новая "планета" — Pascal — заняла свое особое место в виртуальной планетной системе ИЯП. Место настолько особое, что аналогии в нашей Солнечной системе ей найти трудно — новый спутник Алгола (Pascal — в целом весьма алголоподобный язык) очень удачно разместился в "виртуальном языковом космосе" по отношению к ИЯП. Больше того, так удачно, что на планете Pascal появились все предпосылки к возникновению жизни. И жизнь не заставила себя ждать — в 1971 г. Вирт опубликовал знаменитую книгу "Program Development by Step-wise Refinement" ("Проектирование программ путем пошагового уточнения"), в которой впервые сформулировал термин "структурное программирование". Язык Pascal плучил мощное подкрепление — методологию проектирования программ — и стал чрезвычайно популярным.

     Однако ориентация Pascal на нужды, в первую очередь, системы образования в условиях быстрого роста возможностей ЭВМ и снижения их стоимости привела к тому, что к середине 70-х годов "чистый" Pascal превратился в замечательную развивающую игрушку. Жизнь в нашей придуманной "виртуальной планетной системе" стала массово перемещаться на располагающуюся значительно дальше от ИЯП планету с коротким названием "C" — здесь было больше возможностей для развития, скорее всего из-за жутких условий (шутка). Одной из важных причин охлаждения интереса к "чистому" Pascal стало отсутствие операционной системы, концептуально соответствующей языку — несомненно, что C быстро и надолго завоевал признание именно благодаря ОС Unix, которая написана на C и в которой этот язык — основной.

     К концу 70-х Вирт создает новый язык — Modula-2, — лишенный погрешностей Pascal и обладающий всеми необходимыми для системного программиста возможностями. Modula-2 как спутник Pascal еще больше приблизился к ИЯП и завоевал сердца очень многих программистов во всем мире. Единственный недостаток Modula-2 заключается не в особенностях языка (по сравнению, например, с C, Modula куда более совершенный), а в "запоздалом рождении" — к 1979 г. ОС Unix и язык C, естественно, уже были в пике популярности.

     В целом, Modula-2 можно считать почти совершенным языком, но совершенству, как известно, нет предела. Тем более что 80-е годы ознаменовались буквально повальной сменой ориентации программистами — методология "структурного программирования", несмотря на огромные достигнутые успехи, уступила место "объектно-ориентированному проектированию". Вирт начинает разрабатывать новый язык — совершенный в своей простоте и соединяющий в себе лучшие элементы классической ("структурной") и модернистской ("объектной") концепций.

     В 1987 г. новая планета Oberon, спутник одновременно Pascal и Modula, разместилась на самой близкой от ИЯП орбите.

     Швейцарские компьютеры

     Вы о таких слышали? Нет? А жаль… Очень жаль, что о них мало кто слышал. Разработанные под руководством Вирта в ETH рабочие станции Lilith и Ceres можно смело назвать "упущенным шансом человечества" — в некотором роде эти машины, крупицы информации о которых приходится часами "выуживать" из Internet, представляют собой образчик совершенства. Вирт, понимая слабость модели "независимый от платформы язык программирования" и отталкиваясь от успеха Unix, создал предельно простые, эффективные и исключительно удобные компьютеры, соответствующие модели "одна ЭВМ — один язык программирования".

     Исторически первая рабочая станция Lilith — пожалуй, самый интересный образец "швейцарского компьютеростроения". Микропрограммируемый 16-битовый процессор, оптимизированный для выполнения программ на языке Modula-2 и представляющий собой стековую машину (кто там говорит о "революционной" новизне Java-процессоров?), операционная система MeDOS (естественно, написанная на Modula-2) — мультизадачная, с графическим пользовательским интерфейсом, растровым дисплеем высокого разрешения (704 x 928) и трехкнопочной мышкой — с таким "оснащением" Lilith появилась на свет в невообразимо далеком 1980 г. И совершенно не страшно, что емкость оперативной памяти Lilith (128 KB) кажется по сегодняшним меркам просто смехотворной: программы для стекового микропрограммного процессора Lilith в 2,5 и 3,5 раза компактнее по сравнению с Motorola 68000 и Intel 8086 соответственно.

     Преемница Lilith — Ceres — представляла собой специализированную 32-битовую рабочую станцию для Oberon. Oberon сравнительно быстро "перерос" из языка программирования в очень интересную однопользовательскую ОС для рабочей станции, и в ETH на базе популярного в то время микропроцессора NS32000 (National Semiconductor) создали аппаратную платформу, соответствующую минималистской концепции Oberon.
     

     "Чужие" с Оберона

     Сегодняшняя система Oberon 3 представляет собой концептуально целостное объединение высокомобильной однопользовательской операционной системы, оконной графической подсистемы, компилятора с объектно-ориентированного языка программирования Oberon-2 и большого числа пользовательских приложений и утилит. Графический интерфейс Oberon существенно отличается от более привычных и традиционных моделей, что может навсегда отбить охоту у начинающего освоение этой замечательной системы. И все отличия связаны не с инновациями в области интерфейсных примитивов или оформительскими "изысками", а с чуть ли не бесконечной пропастью, отделяющей основные концепции Oberon от признанных миром коммерческого ПО.

     И сам язык Oberon-2, и операционная система Oberon-3 основаны на принципиально "другой" объектной модели — общепринятая "класс-ориентированная" объектная ориентация в Oberon отсутствует. "Класс-ориентированность" означает некоторое подобие так называемой статичности — все абстрактные типы данных, формируемые наследованием, например, от базового класса, существуют только "на бумаге", или, если хотите, — в файле с исходными текстами программы. Есть, конечно, некоторые исключения из этого "правила" (например, Smalltalk или совершенно "чужой" Forth), но и они не менее уникальны, обычные же "объектно-ориентированные" системы, созданные на C++ или на компонентном Pascal (более известном как TurboPascal от Borland) и Java, абсолютно статичны — на этапе выполнения программы пользователь не может изменить существующую "картину мира" или иерархию классов. Причина такой особенности "класс-ориентированных" объектных систем заключается в том, что класс представляет собой только абстрактное описание, безвозвратно теряющееся после "перемалывания" исходных текстов компилятором.

     В Oberon принята совершенно отличная модель, которую можно назвать "ориентированной на сущности", или, извините за тавтологию, "ориентированной на объекты". При таком подходе новые типы данных (или объекты) могут создаваться во время выполнения программы методами, например, наследования от уже имеющихся в локальной системе (компьютере) или на других компьютерах. Сами объекты-сущности представляют собой модули Oberon — завершенные программные фрагменты с определенными соответствующим образом программными интерфейсами.

     Это, на первый взгляд, незначительное с пользовательской точки зрения отличие придает Oberon-системе просто удивительные свойства — сама ОС, все технологические средства и прикладные программы — это множество "сущностей-объектов", интенсивно использующих друг друга. За достижение подобной функциональности в традиционных ОС (например, Unix или MS Windows) приходится расплачиваться необходимостью эксплуатации всяческих компонентных систем — CORBA, DCOM, ActiveX, которые либо слишком сложны (что в прямом смысле слова "тормозит" разработки прикладного ПО), либо — достаточно ненадежны (по очевидной причине сложности).

     Искушенный в программировании специалист найдет в Oberon массу замечательных особенностей. К ним следует отнести и неотъемлемый, интегрированный в ядро ОС "сборщик мусора" (мечта любого программиста — программная подсистема, автоматически следящая за эффективным использованием выделяемой памяти), и механизм формирования псевдокода (называемого в Oberon "плоским", или slim-кодом), позволяющего представлять исполняемую программу в независящем от конкретной платформы виде (аналогично байт-кодам Java), и динамический загрузчик, превращающий с фантастической скоростью slim-коды в команды процессора компьютера, загружающий на выполнение только необходимые в данный момент модули-объекты, и, наконец, отсутствие такого, казалось бы, незаменимого элемента ОС, как редактор связей (linker) — модули-объекты в Oberon самодостаточны, и линковка (жаргонное название процедуры связывания имен) здесь абсолютно не нужна. Инструментальные средства, под стать всей системе, также абсолютно уникальны — чего стоит только исключительно удобный (пусть и совершенно необычно выглядящий) модуль "слоистого" (slicing) анализа отлаживаемых программ, автоматически выявляющий, например при ошибке в значении переменной, все выражения, которые могут к ней привести. Программы slicing-анализа есть и для других платформ, но все они коммерческие и астрономически дорогие.

     Развитая библиотека классов-модулей отвечает требованиям самых взыскательных программистов, а применяемая для разработки интерактивных графических приложений реализация неблагозвучно названной (в русской интерпретации) концепции "гэджетов" (gadgets) по удобству программирования оставляет далеко позади вообще все известные объектные надстройки над графическими подсистемами.

     С пользовательской точки зрения, Oberon-3 хоть и напоминает все сразу ОС с графическим интерфейсом, но… Во-первых, в Oberon и в помине нет алфавитно-цифрового режима (ни в каких проявлениях), во-вторых, окна в Oberon — не перекрывающиеся (к слову, даже минимального ущерба в функциональности из-за этого не ощущается), в-третьих, несмотря на наличие мощных графических интерфейсных примитивов-"гэджетов", Oberon остается командно-ориентированной системой. Правда, команды в Oberon также не имеют ничего общего с аналогами из более распространенных, пусть и достаточно экзотических ОС — формат любой команды включает два обязательных элемента: имена "объекта"-модуля и "метода", разделенные точкой (знакомые с объектно-ориентированным программированием, например на C++, сразу узнают в подобной конструкции хорошо знакомую запись обращения к члену объекта). С командами связана еще одна интересная особенность Oberon — их можно "встраивать", например, в текст, редактируемый в текстовом процессоре, и получать принципиально новый вид документа.
     

     Есть ли будущее у Oberon?

     Увы, действительность заставляет задать этот вопрос. Несмотря на совершенство, компактность, изящность концепций и высокое качество Oberon-системы, ее рыночная значимость минимальна. Да, есть ряд компаний, производящих компиляторы с языка Oberon-2 (в том числе и довольно успешно действующая на западном рынке новосибирская компания XDS), существуют и фирмы, специализирующиеся на проектировании встраиваемых систем реального времени на основе Oberon-технологии, была замечательная по своей смелости попытка почившей DEC создать сетевой компьютер Sharc под управлением Oberon-3. Но в мире "большого бизнеса" Oberon не прижился. Искать ответ на вопрос "почему?" сложно да и бессмысленно. Хотя, если вы наберете в строке поиска altavista ключевые слова "+oberon +wirth", тысячи найденных страниц и сайтов убедительно докажут — Oberon жив, развивается и в ближайшем будущем может еще достойно заявить о себе.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: