Введение
Общий язык программирования
Oberon — это язык программирования общего назначения, впервые опубликованный в 1987 году Никлаусом Виртом и являющийся последним представителем виртовской семьи языков, подобных ALGOL (Euler, ALGOL W, Pascal, Modula и Modula 2). Oberon стал результатом целенаправленных усилий по повышению возможностей Modula 2, прямого преемника Pascal, и одновременному снижению его сложности. Его основной новой особенностью является концепция расширения типов записей. Она позволяет создавать новые типы данных на основе существующих и устанавливать между ними связь, отступая от принципа строгой статической типизации данных. Расширение типов — это реализация наследования в подходе Вирта, отражающая точку зрения исходного (родительского) модуля. Oberon был разработан в процессе создания операционной системы, также названной Oberon, в ETH Zurich (Швейцария). Название было вдохновлено как изображениями луны Урана, полученными космическим зондом «Вояджер» и носящей имя Оберон, так и тем, что Оберон известен как король эльфов. Поддержка Oberon осуществляется Никлаусом Виртом, а последнее обновление компилятора проекта Oberon датировано 6 марта 2020 года.
Дизайн
Oberon разработан с учетом девиза, приписываемого Альберту Эйнштейну: «Сделайте вещи максимально простыми, но не упрощайте их». Главным принципом было сосредоточиться на базовых и существенных возможностях и избегать второстепенных вопросов. Важным фактором стало признание растущей сложности языков, таких как C++ и Ada. В отличие от них, Oberon делает акцент на использовании концепции библиотек для расширения языка. Типы перечислений и поддиапазонов, присутствовавшие в Modula 2, были исключены, а типы множеств ограничены множествами целых чисел. Все импортируемые элементы должны быть квалифицированы именем модуля, в котором они объявлены. Низкоуровневые средства выделяются тем, что разрешено использовать их только в модуле, включающем идентификатор SYSTEM в список импорта. Строгая проверка типов, даже между модулями, проверка индексов во время выполнения, проверка на нулевые указатели и концепция безопасного расширения типов позволяют в значительной степени полагаться в программировании исключительно на правила языка. Целью этой стратегии было создание языка, который легче изучать, проще реализовывать и очень эффективен. Компиляторы Oberon считаются компактными и быстрыми, обеспечивая при этом качество кода, сопоставимое с коммерческими компиляторами.
Ориентация на объект
Oberon поддерживает расширение типов записей для построения абстракций и гетерогенных структур. В отличие от более поздних диалектов Oberon 2 и Active Oberon, в оригинальном Oberon отсутствует механизм динамической диспетчеризации как встроенная языковая конструкция, но он реализуется как техника программирования или шаблон проектирования. Это обеспечивает большую гибкость в объектно-ориентированном программировании. В операционной системе Oberon для реализации динамической диспетчеризации используются две техники программирования: наборы методов и обработчики сообщений.
Оберон
В Интернете можно найти бесплатные реализации Oberon (язык) и Oberon (операционная система) (некоторые из них разработаны в ETHZ).
Оберон-2
В первую выпущенную спецификацию было внесено несколько изменений. Например, были добавлены возможности объектно-ориентированного программирования (ООП), а также восстановлен цикл FOR. Результатом стал Oberon 2. Был выпущен один релиз под названием Native Oberon, включающий операционную систему и способный к прямой загрузке на аппаратном обеспечении, совместимом с IBM PC. В ETHZ также была разработана реализация Oberon для платформы .NET с добавлением некоторых незначительных расширений, связанных с .NET. В 1993 году компания, выделившаяся из ETHZ, представила на рынок диалект Oberon 2 под названием Oberon L. В 1997 году он был переименован в Component Pascal. Компиляторы Oberon 2, разработанные в ETH, включают версии для Microsoft Windows, Linux, Solaris и классической Mac OS. Реализации от других разработчиков существуют для некоторых других операционных систем, включая Atari TOS и AmigaOS. Стивен Дж. Беван из Манчестерского университета (Великобритания) разработал сканер Lex и парсер Yacc для Oberon 2, основанные на тех, что представлены в справочнике Mössenböck и Wirth. Текущая версия – 1.4. Другие компиляторы включают Oxford Oberon 2, который также поддерживает Oberon 07, и Vishap Oberon. Последний основан на компиляторе-транспиляторе языка Oberon to C, разработанном Йозефом Темплом и названном Ofront, который, в свою очередь, основан на компиляторе OP2, разработанном Регисом Крелье в ETHZ.
Оберон-07
Oberon 07, определенный Никлаусом Виртом в 2007 году и пересмотренный в 2008, 2011, 2013, 2014, 2015 и 2016 годах, основан на оригинальной версии Oberon, а не на Oberon 2. Основные изменения: необходимо использовать явные функции числового преобразования (например, FLOOR и FLT); операторы WITH, LOOP и EXIT были исключены; операторы WHILE были расширены; операторы CASE могут использоваться для проверки расширения типов; операторы RETURN могут быть связаны только с концом функции; импортированные переменные и параметры структурированных значений доступны только для чтения; и массивам можно присваивать значения без использования COPY. Компиляторы Oberon 07 были разработаны для использования с различными компьютерными системами. Компилятор Вирта предназначен для RISC-процессора собственной разработки, который использовался для реализации версии 2013 операционной системы Project Oberon на полевом программируемом вентильном массиве (FPGA) Spartan 3 от Xilinx. Существуют также порты RISC-процессора на FPGA Spartan 6, Spartan 7, Artix 7 и эмулятор RISC для Windows (компилируемый в Linux и macOS, а также доступны бинарные файлы для Windows). OBNC компилируется через C и может использоваться в любой операционной системе, совместимой с POSIX. Коммерческая реализация Astrobe ориентирована на 32-битные микроконтроллеры ARM Cortex M3, M4 и M7. Компилятор Patchouli генерирует 64-битные исполняемые файлы Windows. Oberon 07M генерирует 32-битные исполняемые файлы Windows и реализует редакцию 2008 года языка. Akron генерирует исполняемые файлы для Windows и Linux. OberonJS транслирует Oberon в JavaScript. Существует онлайн-IDE для Oberon. oberonc – это реализация для виртуальной машины Java.
Активный Оберон
Активный Оберон – это ещё один вариант Оберона, который добавляет объекты (с объектно-ориентированной защитой доступа и локальным управлением активностью), системно-защищённые утверждения, вытесняющее планирование по приоритетам и изменённый синтаксис для методов (именованные процедуры, связанные с типом, в терминологии Оберона). Объекты могут быть активными, то есть представлять собой потоки или процессы. Кроме того, Active Oberon предоставляет возможность реализации операторов (включая перегрузку), расширенный синтаксис для работы с массивами (см. расширения языка OberonX и материалы 7-й совместной конференции по модульным языкам, Оксфорд, Великобритания, 2006 г.), а также поддерживает пространства имён. Операционная система A2 (ранее Active Object System (AOS), затем Bluebottle), особенно её ядро, синхронизирует и координирует различные активные объекты. ETHZ выпустила Active Oberon, поддерживающий активные объекты, а также операционные системы, основанные на них (Active Object System (AOS), Bluebottle, A2), и окружение (JDK, HTTP, FTP и т.д.) для языка. Как и многие предыдущие разработки ETHZ, версии обеих систем доступны для скачивания в Интернете. По состоянию на 2003 год поддерживаемые центральные процессоры (CPU) включают одно- и двухъядерные x86 и StrongARM.
Сродственные языки
Развитие языков этой семьи продолжалось. Дальнейшее расширение Oberon 2 первоначально называлось Oberon/L, но позже было переименовано в Component Pascal (CP). CP был разработан для Windows и классической Mac OS компанией Oberon microsystems, коммерческим подразделением, выделившимся из ETHZ, и для .NET — Квинслендским технологическим университетом. Кроме того, языки Lagoona и Obliq перенесли методы Оберона в специализированные области. Позднее разработки .NET в ETHZ были сосредоточены на новом языке под названием Zonnon. Он включает в себя возможности Oberon и восстанавливает некоторые из Pascal (перечисляемые типы, встроенный ввод-вывод), но имеет некоторые синтаксические отличия. Среди других возможностей — поддержка активных объектов, перегрузка операторов и обработка исключений. Oberon V (первоначально названный Seneca, в честь Сенеки Младшего) является потомком Oberon, предназначенным для численных приложений на суперкомпьютерах, особенно с векторной или конвейерной архитектурой. Он включает в себя конструкторы массивов и оператор ALL.