Оберон (язык программирования) - Oberon (programming language)
Парадигмы | Императивный , структурированный , модульный , объектно-ориентированный |
---|---|
Семья | Вирт Оберон |
Разработано | Никлаус Вирт |
Разработчик | ETH Цюрих |
Впервые появился | 1987 |
Стабильный выпуск | Оберон-07/6 марта 2020 года
|
Печатная дисциплина | Сильный , гибридный ( статический и динамический ) |
Сфера | Лексический |
Платформа | ARM , StrongARM ; IA-32 , x86-64 ; SPARC , Церера ( NS32032 ) |
Операционные системы | Windows , Linux , Solaris , классическая Mac OS , Atari TOS , AmigaOS |
Веб-сайт | www |
Под влиянием | |
Модула-2 | |
Под влиянием | |
Оберон-2 , Оберон-07 , Зоннон , Го , Ним , Активный Оберон , Компонентный Паскаль |
Оберон - это язык программирования общего назначения, впервые опубликованный в 1987 году Никлаусом Виртом и последний член виртовского семейства языков, подобных АЛГОЛу ( Эйлер , АЛГОЛ W , Паскаль , Модула и Модула-2 ). Оберон был результатом сосредоточенных усилий по увеличению мощности Модулы-2 , прямого преемника Паскаля , и одновременно уменьшению его сложности. Его принципиальная новая функция - это концепция расширения типов записей. Это позволяет создавать новые типы данных на основе существующих и связывать их, отклоняясь от догмы строго статической типизации данных. Расширение типов - это способ наследования Wirth, отражающий точку зрения родительского сайта. Oberon был разработан как часть реализации операционной системы , также названной Oberon в ETH Zurich в Швейцарии . Название происходит от луны планеты Уран , названной Оберон .
Оберон по-прежнему поддерживается Wirth, а последнее обновление компилятора Project Oberon датировано 6 марта 2020 года.
Дизайн
Оберон разработан с девизом, приписываемым Альберту Эйнштейну : «Делайте вещи как можно проще, но не проще». Основная рекомендация заключалась в том, чтобы сконцентрироваться на основных и важных функциях и опустить эфемерные проблемы. Еще одним фактором было признание роста сложности таких языков, как C ++ и Ada . В отличие от них, Оберон подчеркивает использование концепции библиотеки для расширения языка. Типы перечисления и поддиапазона, которые присутствовали в Modula-2, были опущены, а типы наборов ограничены наборами целых чисел. Все импортированные элементы должны быть уточнены именем модуля, в котором они объявлены. Средства низкого уровня выделяются тем, что разрешают их использование только в модуле, который включает идентификатор SYSTEM в свой список импорта. Строгая проверка типов даже между модулями и проверка индекса во время выполнения , проверка нулевого указателя и концепция безопасного расширения типа в значительной степени позволяют программированию полагаться только на правила языка.
Цель этой стратегии состояла в том, чтобы создать язык, который легче выучить, проще в реализации и очень эффективен. Компиляторы Oberon считаются компактными и быстрыми, обеспечивая при этом качество кода, сопоставимое с коммерческими компиляторами.
Характеристики
Особенности, характеризующие язык Оберон, включают:
- Синтаксис с учетом регистра с ключевыми словами в верхнем регистре
- Расширение типа с типовым испытанием
- Модули и раздельная компиляция
- Строковые операции
- Изоляция небезопасного кода
- Поддержка системного программирования
Ориентация объекта
Oberon поддерживает расширение типов записей для построения абстракций и разнородных структур. В отличие от более поздних диалектов, Оберон-2 и Активный Оберон, в оригинальном Обероне отсутствует механизм диспетчеризации как функция языка, но он используется как метод программирования или шаблон проектирования. Это дает большую гибкость в ООП. В операционной системе Oberon для вызова диспетчеризации используются вместе два метода программирования: набор методов и обработчик сообщений.
Набор методов
В этом методе определяется таблица переменных процедуры, и глобальная переменная этого типа объявляется в расширенном модуле и назначается обратно в универсальном модуле:
MODULE Figures; (* Abstract module *) TYPE Figure* = POINTER TO FigureDesc; Interface* = POINTER TO InterfaceDesc; InterfaceDesc* = RECORD draw* : PROCEDURE (f : Figure); clear* : PROCEDURE (f : Figure); mark* : PROCEDURE (f : Figure); move* : PROCEDURE (f : Figure; dx, dy : INTEGER); END; FigureDesc* = RECORD if : Interface; END; PROCEDURE Init* (f : Figure; if : Interface); BEGIN f.if := if END Init; PROCEDURE Draw* (f : Figure); BEGIN f.if.draw(f) END Draw; (* Other procedures here *) END Figures.
Мы расширяем общий тип Figure до определенной формы:
MODULE Rectangles; IMPORT Figures; TYPE Rectangle* = POINTER TO RectangleDesc; RectangleDesc* = RECORD (Figures.FigureDesc) x, y, w, h : INTEGER; END; VAR if : Figures.Interface; PROCEDURE New* (VAR r : Rectangle); BEGIN NEW(r); Figures.Init(r, if) END New; PROCEDURE Draw* (f : Figure); VAR r : Rectangle; BEGIN r := f(Rectangle); (* f AS Rectangle *) (* ... *) END Draw; (* Other procedures here *) BEGIN (* Module initialisation *) NEW(if); if.draw := Draw; if.clear := Clear; if.mark := Mark; if.move := Move END Rectangles.
Динамическая отправка выполняется только с помощью процедур в модуле Figures, который является универсальным модулем.
Обработчик сообщений
Этот метод заключается в замене набора методов одной процедурой, которая различает различные методы:
MODULE Figures; (* Abstract module *) TYPE Figure* = POINTER TO FigureDesc; Message* = RECORD END; DrawMsg* = RECORD (Message) END; ClearMsg* = RECORD (Message) END; MarkMsg* = RECORD (Message) END; MoveMsg* = RECORD (Message) dx*, dy* : INTEGER END; Handler* = PROCEDURE (f : Figure; VAR msg : Message); FigureDesc* = RECORD (* Abstract *) handle : Handler; END; PROCEDURE Handle* (f : Figure; VAR msg : Message); BEGIN f.handle(f, msg) END Handle; PROCEDURE Init* (f : Figure; handle : Handler); BEGIN f.handle := handle END Init; END Figures.
Мы расширяем общий тип Figure до определенной формы:
MODULE Rectangles; IMPORT Figures; TYPE Rectangle* = POINTER TO RectangleDesc; RectangleDesc* = RECORD (Figures.FigureDesc) x, y, w, h : INTEGER; END; PROCEDURE Draw* (r : Rectangle); BEGIN (* ... *) END Draw; (* Other procedures here *) PROCEDURE Handle* (f: Figure; VAR msg: Figures.Message); VAR r : Rectangle; BEGIN r := f(Rectangle); IF msg IS Figures.DrawMsg THEN Draw(r) ELSIF msg IS Figures.MarkMsg THEN Mark(r) ELSIF msg IS Figures.MoveMsg THEN Move(r, msg(Figures.MoveMsg).dx, msg(Figures.MoveMsg).dy) ELSE (* ignore *) END END Handle; PROCEDURE New* (VAR r : Rectangle); BEGIN NEW(r); Figures.Init(r, Handle) END New; END Rectangles.
В операционной системе Oberon оба этих метода используются для динамической диспетчеризации. Первый используется для известного набора методов; второй используется для любых новых методов, объявленных в модуле расширения. Например, если бы в модуле расширения Rectangles была реализована новая процедура Rotate (), в модуле Figures ее можно было бы вызвать только через обработчик сообщений.
Реализации и варианты
Оберон
Бесплатные реализации Oberon (язык) и Oberon (операционная система) можно найти в Интернете (некоторые из них принадлежат самому ETHZ).
Оберон-2
В первую выпущенную спецификацию было внесено несколько изменений. Например, добавлены возможности объектно-ориентированного программирования (ООП), восстановлен FOR
цикл. Результат был Оберон-2 . Один выпуск, названный Native Oberon, включает в себя операционную систему и может напрямую загружаться на аппаратном обеспечении класса, совместимого с IBM PC . .NET реализация Оберона с добавлением некоторых незначительных расширений .NET связанных также была разработана в ETHZ. В 1993 году дочерняя компания ETHZ вывела на рынок диалект Оберон-2 под названием Оберон-L . В 1997 году он был переименован в Component Pascal .
Компиляторы Оберон-2, разработанные ETH, включают версии для Microsoft Windows , Linux , Solaris и классической Mac OS . Реализации из других источников существуют для некоторых других операционных систем, включая Atari TOS и AmigaOS .
Существует сканер Oberon-2 Lex и анализатор Yacc, созданный Стивеном Дж. Беваном из Манчестерского университета, Великобритания, основанный на том, что приведено в справочнике Мессенбека и Вирта. Это версия 1.4.
Другие компиляторы включают Oxford Oberon-2, который также понимает Oberon-07, и Vishap Oberon. Последний основан на компиляторе (транспиляторе) языка C Oberon для языка C под названием Ofront, который, в свою очередь, основан на компиляторе OP2, разработанном Regis Crelier в ETHZ.
Оберон-07
Оберон-07, определенный Никлаусом Виртом в 2007 году и пересмотренный в 2008, 2011, 2013, 2014, 2015 и 2016 годах, основан на исходной версии Оберона, а не на Обероне-2. Основные изменения: необходимо использовать функции явного числового преобразования (например, FLOOR
и FLT
) WITH
, операторы , LOOP
и EXIT
были опущены, WHILE
операторы были расширены, CASE
операторы могут использоваться для тестов расширения типа, RETURN
операторы могут быть связаны только с концом функции, импортированные переменные и параметры структурированного значения доступны только для чтения, а массивы можно назначать без использования COPY
.
Компиляторы Оберон-07 были разработаны для использования с множеством различных компьютерных систем. Компилятор Вирта нацелен на процессор компьютера с сокращенным набором команд (RISC) его собственной разработки, который использовался для реализации версии 2013 года операционной системы Project Oberon на плате Xilinx с программируемой вентильной матрицей (FPGA) Spartan-3. Также существуют порты процессора RISC для FPGA Spartan-6, Spartan-7, Artix-7 и эмулятора RISC для Windows (компилируемый в Linux и macOS , а также бинарные файлы для Windows). OBNC компилируется через C и может использоваться в любой операционной системе, совместимой с интерфейсом переносимой операционной системы ( POSIX ). Коммерческая реализация Astrobe нацелена на 32-битные микроконтроллеры ARM Cortex-M3, M4 и M7. Пачули компилятор производит 64-разрядные двоичные файлы Windows. Оберон-07М производит 32-битные двоичные файлы Windows и реализует версию 2008 языка. Akron's производит двоичные файлы как для Windows, так и для Linux. OberonJS переводит Оберон на JavaScript . Есть онлайн-IDE для Оберона . oberonc - это реализация виртуальной машины Java .
Активный Оберон
Active Oberon - это еще один вариант Oberon, который добавляет объекты (с объектно-ориентированной защитой доступа и локальным контролем активности), защищенные системой утверждения, упреждающее планирование приоритетов и измененный синтаксис для методов (называемые процедурами с привязкой к типу в словаре Oberon). Объекты могут быть активными, что означает, что они могут быть потоками или процессами. Кроме того, в 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 год поддерживаемые центральные процессоры (ЦП) включают одно- и двухъядерные процессоры x86 и StrongARM .
Родственные языки
Развитие языков в этой семье продолжалось. Дальнейшее расширение Oberon-2, первоначально называвшееся Oberon / L, но позже переименованное в Component Pascal , было разработано для Windows и классической Mac OS компанией Oberon Microsystems, дочерней коммерческой компанией ETHZ, и для .NET Технологическим университетом Квинсленда. . Кроме того, языки Лагуна и Obliq осуществлять методы Оберона в специализированных районы.
Позднее усилия по разработке .NET в ETHZ были сосредоточены на новом языке под названием Zonnon . Это включает в себя функции Оберона и некоторые из них восстанавливает из Паскаля (перечисляемые типы, встроенный ввод-вывод), но имеет некоторые синтаксические отличия. Другие функции включают поддержку активных объектов, перегрузку операторов и обработку исключений.
Oberon-V (первоначально названный Seneca в честь Сенеки Младшего ) является потомком Oberon, разработанным для числовых приложений на суперкомпьютерах , особенно векторных или конвейерных архитектур. Он включает конструкторы массивов и ALL
оператор.
Смотрите также
Ресурсы
Общий
- Официальный веб-сайт (последняя доступная копия в архивной организации) в ETH-Zürich
- Страница Оберона Никлауса Вирта в ETH-Zürich
- Оберон Пейдж в SSW, Линц
- Оберон: язык программирования в Ульме
- Проект Оберон, Дизайн операционной системы и компилятора , книга в формате PDF Никлауса Вирта и Юрга Гуткнехта, издание 2005 г.
- Генеалогия языка Оберон
- Система разработки Astrobe ARM Оберон-07
- Oberon System V4 для HP OpenVMS Alpha с восходящей 64-битной адресацией, совместимой с исходным кодом
- 64-битный компилятор Оберон-2 для HP OpenVMS Alpha
- Компилятор Oxford Oberon-2 и руководство к нему
- Бесплатная IDE Oberon-07 Бесплатная IDE Oberon-07 для Windows, Macintosh и Linux с подсветкой синтаксиса, семантической навигацией и отладчиком исходного кода
- Статья Джозефа Темпла «Оберон» в январском выпуске журнала «Доктор Доббс» за 1994 год.
Эволюция Оберона
- Модула-2 и Оберон Вирт (2005)
- Язык программирования Оберон Вирт (1988/90)
- Язык программирования Оберон (Оберон-7, Пересмотренный Оберон) Вирт, (2016 г., последний отчет по языку)
- Различия между Обероном-07 и Обероном Виртом (2011)
- Язык программирования Oberon-2 H. Mössenböck, N. Wirth, Institut für Computersysteme, ETH Zürich, январь 1992 г.
- Различия между Обероном и Обероном-2 Мессенбек и Вирт (1991)
- Что нового в Component Pascal (изменения с Oberon-2 на CP), Pfister (2001)