Оберон (язык программирования) - Oberon (programming language)

Оберон
Язык программирования Оберон logo.svg
Парадигмы Императивный , структурированный , модульный , объектно-ориентированный
Семья Вирт Оберон
Разработано Никлаус Вирт
Разработчик ETH Цюрих
Впервые появился 1987 ; 34 года назад ( 1987 )
Стабильный выпуск
Оберон-07/6 марта 2020 года ; 18 месяцев назад ( 2020-03-06 )
Печатная дисциплина Сильный , гибридный ( статический и динамический )
Сфера Лексический
Платформа ARM , StrongARM ; IA-32 , x86-64 ; SPARC , Церера ( NS32032 )
Операционные системы Windows , Linux , Solaris , классическая Mac OS , Atari TOS , AmigaOS
Веб-сайт www .projectoberon .com
Под влиянием
Модула-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оператор.

Смотрите также

Ресурсы

Общий

Эволюция Оберона

использованная литература