Язык программирования Оберон появился в результате работы над проектом, целью которого была разработка современной, гибкой и эффективной операционной системы для рабочей станции, рассчитанной на одного пользователя. Принципиальная установка была сделана на то, чтобы сосредоточиться на действительно важных свойствах и - как следствие - не затрагивать эфемерных проблем. Это наилучший способ удержать систему в руках, сделать ее понятной, объяснимой, надежной и эффективно реализуемой.
Вначале планировалось написать систему на Модуле-2, поскольку этот язык весьма эффективно поддерживает понятие модульного проектирования, а также потому, что операционная система должна проектироваться как набор раздельно компилируемых частей с аккуратно выбранными интерфейсами. Действительно, операционная система должна быть не чем иным, как набором базовых модулей, и прикладную разработку следует рассматривать как целенаправленное расширение базового набора. Программирование всегда есть расширение имеющейся системы.
В то время как современные языки, такие как Модула-2, поддерживают понятие расширяемости в отношении процедур, в области типов данных это понятие не так хорошо развито. В частности Модула-2 не позволяет адекватным образом определять новые типы данных как расширения других типов, определенных программистом. Для этого потребовался дополнительный механизм, и поэтому приходится говорить о расширении Модулы-2.
Концепции планировавшейся операционной системы также потребовали очень инамичного централизованного управления памятью, основанного на сборке мусора. Хотя Модула-2 в принципе не запрещает включение сборщика мусора, ее записи с вариантами создают серьезные трудности. Поскольку новый механизм расширения типов делает записи с вариантами избыточными, было принято логичное решение устранить этот камень преткновения. Тем самым, однако, мы делаем шаг в сторону ограничения (создания подмножества) Модулы-2.
Вскоре стало ясно, что правила "сосредоточиваться на существенном и устранять несущественное" следует придерживаться не только при разработке новой системы, но, в равной мере, оно обязательно для языка, на котором создается система. Применение этого принципа привело, таким образом, от Модулы-2 к новому языку. Однако прилагательное "новый" следует понимать в должном контексте: Оберон был получен из Модулы-2 путем очень немногих добавлений и нескольких ограничений. Предпочитая эволюцию революции, мы остаемся в рамках традиции длительного развития от Алгола к Паскалю, затем к Модуле-2 и, наконец, к Оберону. Общими особенностями этих языков являются их процедурная, а не функциональная модель и строгая типизация данных. Еще более фундаментальной, возможно, является идея абстракции: язык должен быть определен в терминах математических, абстрактных понятий без привлечения каких-либо вычислительных механизмов. Только если язык отвечает этому критерию, он может быть назван "высокоуровневым". Одним только синтаксическими формами, какими бы они ни были, язык не заслужит этого звания.
Определение языка должно быть согласованным и кратким. Этого можно достичь только тщательным подбором базовых абстракций и подходящей структуры их комбинирования. Руководство по языку должно быть в меру кратким, избегающим объяснения частных случаев, выводимых из общих правил. Силу формализма не следует измерять длиной его описания. Напротив, слишком длинное описание - верный симптом его неадекватности. Поэтому нужно стремиться не к сложности, а к простоте.
Описание, несмотря на краткость, должно быть полным. Полноты следует достигать в рамках выбранных абстракций. Ограничения, накладываемые конкретными реализациями, не должны входить в собственно определение языка. Примерами таких ограничений являются максимальные значения чисел, ошибки округления и усечения при арифметических операциях и действия, предпринимаемые в случае нарушения программой установленных правил. Определение языка не должно нуждаться в дополнении в виде объемистого стандарта, покрывающего "непредвиденные" ситуации.
Но язык программирования также не должен быть только математической теорией. Он должен быть практическим инструментом. Это накладывает определенные ограничения на лаконичность формализма. Некоторые средства Оберона избыточны с чисто теоретической точки зрения. Тем не менее они сохранены из практических соображений: либо для удобства программиста, либо для обеспечения эффективной кодогенерации без необходимости применения сложных "оптимизирующих" алгоритмов сопоставления по шаблону. Примерами таких средств являются присутствие нескольких форм оператора цикла и стандартных процедур, таких как INC, DEC и ODD. Они не приводят к заметному усложнению ни концепции языка, ни транслятора.
Эти основные предпосылки следует иметь в виду при сравнении Оберона с другими языками. Ни язык, ни определяющий его документ не идеальны, но Оберон приближается к этим целям лучше своих предшественников.
Транслятор с Оберона был реализован для семейства микпроцессоров NS32000 и встроен в операционную среду Оберон. Транслятор требует менее 50 Кбайт памяти, состоит из 6 модулей общим объемом около 4000 строк исходного текста и транслирует сам себя примерно за 15 с на рабочей станции с процессором NS32532 и тактовой частотой 25 МГц.
//Н. Вирт. От Модулы к Оберону. Введение.