Oberon и все-все-все

Не знаю, как обстоят дела на Западе, но у нас первенство безусловно признается за С и С++. Ну, кто как, а я неравнодушен к языкам Никлауса Вирта. Можно много спорить, доказывая преимущества одних языков программирования перед другими... Но, честное слово, уверен, что многие из читателей, просто в силу сложившегося положения, не слишком осведомлены о существовании реальной альтернативы.

Для начала предпримем небольшое историческое отступление. Первые языки программирования, и самый первый из них - FORTRAN, были великим достижением сами по себе. Их можно сравнить с искусными ремесленными изделиями. Потом ремесло стало больше походить на инженерное дело, и родилось следующее поколение языков. Именно к их числу относится С. Практически одновременно стала развиваться еще одна группа языков, в основу которых были положены принципы скорее математического, чем инженерного характера. Первенцем среди них стал ALGOL.

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

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

Думаю, что не последнюю роль во всей истории сыграло стратегическое соревнование (или противостояние?) между Америкой и Европой в развитии компьютерной науки. Чем дело кончилось, мы все знаем: Европе оказалось не под силу угнаться за Штатами. Америка была и осталась законодателем в мире компьютеров. ALGOL - язык европейский, и как таковой он был проигнорирован американской компьютерной индустрией. К сожалению, с водой выплеснули и младенца.

В конце 60-х у ALGOL появились потомки. Самым известным из них стал PASCAL. Его создал в 1970 году Никлаус Вирт. В PASCAL были прояснены некоторые темные места ALGOL, а ряд его не очень удачных особенностей был исключен. Трудно сказать, как сложилась бы судьба языка, если бы не легендарное время становления персональных компьютеров и Филипп Канн.

Позвольте напомнить, что в первые годы "персоналок" большой бизнес смотрел на них как на баловство и не достойную внимания мелочь. PASCAL стал чрезвычайно популярен в роли языка программирования персональных компьютеров. К тому были все основания: он был прост в изучении и применении, имел очень быстрый и очень дешевый компилятор, разработанный Канном. Кроме того, Канн продавал его в США, основав фирму Borland, названную так в честь популярного американского же астронавта. По моему мнению, не будь этого счастливого стечения обстоятельств, европейский PASCAL постигла бы судьба его прародителя, языка ALGOL.

К слову сказать, после первого бурного успеха судьба языка вовсе не была безоблачной. В столкновение вступили интересы крупных капиталов, и PASCAL начали теснить. Хотите верьте, хотите - нет, но и фирма Microsoft в свое время выпускала компилятор PASCAL. Больше того, первые версии Windows разрабатывались именно на нем! Этим и объясняется тот факт, что системные функции Windows до сих пор вызываются почти так же, как вызывались процедуры на PASCAL, а вовсе не так, как это делается в С.

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

Modula-2, следующему языку Вирта, созданному в 1979 году, такой шанс не выпал. Во-первых, в игру уже вступили большие деньги, а во-вторых, на сцену вырвалась OS UNIX и ее системный язык С. Modula-2 - строгий, систематический язык, специально разработанный для прикладного и системного программирования рабочих станций и персональных компьютеров. В Modula-2 были устранены недостатки Pascal и включены средства надежной разработки больших программ - модули.

Честно говоря, при всех превосходных качествах языка в нем не хватало одного - удобных средств для работы на уровне команд процессора и архитектуры компьютера. Они были проигнорированы и вынесены за рамки стандарта языка. В этом проявился некоторый разрыв с практикой, излишняя академичность, когда в жертву теоретической стройности были принесены важнейшие для системного программирования качества языка. Перейди Modula-2 в разряд массовых коммерческих языков, недостаток был бы со временем устранен, но этого не произошло.

Некоторое время С и Modula-2 спорили за звание лучшего языка для персональных компьютеров, и победителем вышел С. Почему? Не боюсь повториться, в очередной раз указывая, что, по моему глубокому убеждению, значительную роль в этом сыграл протекционизм компьютерной индустрии США. Вторая, не менее важная причина в том, что в университетах и исследовательских лабораториях США к описываемому моменту уже несколько лет применялась OS UNIX и язык С.

Разработанная в Bell Laboratories операционная система для мини-компьютеров и рабочих станций была, вследствие антимонопольной государственной политики США, некоммерческой и, следовательно, практически бесплатной. Поэтому она буквально заполонила учебные и исследовательские центры. Кроме того, не секрет, что язык С прост и по своей сути является переносимым ассемблером. В этом львиная доля его привлекательности для программиста-практика, и этим же обусловлены его недостатки, главным из которых является отсутствие средств, обеспечивающих надежность разработки крупных программ.

Итак, как только мощность персональных компьютеров стала достаточной, чтобы на них стало возможно перенести решения мира UNIX, судьба европейского языка Modula-2 оказалась предрешенной. На самом массовом в мире американском рынке компьютеров и программ восторжествовала национальная технология программирования. По-моему, тогда, в середине 80-х, и состоялось фактическое закрепление противоестественного разрыва между "научным" и "практическим" программированием.

Но жизнь не стоит на месте и продолжается даже в тени гигантов. Впечатляющей, но малоизвестной, попыткой примирить противоположности стало создание в начале 90-х годов объектно-ориентированного языка Modula-3. Довольно символично, что в проекте приняли участие и американская, и европейская компании: DEC и Olivetti. Знающие люди характеризуют Modula-3 как Java в одежде Modula, или, если угодно, Java - это Modula-3 в одежде С. Как бы то ни было, язык Modula-3 не получил большого распространения.

Перед тем, как начать разговор об Oberon, хотелось бы еще раз вернуться в 60-е годы. Речь пойдет о знаменитом исследовательском центре в Palo Alto (PARC). Идеи, разрабатывавшиеся в центре, практически полностью определили облик современных компьютеров, начиная с интерфейса пользователя и заканчивая методологией программирования. В PARC приезжали работать многие выдающиеся люди. Среди них был и Никлаус Вирт.

История PARC замечательна тем, что она счастливая. Оттуда вышли в мир локальные компьютерные сети, первый объектно-ориентированный язык Simula, первая графическая операционная система и объектно-ориентированный язык SmallTalk, первая мышь... Среди прочего система SmallТalk вдохновила разработку языка и операционной системы Cedar, которая обладала впечатляющей мощью, но была сложной и неустойчивой.

В 1985 году Никлаус Вирт со своим коллегой Йоргом Гуткнехтом приступили к работе над проектом Oberon. Он стал попыткой выделить суть системы Cedar и реализовать функционально полную, но обозримую операционную систему для рабочих станций. Результат оказался замечательным: OS Oberon была очень компактной и эффективной, а для полноценной работы требовала всего 2 Мб оперативной памяти и 10 Мб на жестком диске. Теоретически система Oberon могла по своим качеству и возможностям составить конкуренцию Windows 3.x.

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

По своему опыту работы с системой могу сказать, что понятие программы, как таковой, почти перестает существовать. Oberon является и средой разработки, и средой эксплуатации программ. То, что мы привыкли называть "программой, выполняющейся в среде ОС", в Oberon по определению является (или становится) частью всей системы! Могу сравнить это с тем, как скрипт на Visual Basic расширяет возможности любого пользователя среды MS Word, становясь ее частью.

Вирт понял, что концепция компонентной ОС предполагает разработку с использованием таких объектных средств, как сокрытие (изоляция) данных, позднее связывание и полиморфизм. Уместно вспомнить, что изоляция данных была едва ли не самым удачным качеством Modula-2. Позднее связывание поддерживалось при помощи механизма переменных процедурного типа, однако полиморфизма в языке не было.

По этой причине Вирт ввел в язык понятие "расширения типа": запись могла быть объявлена как расширение уже существующего типа записи. Такой "расширенный" тип был совместим по присваиванию с исходным типом и мог использоваться вместо него. Если хотите, можете называть это наследованием.

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

Следовательно, эту задачу нужно возложить на операционную систему или исполняющую систему языка. Системный сервис, автоматически освобождающий память, когда это безопасно, называется "сборщиком мусора". Сборка мусора предотвращает ошибки программирования двух наиболее опасных разновидностей: утечки памяти (динамически выделенная память никогда не освобождается) и зависшие указатели (освобождение памяти раньше срока, когда она еще используется).

Хотя алголоподобные языки всегда пользовались славой надежных, степень надежности, обеспечиваемая сборкой мусора, явилась качественным скачком. В этом еще одна причина, по которой полная совместимость с Модула-2 была невозможна. Модульная структура Oberon, похожая на Modula-2, обеспечила сокрытие данных о целых семействах типов, а не только отдельных объектах. Так появилась гарантия сохранения целостности для групп взаимозависимых объектов.

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

Нелишне сказать, что ортодоксальные объектно-ориентированные языки, такие, как SmallTalk, не поддерживали ни типизации данных, ни структурирования кода, сводя его к сокрытию реализации объектов и классов. Объективно это большой недостаток, а с точки зрения принципов программирования - возврат в прошлое. Так вот, в Oberon наконец удалось объединить мир объектно-ориентированных языков и модульного программирования.

В 1992 году сотрудничество Вирта с Хансом-Петером Мюссенбахом привело к внесению дополнений и изменений в язык Oberon. Результат получил название Oberon-2 и стал фактическим стандартом языка. Самым значительным дополнением к языку было введение в состав объекта связанных с его типом процедур, то есть методов в объектной терминологии. В 1997 году компания Oberon Мicrosystems внесла в Oberon-2 небольшие дополнения, разработала коммерческий компилятор промышленного уровня и выпустила его в свет под названием Component Pascal.

Кроме этого, компания создала и выпускает систему BlackBox, которую можно вкратце охарактеризовать, с одной стороны, как приложение, исполняемое операционной системой, а с другой - как среду для разработки и исполнения компонентных приложений. Иными словами, BlackBox - это высококачественная реализация идей, заложенных в OS Oberon, но в виде приложения, а не операционной системы.

Если говорить о доступности реализаций OS Oberon, языка Oberon-2, языков Modula-3 и Modula-2, дела обстоят не очень плохо и не очень хорошо. Не очень плохо - потому, что есть общедоступные бесплатные версии компиляторов и даже средств разработки. В их состав, как правило, включены исходные коды компиляторов. Все компиляторы разработаны в исследовательских центрах или в университетах. Словом, можно бесплатно воспользоваться плодами прогрессивной мысли.

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

Еще не очень радует, что линию профессиональных продуктов Modula/Oberon ведут небольшие компании. А какова устойчивость малых фирм, мы все знаем: сегодня они есть, а завтра? То, что университеты будут придерживаться своей политики еще довольно долго, пожалуй, не вызывает сомнения. Но несколько настораживает, что многим реализациям уже больше 5 лет.

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

Евгений Щербатюк


Компьютерная газета. Статья была опубликована в номере 15 за 2000 год в рубрике программирование :: разное

©1997-2024 Компьютерная газета