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

Оберон
OberonLogo.svg
ПарадигмаИмператив, структурированный, модульный, объектно-ориентированный
РазработаноНиклаус Вирт
Впервые появился1987
Печатная дисциплинасильный, гибридный (статический и динамический)
Интернет сайтwww.projectoberon.com
Под влиянием
Модула-2
Под влиянием
Оберон-2, Оберон-07, Зоннон, Идти, Ним, Активный Оберон, Компонент Паскаль

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

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

Дизайн

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

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

Характеристики

Для языка Оберон характерны следующие особенности:

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

Ориентация объекта

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

Набор методов

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

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

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

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

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

Обработчик сообщений

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

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

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

МОДУЛЬ Прямоугольники;ИМПОРТ Фигуры;ТИП   Прямоугольник * = УКАЗАТЕЛЬ НА RectangleDesc; RectangleDesc * = ЗАПИСЫВАТЬ      (Figures.FigureDesc) x, y, w, h: INTEGER; КОНЕЦ;ПРОЦЕДУРА Нарисуйте * (r: прямоугольник);НАЧИНАТЬ  (* ... *)КОНЕЦ Рисовать;(* Другие процедуры здесь *)ПРОЦЕДУРА Ручка * (f: рисунок; VAR msg: Figures.Message); VAR      r: прямоугольник;НАЧИНАТЬ   r: = f (прямоугольник); ЕСЛИ    сообщение ЯВЛЯЕТСЯ Рисунки.DrawMsg ТОГДА Ничья (r) ЭЛСИФ сообщение ЯВЛЯЕТСЯ Цифры.MarkMsg ТОГДА Марк (r) ЭЛСИФ сообщение ЯВЛЯЕТСЯ Цифры.MoveMsg ТОГДА Move (r, msg (Figures.MoveMsg) .dx, msg (Figures.MoveMsg) .dy) ЕЩЕ  (* игнорировать *)   КОНЕЦКОНЕЦ Ручка;ПРОЦЕДУРА Новый* (VAR r: прямоугольник);НАЧИНАТЬ   НОВЫЙ(р); Figures.Init (r, Handle);КОНЕЦ Новый;КОНЕЦ Прямоугольники.

В операционной системе Oberon оба этих метода используются для динамической диспетчеризации. Первый используется для известного набора методов; второй используется для любых новых методов, объявленных в модуле расширения. Например, если бы модуль расширения Rectangles реализовал новую процедуру Rotate (), в модуле Figures ее можно было бы вызвать только через обработчик сообщений.

Реализации и варианты

Оберон

Бесплатные реализации Oberon (язык) и Oberon (операционная система) можно найти в Интернете (некоторые из них принадлежат самой ETHZ).

Оберон-2

В первую выпущенную спецификацию были внесены некоторые изменения (были добавлены функции объектно-ориентированного программирования, например, был восстановлен цикл FOR); результат был Оберон-2. Есть релиз под названием Родной Оберон который включает в себя операционную систему и может напрямую загружаться на оборудовании класса ПК. А .СЕТЬ реализация Oberon с добавлением некоторых незначительных расширений, связанных с .NET, также была разработана в ETHZ. В 1993 году дочерняя компания ETHZ представила на рынке диалект Оберон-2 под названием Оберон-L, который был переименован в Компонент Паскаль в 1997 г.

Компиляторы Оберон-2, разработанные ETH, включают версии для Майкрософт Виндоус, Linux, Солярис, и классическая Mac OS. Кроме того, существуют реализации для различных других операционных систем, таких как Atari-TOS или же AmigaOS.

Есть Оберон-2 Лекс сканер и Yacc парсер Стивен Дж. Беван из Манчестерского университета, Великобритания, на основе справки Мессенбека и Вирта. Это версия 1.4.

Также есть Компилятор Oxford Oberon-2, который также понимает Оберон-07 и Вишап Оберон. Последний основан на транспилере Oberon to C Йозефа Темпла, который называется Офронт, который, в свою очередь, основан на компиляторе OP2, разработанном Регисом Крелье из ETHZ.

Оберон-07

Оберон-07, определенный Никлаусом Виртом в 2007 году и пересмотренный в 2011, 2013, 2014, 2015 и 2016 годах, основан на исходной версии Оберона, а не на Обероне-2. Основные изменения: должны использоваться явные числовые функции преобразования (например, FLOOR и FLT), операторы LOOP и EXIT удалены, операторы WHILE были расширены, операторы CASE могут использоваться для тестов расширения типа, операторы RETURN могут быть только связаны до конца функции импортированные переменные и параметры структурированного значения доступны только для чтения, а массивы можно назначать без использования КОПИРОВАНИЯ. Для получения полной информации см. Язык программирования Оберон-07.

Компиляторы Оберон-07 были разработаны для использования с несколькими различными компьютерными системами. Компилятор Вирта нацелен на RISC-процессор его собственной разработки, который использовался для реализации версии 2013 г. Проект Оберон операционная система на плате Xilinx FPGA Spartan-3. Также существуют порты процессора RISC для FPGA Spartan-6, Spartan-7, Artix-7 и эмулятора RISC для Windows (компилируемый в Linux и OS X, а также бинарные файлы, доступные для Windows). OBNC компилируется через C и может использоваться на любом POSIX совместимая операционная система. Коммерческий Astrobe реализация нацелена на 32-разрядные микроконтроллеры ARM Cortex-M3, M4 и M7. В Пачули компилятор создает 64-битные двоичные файлы Windows. Оберон-07М производит 32-битные двоичные файлы Windows и реализует версию 2008 языка. Акрона производит двоичные файлы как для Windows, так и для Linux. OberonJS переводит Оберон на JavaScript. Есть онлайн IDE для Оберона. Оберонк это реализация для Виртуальная машина Java.

Активный Оберон

Активный Оберон - еще один вариант Oberon, который добавляет объекты (с объектно-ориентированной защитой доступа и локальным контролем активности), защищенные системой утверждения, упреждающее планирование приоритетов и измененный синтаксис для методов (- процедуры с привязкой к типу в мире Oberon). Объекты могут быть активными, что означает, что они могут быть потоками или процессами. Кроме того, в Active Oberon есть способ реализации операторов (включая перегрузку), расширенный синтаксис для использования массивов (см. Расширения языка OberonX и разбирательства[8] 7-й совместной конференции по модульным языкам 2006 г. Оксфорд, Великобритания) и знает о пространства имен (видеть Предложение для контекстов модуля ). Операционная система A2 - Bluebottle, особенно ядро, синхронизирует и координирует различные активные объекты.

ETHZ выпустил Активный Оберон который поддерживает активные объекты, а Операционная система Bluebottle и среда (JDK, HTTP, FTP и т. д.) для языка. Как и многие предыдущие разработки от ETHZ, версии обоих доступны для загрузки в Интернете. Как это написано, как одиночные, так и двойные x86 Процессоры и Сильная рука семья поддерживается.

Родственные языки

В этой семье продолжалось развитие языков. Дальнейшее расширение Оберон-2, первоначально названное Оберон / L, но позже переименованное в Компонент Паскаль, был разработан для Windows и классическая Mac OS от Oberon microsystems, коммерческой компании, дочерней компании ETHZ, и для .NET от Квинслендский технологический университет. В дополнение Лагуна и Косой языки несут дух Оберона в специализированные области.

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

Оберон-V (первоначально назывался Сенека, после Сенека Младший ) является потомком Oberon, предназначенным для численных приложений на суперкомпьютеры, особенно векторных или конвейерных архитектур. Он включает конструкторы массива и оператор ALL. (См. «Seneca - язык для числовых приложений на векторных компьютерах», Proc CONPAR 90 - VAPP IV Conf. R. Griesemer, Diss Nr. 10277, ETH Zurich.)

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

Рекомендации

  1. ^ Вирт, Никлаус: От Модулы к Оберону и языку программирования Оберон, Технические отчеты ETH D-INFK, Band 82, https://doi.org/10.3929/ethz-a-005363226
  2. ^ Вирт, Никлаус: язык программирования Оберон. Программное обеспечение - практика и опыт, 18: 7, 661-670, июль 1988 г.
  3. ^ Вирт, Никлаус: От Модулы до Оберона. Программное обеспечение - практика и опыт, 18: 7, 671-690, июль 1988 г.
  4. ^ Вирт, Никлаус: Расширения типов. Транзакции ACM по языкам программирования, 10: 2, 204-214, апрель 1988 г.
  5. ^ Д. Понтан, Дети Модулы, Часть II: Оберон - BYTE 16 (3), 135-142, март 1991 г.
  6. ^ Вирт, Никлаус. "Журнал изменений Оберона". ETH Цюрих. Получено 10 марта 2020.
  7. ^ Mössenböck, Hanspeter. "Конструирование компилятора: искусство Никлауса Вирта" (PDF). Ftp.ssw.uni-linz.ac.at.
  8. ^ Фридрих, Феликс; Гуткнехт, Юрг (2006). "Типы объектов с матричной структурой для математического программирования". В Лайтфут, Дэвид Э .; Шиперски, Клеменс (ред.). Модульные языки программирования. «Модульные языки программирования». Конспект лекций по информатике. 4228. Шпрингер, Берлин, Гейдельберг. С. 195–210. Дои:10.1007/11860990_13. ISBN  978-3-540-40927-4.

внешняя ссылка

Общий

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