Язык программирования Оберон разработан Никлаусом Виртом при разработке одноименной операционной системы. По словам автора, разработке помогло критическое осмысления языков: Модула-2, Паскаль, Ada, Smalltalk и Cedar.
От Оберона пошло несколько веток развития языка программирования:
Оберон-07 | Активный Оберон | Оберон-2 | Компонентный Паскаль (Блэкбокс Оберон)
Линия Оберон-07 — это авторское уточнение исходного языка без существенных добавлений.
Алгол, определенный в 1960, был первым языком высокого уровня с синтаксисом, который был легко читаем, структурирован и описан формальным образом. Несмотря на его успешное использование в качестве нотации для математичесих алгоритмов, в нем недоставало важных типов данных, таких как указатели и литеры.
В конце 60-х гг. было выдвинуто несколько предложений об эволюционном развитии Алгола. Самым успешным оказался Паскаль, определенный в 1970 профессором Никлаусом Виртом из ETH, швейцарского Федерального политехнического университета в Цюрихе. Наряду с очищением языка от некоторых непрозрачных средств Алгола, в Паскале добавлена возможность объявления новых структур данных, построенных из уже существующих более простых. Паскаль также поддерживал динамические структуры данных, т.е. такие структуры данных, которые могут расти или уменьшаться во время выполнения программы. Паскаль получил мощный импульс к распространению, когда в ETH был выпущен компилятор, порождавший простой промежуточный код для виртуальной машины (P-код) вместо «родного» кода для конкретного процессора. Это существенно упростило перенос Паскаля на другие процессорные архитектуры, т.к. для этого нужно было только написать новый интерпретатор для P-кода вместо всего нового компилятора. Один из таких проектов был предпринят в Университете Калифорнии в Сан-Диего. Замечательно, что эта реализация (UCSD Pascal) не требовала мощного компьютера [mainframe] и могла работать на новых тогда персональных компьютерах семейства Apple II. Это дало распространению Паскаля второй серьезный импульс. Третьим был выпуск компанией Борланд продукта Турбо Паскаль, содержавшего быстрый и недорогой компилятор вместе с интегрированной средой разработки программ для компьютеров IBM PC. Позднее Борланд возродил свою версию Паскаля, выпустив среду быстрой разработки приложений Дельфи.
Паскаль сильно повлиял на дизайн и эволюцию многих других языков, от Ada до Visual Basic.
В середине 70-х гг., вдохновленный годичным академическим отпуском, проведенным в исследовательском центре PARC компании Xerox в г. Пало Альто, Вирт начал проект по созданию нового компьютера класса рабочая станция <проект Lilith>. Компьютер должен был быть полностью программируемым на языке высокого уровня, так что язык должен был обеспечить прямой доступ к аппаратному уровню. Далее, он должен был поддерживать коллективное программирование и современные принципы разработки программного обеспечения, такие как абстрактные типы данных. Эти требования были реализованы в языке программирования Модула-2 (1979). Модула-2 сохранила успешно зарекомендовавшие себя средства Паскаля и добавила систему модулей, а также контролируемые возможности обойти систему типов языка в случаях программирования низкого уровня, например, при написании драйверов устройств. Модули могли добавляться к операционной системе непосредственно во время работы. На самом деле вся операционная система представляла собой набор модулей без выделенного ядра или иного подобного объекта. Модули могли компилироваться и загружаться раздельно, причем обеспечивалась полная проверка типов и версий их интерфейсов.
Успех Модулы-2 был наиболее значителен в задачах с высокими требованиями на надежность, таких как системы управления движением. <Например, бортовое программное обеспечение на запускаемых в настоящее время российских спутниках связи пишется на Модуле-2 с помощью кросс-среды разработки приложений, описанной А.А.Колташевым в докладе на конференции JMLC'2003; см. Modular Programming Languages. Lecture Notes in Computer Science (LNCS 2789), Springer-Verlag, 2003, cc. 98-101.
Однако Вирт продолжал интересоваться прежде всего настольными компьютерами, и опять важный импульс пришел из центра PARC компании Xerox. В этом центре были изобретены рабочая станция, лазерный принтер, локальная сеть, графический дисплей и многие другие технологии, расширяющие возможности использования компьютеров человеком. Кроме того, в центре PARC были популяризированы некоторые более старые и малоизвестные технологии, такие как мышь, интерактивная графика и, наконец, объектно ориентированное программирование. Эта последняя концепция (хотя и не сам термин) была впервые использована в языке высокого уровня Симула (1966) — еще одном из семейства алголоподобных языков. Как и предполагает имя, язык Simula использовал объектные технологии прежде всего для целей моделирования [simulation]. Однако язык Smalltalk (1983), разработанный в центре PARC компании Xerox, использовал их практически для всего, что угодно. Проект Smalltalk был также пионерским в плане дизайна пользовательского интерфейса: графический интерфейс пользователя (GUI), каким мы его теперь знаем, был разработан для системы Smalltalk.
В центре PARC эти идеи повлияли на другие проекты, например, паскалеподобный язык Cedar. Как и Smalltalk и позднее Оберон, Cedar представлял собой не только язык программирования, но и операционную систему. Операционная система Cedar была весьма впечатляющей и мощной, однако сложной и нестабильной.
Проект Оберон был начат в 1985 в ETH Виртом и его коллегой Юргом Гуткнехтом [Jurg Gutknecht]. Это была попытка выделить все существенное из системы Cedar в виде универсальной, но все же обозримой операционной системы для рабочих станций. Получившаяся система оказалась очень маленькой и эффективной, прекрасно работала в оперативной памяти размером всего 2 MB и требовала при этом лишь 10 MB памяти на диске. Важной причиной малого размера системы Оберон был ее компонентный дизайн: вместо интеграции всех желаемых средств в один монолитный программный колосс, менее часто используемые программные компоненты (модули) могли быть реализованы как расширение ядра системы. Такие компоненты загружались, только когда они были действительно нужны, и они могли совместно использоваться всеми приложениями.
Вирт понял, что компонентно-ориентированное программирование требовало некоторых средств объектно-ориентированного программирования, таких как упрятывание информации [information hiding], позднее связывание [late binding] и полиморфизм.
Упрятывание информации было сильной чертой Модулы-2. Позднее связывание поддерживалось в Модуле-2 посредством процедурных переменных. Однако там не было полиморфизма. Поэтому Вирт добавил расширенное переопределение типов [type extension]: записевый тип мог быть объявлен как расширение <потомок> другого записевого типа <предка>. Тип-потомок можно было использовать всюду вместо одного из его предков.
Но компонентно-ориентированное программирование выходит за рамки объектно-ориентированного. В системе, построенной из компонентов, компонент может разделять свои структуры данных с произвольным числом других компонентов, о которых она ничего не знает. Эти компоненты обычно также не знают о существовании друг друга. Такое взаимное незнание делает управление динамическими структурами данных, и в частности правильное освобождение уже ненужной памяти, принципиально более трудной проблемой, чем в закрытых программных системах. Следовательно, необходимо оставить на долю реализации языка всю работу по определению момента, когда какая-то область памяти более не нужна, чтобы повторно использовать ее без ущерба для безопасности системы. Системный сервис, выполняющий такую автоматическую утилизацию памяти, называется сборщик мусора [garbage collector]. Сбор мусора предотвращает две из числа наиболее труднонаходимых и попросту опасных ошибок в программах: утечки памяти [memory leaks] (когда более не используемая память не освобождается) и висячие ссылки [dangling pointers] (преждевременное освобождение памяти). Висячие ссылки позволяют одному компоненту разрушить структуры данных, принадлежащие другим. Такое нарушение защиты типов [type safety] должно быть предотвращено, т.к. компонентные системы могут содержать многие независимо написанные компоненты неизвестного качества (например, полученные из Интернета).
Хотя алголоподобные языки всегда имели высокую репутацию в плане безопасности, введение полной защиты типов (и, следовательно, сбора мусора) явилось качественным скачком. Именно по этой причине полная совместимость с Модулой-2 оказалась невозможной. Получившаяся модификация Модулы-2 была названа как и вся система — Оберон.
Система модулей в Обероне, как и в Модуле-2, обеспечивала упрятывание информации для целых семейств типов, а не только для отдельных объектов. Это позволило определять и гарантировать инварианты для нескольких взаимодействующих объектов. Другими словами, разработчики получили возможность разрабатывать механизмы защиты более высокого уровня, отталкиваясь от базовых средств защиты на уровне модулей и защиты типов, обеспечиваемых хорошей реализацией Оберона.
Ортодоксальные объектно-ориентированные языка типа Smalltalk пренебрегали как типизацией переменных (вообще не поддерживая типы), так и упрятыванием информации (ограничивая ее объектами и классами), что явилось большим шагом назад в технологии разработки программного обеспечения. Оберон примирил миры объектно-ориентированного и модульного программирования.
Последнее требование компонентно-ориентированного программирования — возможность динамически загружать новые компоненты. В Обероне единица загрузки та же, что и единица компиляции — модуль.
В 1992 г. сотрудничество с профессором Х.П. Мёссенбёком (H.P. Mossenbock) привело к нескольким добавлениям к первоначальному языку Оберон («Оберон-2»). Так возник фактический стандарт языка.
В 1997 г. компания Oberon microsystems, Inc., отделившаяся от ETH (с Виртом в составе совета директоров), сделала некоторые небольшие добавления к Оберону-2 и назвала его Компонентный Паскаль, чтобы четче выразить как его нацеленность (компонентно-ориентированное программирование), так и его происхождение (Паскаль). Это промышленная версия Оберона, являющаяся наследницей первоначального Паскаля и Модулы-2.
Главная идея уточнений по сравнению с Обероном-2 была в том, чтобы дать проектировщику компонентного каркаса более полный контроль над ее проектируемыми свойствами в плане безопасности. Положительным результатом стало то, что теперь легче обеспечить целостность больших компонентных систем, что особенно важно во время итеративных циклов проектирования, когда библитека разрабатывается, и позднее, когда архитектура системы должна быть переработана, чтобы обеспечить дальнейшую эволюцию и поддержку.
Компания Oberon microsystems разрабатывала компонентную библиотеку <каркас> BlackBox Component Framework начиная с 1992 г. (сначала библиотека называлась Oberon/F). Эта библиотека написана на Компонентном Паскале и упрощает разработку компонентов графического пользовательского интерфейса. Она поставляется с несколькими компонентами, включая текстовый редактор, систему визуального проектирования, средство доступа к базам данных SQL, интегрированную среду разработки, а также систему поддержки выполнения программ на Компонентном Паскале. Весь пакет представляет собой развитый, но весьма нетребовательный к системным ресурсам инструмент быстрой разработки компонентных приложений, названный BlackBox Component Builder (Блэкбокс). Он нетребователен к системным ресурсам, т.к. полностью построен из модулей Компонентного Паскаля — включая ядро со сборщиком мусора, а также самого компилятора языка Компонентный Паскаль. Это — иллюстрация как мощи концепции компонентного программного обеспечения вообще, так и адекватности языка Компонентный Паскаль в частности.
Недавно диапазон приложений системы BlackBox Component Builder был значительно расширен за счет среды кросс-программирования Denia, которая является компонентом, расширающим систему Блэкбокс. Denia позволяет выполнять кросс-программирование на Компонентном Паскале для новой операционной системы реального времени JBed, которая полностью реализована на Компонентном Паскале. JBed предназначен для встроенных систем и приложений с жесткими требованиям реального времени [hard real-time requirements], например, в робототехнике и промышленной автоматизации. Большое применение JBed нашла в мобильных устройствах.
Разновидность языка Оберон, с некоторыми дополнениями для системного программирования и программирования реального времени процессора ARM. Разрабатывалось Никлаусом Виртом в проекте Automatic Control of Model Helicopter.
В 1995 Н. Вирт присоединился к проекту Института автоматического контроля и измерений . Целью проекта была разработка системы позволяющая вертолету летать автономно по запрограммированному пути. Вирт разрботал систему бортового компьютера на основе процессора Strong-ARM. Кроме разработки аппаратных средств, он написал программы для различных инструментов программирования, включая разновидность компилятора Оберона с дополнительными возможностями для программирования систем реального-времени.
На основе опыта разработки Oberon-SA в 2007 году Н. Вирт уточнил исходное определение языка Оберон. Новая версия языка получила название Oberon-07 (Revised Oberon).
Для языка Oberon-07 австралийская фирма CFB Software выпустила компилятор Astrobe для микропроцессоров ARM.
В 2013 году вышла новая версия языка вместе с проектом Project Oberon (New Edition 2013).
https://www.inf.ethz.ch/personal/wirth/ProjectOberon/index.html
https://www.inf.ethz.ch/personal/wirth/Oberon/Oberon07.Report.pdf
Для этого варианта языка был обновлен компилятор Astrobe, а также был разработан новый компилятор O7 для микроконтроллеров с архитектурой ARMv{6,7E}-M:
Репозиторий Active Object System (AOS aka A2) git repository (from 9.12.2022)
https://gitlab.inf.ethz.ch/felixf/oberon/-/tree/main
Описание языка Активный Оберон 2019 на английском
ETH Oberon (2019) Language Report
Felix Friedrich, Florian Negele, October 31, 2019
https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/docu/OberonLanguageReport.pdf
Описание языка Активный Оберон 2019 на русском
Феликс Фридрих, Флориан Негель, 31 октября 2019
Перевод - Николай Кондрин, Денис Будяк, 2020