Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Оберон - это язык программирования общего назначения, впервые опубликованный в 1987 году Никлаусом Виртом и последний член виртовского семейства языков, подобных АЛГОЛу ( Euler , ALGOL W , Pascal , Modula и Modula-2 ). [1] [2] [3] [4] Oberon был результатом сосредоточенных усилий по увеличению мощности Modula-2 , прямого преемника Паскаля , и одновременно по снижению его сложности. Его принципиальная новая функция - это концепция расширения типов записей. [5]Это позволяет создавать новые типы данных на основе существующих и связывать их, отклоняясь от догмы строго статической типизации данных. Расширение типа - это способ наследования Wirth, отражающий точку зрения родительского сайта. Oberon был разработан как часть реализации операционной системы , также названной Oberon в ETH Zurich в Швейцарии . Название происходит от луны планеты Уран , названной Оберон .

Оберон по-прежнему поддерживается Wirth, а последнее обновление компилятора Project Oberon датировано 6 марта 2020 г. [6]

Дизайн [ править ]

Оберон разработан с девизом, приписываемым Альберту Эйнштейну : «Делайте вещи как можно проще, но не проще». Основная рекомендация заключалась в том, чтобы сконцентрироваться на основных и важных функциях и исключить эфемерные проблемы. Еще одним фактором было признание роста сложности таких языков, как C ++ и Ada . В отличие от них, Оберон подчеркивает использование библиотеки.концепция расширения языка. Типы перечисления и поддиапазона, которые присутствовали в Модуле-2, были опущены; аналогично, типы наборов были ограничены небольшими наборами целых чисел, а количество низкоуровневых средств было резко сокращено (особенно, функции передачи типов были опущены). Отказ от оставшихся потенциально небезопасных средств завершает наиболее важный шаг к получению действительно высокоуровневого языка программирования . Очень тщательная проверка типов даже между модулями, строгая проверка индекса во время выполнения , проверка нулевого указателя и концепция безопасного расширения типа в значительной степени позволяют программированию полагаться только на правила языка.

Цель этой стратегии состояла в том, чтобы создать язык, который легче выучить, проще в реализации и очень эффективен. Компиляторы Oberon считаются компактными и быстрыми, обеспечивая при этом адекватное качество кода по сравнению с коммерческими компиляторами. [7]

Характеристики [ править ]

Особенности, характеризующие язык Оберон, включают: [8]

  • Синтаксис с учетом регистра с ключевыми словами в верхнем регистре
  • Расширение типа с типовым испытанием
  • Модули и раздельная компиляция
  • Строковые операции
  • Изоляция небезопасного кода
  • Поддержка системного программирования

Ориентация объекта [ править ]

Oberon поддерживает расширение типов записей для построения абстракций и разнородных структур. В отличие от более поздних диалектов, Оберон-2 и Активный Оберон, в оригинальном Обероне отсутствует механизм диспетчеризации как языковая функция, но он используется как метод программирования или шаблон проектирования. Это дает большую гибкость в ООП. В операционной системе Oberon для вызова диспетчеризации используются вместе два метода программирования: набор методов и обработчик сообщений.

Набор методов [ править ]

В этом методе определяется таблица переменных процедуры, а глобальная переменная этого типа объявляется в расширенном модуле и назначается обратно в универсальном модуле:

МОДУЛЬ Фигуры; (* Абстрактный модуль *)ТИП Figure * = УКАЗАТЕЛЬ НА FigureDesc; Интерфейс * = УКАЗАТЕЛЬ НА InterfaceDesc; InterfaceDesc * = RECORD draw *: PROCEDURE (f: рисунок); clear *: PROCEDURE (f: рисунок); отметка *: ПРОЦЕДУРА (f: рисунок); move *: PROCEDURE (f: Рисунок; dx, dy: INTEGER ); КОНЕЦ ; FigureDesc * = ЗАПИСЬ если: Интерфейс; КОНЕЦ ;ПРОЦЕДУРА Init * (f: рисунок; if: интерфейс);НАЧИНАТЬ f.if: = если;END Init;ПРОЦЕДУРА Рисование * (f: рисунок);НАЧИНАТЬ f.if.draw (f);КОНЕЦ Draw;(* Другие процедуры здесь *)КОНЕЦ Цифры.

Мы расширяем общий тип Figure до определенной формы:

МОДУЛЬ Прямоугольники;ИМПОРТ Цифры;TYPE Rectangle * = УКАЗАТЕЛЬ НА RectangleDesc; RectangleDesc * = ЗАПИСЬ (Рисунки.FigureDesc) x, y, w, h: INTEGER ; КОНЕЦ ;VAR если: Рисунки.Интерфейс;ПРОЦЕДУРА Новый * ( VAR r: прямоугольник);НАЧАТЬ  НОВЫЙ (r); Figures.Init (r, if);КОНЕЦ Новый;ПРОЦЕДУРА Рисование * (f: рисунок); VAR r: прямоугольник;НАЧАТЬ r: = f (прямоугольник); (* f AS прямоугольник *)  (* ... *) END Draw;(* Другие процедуры здесь *)BEGIN  (* инициализация модуля *)  NEW (если); if.draw: = Ничья; if.clear: = Очистить; if.mark: = Отметить; if.move: = Переместить;КОНЕЦ Прямоугольники.

Динамическая отправка выполняется только с помощью процедур в модуле Figures, который является универсальным модулем.

Обработчик сообщений [ править ]

Этот метод заключается в замене набора методов одной процедурой, которая различает различные методы:

МОДУЛЬ Фигуры; (* Абстрактный модуль *)ТИП Figure * = УКАЗАТЕЛЬ НА FigureDesc; Сообщение * = ЗАПИСЬ КОНЕЦ ; DrawMsg * = ЗАПИСЬ (сообщение) КОНЕЦ ; ClearMsg * = ЗАПИСЬ (сообщение) КОНЕЦ ; MarkMsg * = ЗАПИСЬ (Сообщение) КОНЕЦ ; MoveMsg * = ЗАПИСЬ (Сообщение) dx *, dy *: INTEGER  END ; Обработчик * = ПРОЦЕДУРА (f: рисунок; VAR msg: сообщение); FigureDesc * = ЗАПИСЬ  (* Аннотация *) ручка: Handler; КОНЕЦ ;PROCEDURE Handle * (f: рисунок; VAR msg: сообщение);НАЧИНАТЬ f.handle (f, msg);END Handle;ПРОЦЕДУРА Init * (f: рисунок; дескриптор: обработчик);НАЧИНАТЬ f.handle: = ручка;END Init;КОНЕЦ Цифры.

Мы расширяем общий тип Figure до определенной формы:

МОДУЛЬ Прямоугольники;ИМПОРТ Цифры;TYPE Rectangle * = УКАЗАТЕЛЬ НА RectangleDesc; RectangleDesc * = ЗАПИСЬ (Рисунки.FigureDesc) x, y, w, h: INTEGER; КОНЕЦ ;ПРОЦЕДУРА Рисование * (r: прямоугольник);НАЧАЛО  (* ... *) КОНЕЦ Рисование;(* Другие процедуры здесь *)PROCEDURE Handle * (f: Рисунок; VAR msg: Figures.Message); VAR r: прямоугольник;НАЧИНАТЬ r: = f (прямоугольник); IF msg IS Цифры.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  (* игнорировать *)  END END Обработчик;ПРОЦЕДУРА Новый * ( VAR r: прямоугольник);НАЧАТЬ  НОВЫЙ (r); Figures.Init (r, Handle);КОНЕЦ Новый;КОНЕЦ Прямоугольники.

В операционной системе 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, созданный Стивеном Дж. Беваном из Манчестерского университета, Великобритания, основанный на том, что приведено в справочнике Mössenböck и Wirth. Это версия 1.4.

Другие компиляторы включают Oxford Oberon-2 [9], который также понимает Oberon-07, и Vishap Oberon. [10] Последний основан на компиляторе «исходный код» (транспилятор) языка C Джозефа Темпла «Оберон», названном Ofront, [11] который, в свою очередь, основан на компиляторе OP2, разработанном Регисом Крелье из ETHZ.

Оберон-07 [ править ]

Оберон-07, определенный Никлаусом Виртом в 2007 году и пересмотренный в 2008, 2011, 2013, 2014, 2015 и 2016 годах, основан на исходной версии Оберона, а не на Обероне-2. Основные изменения: необходимо использовать функции явного числового преобразования (например, FLOORи FLT) WITH, операторы , LOOPи EXITбыли опущены, WHILEоператоры были расширены, CASEоператоры могут использоваться для тестов расширения типа, RETURNоператоры могут быть связаны только с концом функции, импортированные переменные и параметры структурированного значения доступны только для чтения, а массивы можно назначать без использования COPY. [12]

Компиляторы Оберон-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 и Труды [13] 7-й совместной конференции по модульным языкам 2006 г., Оксфорд, Великобритания), а также известно о пространствах имен . [14] Операционная система A2, Bluebottle , особенно ядро, синхронизирует и координирует различные активные объекты.

ETHZ выпустила Active Oberon, который поддерживает активные объекты, а также операционную систему и среду Bluebottle (JDK, HTTP, FTP и т. Д.) Для языка. Как и многие предыдущие разработки от ETHZ, версии обоих доступны для загрузки в Интернете. С 2003 года поддерживаются как одиночные, так и двойные процессоры x86 , а также семейство StrongARM .

Связанные языки [ править ]

Развитие языков в этой семье продолжалось. Дальнейшее расширение Oberon-2, первоначально называвшееся Oberon / L, но позже переименованное в Component Pascal , было разработано для Windows и классической Mac OS компанией Oberon Microsystems, дочерней коммерческой компанией ETHZ, и для .NET Технологическим университетом Квинсленда. . Кроме того, языки Lagoona [15] [16] [17] и Obliq переносят методы Оберона в специализированные области.

Недавние усилия по разработке .NET в ETHZ были сосредоточены на новом языке под названием Zonnon . Это включает в себя функции Oberon и некоторые из них восстанавливает из Pascal (перечисляемые типы, встроенный ввод-вывод), но имеет некоторые синтаксические отличия. Другие функции включают поддержку активных объектов, перегрузку операторов и обработку исключений. Zonnon доступен как плагин языка для Microsoft Visual Studio для среды разработки .NET.

Oberon-V (первоначально названный Seneca в честь Сенеки Младшего ) является потомком Oberon, разработанным для числовых приложений на суперкомпьютерах , особенно векторных или конвейерных архитектур. Он включает в себя конструкторы массивов и ALLоператор. [18]

См. Также [ править ]

  • Оберон (операционная система)
  • ОС Bluebottle
  • Оберон в Викиучебнике

Ресурсы [ править ]

Общие [ править ]

  • Официальный веб-сайт (последняя доступная копия в архивной организации) в 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 с подсветкой синтаксиса, семантической навигацией и отладчиком исходного кода
  • Статья Джозефа Темпла в Обероне в январском выпуске журнала Dr.Dobbs за 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)

Ссылки [ править ]

  1. Вирт, Никлаус. От Модулы до Оберона и языка программирования Оберон (Отчет). Технические отчеты ETH D-INFK. Группа 82. Wiley.
  2. Вирт, Никлаус (июль 1988 г.). «Язык программирования Оберон». Программное обеспечение: практика и опыт . 18 (7): 661–670.
  3. Вирт, Никлаус (июль 1988 г.). От Модулы до Оберона. Программное обеспечение: практика и опыт (Отчет). 18 . С. 671–690.
  4. Вирт, Никлаус (апрель 1988 г.). «Расширения типов». Транзакции ACM на языках программирования . 10 (2): 204–214.
  5. ^ Pountain, D. марта 1991 года "Дети Modula, часть II: Оберон" . Байт . Vol. 16 нет. 3. С. 135–142.
  6. Вирт, Никлаус. "Журнал изменений Оберона" . ETH Zurich . Проверено 16 января 2021 года .
  7. ^ Mössenböck, Hanspeter. «Конструирование компилятора: искусство Никлауса Вирта» (PDF) . Университет Иоганна Кеплера.
  8. Вирт, Никлаус ; Гуткнехт, Юрг (1987–2021). «Проект Оберон» .
  9. ^ Спайвей (8 апреля 2019). "Компилятор Оксфорд Оберон-2" . Проверено 17 января 2021 года .
  10. ^ dcwbrown (16 июня 2020 г.). "Компилятор Vishap Oberon" . GitHub . Проверено 17 января 2021 года .
  11. ^ jtempl (2 января 2020 г.). «Офронт» . GitHub . Проверено 17 января 2021 года .
  12. Вирт, Никлаус (3 мая 2016 г.). Язык программирования Оберон-07 (PDF) . ETH Zurich, Департамент компьютерных наук (отчет) . Проверено 17 января 2021 года .
  13. ^ Фридрих, Феликс ; Гуткнехт, Юрг (2006). "Типы объектов с матричной структурой для математического программирования". В Лайтфут, Дэвид Э .; Шиперски, Клеменс (ред.). Модульные языки программирования . Модульные языки программирования . Конспект лекций по информатике. 4228 . Шпрингер, Берлин, Гейдельберг. С. 195–210. DOI : 10.1007 / 11860990_13 . ISBN 978-3-540-40927-4.
  14. ^ «Предложение для контекстов модуля» (PDF) .
  15. ^ Fröhlich, Питер Х .; Франц, Майкл. О некоторых основных свойствах компонентно-ориентированных языков программирования (PDF) (Отчет). Калифорнийский университет в Ирвине . Проверено 18 января 2021 года .
  16. ^ Fröhlich, Питер Х .; Галь, Андреас; Франц, Майкл (апрель 2005 г.). «Поддержка композиции программного обеспечения на уровне языков программирования». Наука компьютерного программирования . Elsevier BV 56 (1-2): 41-57. DOI : 10.1016 / j.scico.2004.11.004 . Проверено 18 января 2021 года.
  17. ^ Франц, Майкл; Fröhlich, Peter H .; Кистлер, Томас (20 ноября 1999 г.). «На пути к языковой поддержке компонентно-ориентированного программирования в реальном времени». Труды: Пятый международный семинар по объектно-ориентированным надежным системам реального времени . Институт инженеров по электротехнике и радиоэлектронике (IEEE). С. 125–129. DOI : 10,1109 / WORDSF.1999.842343 . ISBN 0-7695-0616-X. Проверено 21 января 2021 года.
  18. ^ Гриземер, Роберт (1993). «Язык для числовых приложений на векторных компьютерах». Труды CONPAR 90: Конференция VAPP IV, Diss Nr. 10277 . ETH Zurich.