Оберон (язык программирования)
Парадигмы | Императивный , структурированный , модульный , объектно-ориентированный |
---|---|
Семья | Вирт Оберон |
Разработано | Никлаус Вирт |
Разработчик | Никлаус Вирт |
Впервые появился | 1987 год |
Стабильная версия | Оберон-07
/ 6 марта 2020 г |
Дисциплина набора текста | Сильный , гибридный ( статический и динамический ) |
Объем | Лексический |
Платформа | ARM , StrongARM ; ИА-32 , х86-64 ; СПАРК , Церера ( NS32032 ) |
ТЫ | Windows , Linux , Solaris , классическая Mac OS , Atari TOS , AmigaOS |
Веб-сайт | проектоберон |
Под влиянием | |
Модуль-2 | |
Под влиянием | |
Оберон-2 , Оберон-07 , Активный Оберон , Компонентный Паскаль , Зоннон , Го , В (Вланг) , Ним |
Оберон общего назначения, — язык программирования впервые опубликованный в 1987 году Никлаусом Виртом и последним членом виртовой семьи АЛГОЛ -подобных языков ( Эйлер , АЛГОЛ W , Паскаль , Модула и Модула-2 ). [1] [2] [3] [4] Оберон стал результатом концентрированных усилий по увеличению мощности Модулы-2 , прямого преемника Паскаля , и одновременно по снижению ее сложности. Его принципиальной новой особенностью является концепция типов данных расширения типов записей . [5] Он позволяет конструировать новые типы данных на основе существующих и связывать их, отклоняясь от догмы строгой статической типизации данных. Расширение типа — это способ наследования Вирта, отражающий точку зрения родительского сайта. Оберон был разработан как часть реализации операционной системы , также называемой Оберон, в ETH Zurich в Швейцарии . Название было вдохновлено фотографиями космического зонда «Вояджер» луны планеты Уран , названной Оберон , а также тем, что Оберон известен как король эльфов. [6]
Оберон поддерживался компанией Wirth, а последнее обновление компилятора Project Oberon датировано 6 марта 2020 года. [7]
Дизайн
[ редактировать ]Оберон разработан под девизом, приписываемым Альберту Эйнштейну : «Делайте вещи как можно проще, но не проще». Основная рекомендация заключалась в том, чтобы сконцентрироваться на основных и существенных функциях и опустить эфемерные проблемы. Другим фактором стало признание роста сложности таких языков, как C++ и Ada . В отличие от них Оберон подчеркивает использование концепции библиотеки для расширения языка. Типы перечислений и поддиапазонов, которые присутствовали в Модуле-2, были опущены, а типы наборов ограничены наборами целых чисел. Все импортированные элементы должны быть уточнены именем модуля, в котором они объявлены. Средства низкого уровня выделяются тем, что их можно использовать только в модуле, который включает идентификатор SYSTEM
в своем списке импорта. Строгая проверка типов , даже между модулями, а также проверка индексов во время выполнения , проверка нулевых указателей и концепция безопасного расширения типов во многом позволяют программированию полагаться только на правила языка.
Целью этой стратегии было создание языка, который легче изучать, проще реализовать и который очень эффективен. Компиляторы Oberon считаются компактными и быстрыми, обеспечивая при этом качество кода, сравнимое с коммерческими компиляторами. [8]
Характеристики
[ редактировать ]Особенности, характеризующие язык Оберон, включают: [9]
- Синтаксис, чувствительный к регистру, с ключевыми словами в верхнем регистре
- Расширение типа с тестом типа
- Модули и отдельная компиляция
- Строковые операции
- Изолирование небезопасного кода
- Поддержка системного программирования
Ориентация объекта
[ редактировать ]Оберон поддерживает расширение типов записей для создания абстракций и гетерогенных структур. В отличие от более поздних диалектов, Оберона-2 и Активного Оберона, в оригинальном Обероне отсутствует механизм диспетчеризации как особенность языка, но есть он как метод программирования или шаблон проектирования. Это дает большую гибкость в ООП. В операционной системе Оберон для диспетчерского вызова используются вместе два метода программирования: набор методов и обработчик сообщений.
Набор методов
[ редактировать ]таблица процедуры переменных В этом методе определяется , а глобальная переменная этого типа объявляется в расширенном модуле и присваивается обратно в универсальном модуле:
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.
Мы расширяем универсальный тип Рисунок до конкретной формы:
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.
Динамическая отправка осуществляется только с помощью процедур в модуле «Цифры», который является универсальным модулем.
Обработчик сообщений
[ редактировать ]Этот метод заключается в замене набора методов одной процедурой, которая различает различные методы:
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.
Мы расширяем универсальный тип Рисунок до конкретной формы:
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.
В операционной системе Оберон оба эти метода используются для динамической диспетчеризации. Первый используется для известного набора методов; второй используется для любых новых методов, объявленных в модуле расширения. Например, если бы модуль расширения Rectangles реализовал новую процедуру Rotate(), в модуле Figs ее можно было бы вызвать только через обработчик сообщений.
Реализации и варианты
[ редактировать ]Оберон
[ редактировать ]Бесплатные реализации Оберона (языка) и Оберона (операционной системы) можно найти в Интернете (некоторые из них принадлежат самой ETHZ).
Оберон-2
[ редактировать ]В первую выпущенную спецификацию было внесено несколько изменений. Например, были добавлены функции объектно-ориентированного программирования (ООП), FOR
петля была восстановлена. Результатом стал Оберон-2 . Один выпуск, названный Native Oberon , включает в себя операционную систему и может напрямую загружаться на совместимого с IBM PC оборудование класса, . Реализация Оберона на .NET с некоторыми добавленными незначительными расширениями, связанными с .NET, также была разработана в ETHZ. В 1993 году дочерняя компания университета ETHZ вывела на рынок диалект Оберона-2 под названием Оберон-L . В 1997 году он был переименован в Component Pascal .
Компиляторы Oberon-2, разработанные ETH, включают версии для Microsoft Windows , Linux , Solaris и классической Mac OS . Реализации из других источников существуют для некоторых других операционных систем, включая Atari TOS и AmigaOS .
Существует сканер Oberon-2 Lex и Yacc парсер , разработанный Стивеном Дж. Беваном из Манчестерского университета, Великобритания, на основе сканера, приведенного в справочнике Мессенбека и Вирта. Это версия 1.4.
Другие компиляторы включают Oxford Oberon-2, [10] который также понимает Оберон-07 и Вишап Оберон. [11] Последний основан на C под названием Ofront. Йозефа Темпла Oberon для языка компиляторе исходного кода (транспиляторе) [12] который, в свою очередь, основан на компиляторе OP2, разработанном Реджисом Крелье в ETHZ.
Оберон-07
[ редактировать ]Оберон-07, определенный Никлаусом Виртом в 2007 году и пересмотренный в 2008, 2011, 2013, 2014, 2015 и 2016 годах, основан на оригинальной версии Оберона, а не Оберона-2. Основные изменения: явные функции числового преобразования (например, FLOOR
и FLT
) необходимо использовать; тот WITH
, LOOP
и EXIT
заявления были опущены; WHILE
заявления были расширены; CASE
операторы могут использоваться для тестов расширения типа; RETURN
операторы могут быть связаны только с концом функции; импортированные переменные и параметры структурированных значений доступны только для чтения; и массивы можно назначать без использования COPY
. [13]
Компиляторы Оберон-07 были разработаны для использования со многими различными компьютерными системами. Компилятор Вирта нацелен на процессор компьютера с сокращенным набором команд (RISC) его собственной разработки, который использовался для реализации версии операционной системы Project Oberon 2013 года на плате программируемой вентильной матрицы (FPGA) Xilinx 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. Компилятор Patchouli создает 64-битные двоичные файлы Windows. Оберон-07М создает 32-битные двоичные файлы Windows и реализует язык версии 2008. Akron's производит двоичные файлы как для Windows, так и для Linux. OberonJS переводит Оберон на JavaScript . Существует онлайн-IDE для Оберона . оберонк представляет собой реализацию виртуальной машины Java .
Активный Оберон
[ редактировать ]Активный Оберон — это еще один вариант Оберона, который добавляет объекты (с объектно-центрированной защитой доступа и локальным контролем активности), защищенные системой утверждения, упреждающее планирование приоритетов и измененный синтаксис методов ( они называются процедурами с привязкой к типу в словаре Оберона ). Объекты могут быть активными, то есть могут быть потоками или процессами. Кроме того, в Active Oberon есть способ реализации операторов (включая перегрузку), расширенный синтаксис для использования массивов (см. Расширения языка OberonX и Труды). [14] участника 7-й совместной конференции по модульным языкам, 2006 г., Оксфорд, Великобритания), и знает о пространствах имен . [15] Операционная система A2 (ранее Active Object System (AOS)), [16] затем Bluebottle ), особенно ядро , синхронизирует и координирует различные активные объекты.
ETHZ выпустила Active Oberon , который поддерживает активные объекты и основанные на них операционные системы (Active Object System (AOS), Bluebottle, A2) и среду (JDK, HTTP, FTP и т. д.) для языка. Как и многие предыдущие разработки ETHZ, обе версии доступны для скачивания в Интернете. По состоянию на 2003 год поддерживаемые центральные процессоры (ЦП) включают одно- и двухъядерные процессоры x86 и StrongARM .
Родственные языки
[ редактировать ]Развитие продолжалось на языках этой семьи. Дальнейшее расширение Оберона-2 первоначально называлось Оберон/L, но позже было переименовано в Компонентный Паскаль (CP). CP был разработан для Windows и классической Mac OS компанией Oberon microsystems, коммерческой дочерней компанией ETHZ, а для .NET — Технологическим университетом Квинсленда . Далее, языки Лагуны [17] [18] [19] и Obliq внедряют методы Оберона в специализированные области.
Позже усилия по разработке .NET в ETHZ были сосредоточены на новом языке под названием Zonnon . Он включает в себя функции Оберона и восстанавливает некоторые из Паскаля (перечисляемые типы, встроенный ввод-вывод), но имеет некоторые синтаксические различия. Другие функции включают поддержку активных объектов, перегрузку операторов и обработку исключений.
Оберон-V (первоначально называвшийся Сенека, в честь Сенеки Младшего ) — потомок Оберона, предназначенный для численных приложений на суперкомпьютерах , особенно с векторной или конвейерной архитектурой. Он включает в себя конструкторы массивов и ALL
заявление. [20]
См. также
[ редактировать ]Ресурсы
[ редактировать ]Общий
[ редактировать ]- Официальный веб-сайт (последняя доступная копия в архиве org) в ETH-Zürich.
- Страница Оберона Никлауса Вирта в ETH Zurich
- Оберон Пейдж на SSW, Линц
- Оберон: язык программирования в Ульме
- Проект Оберон, Проектирование операционной системы и компилятора , книга в формате PDF Никлауса Вирта и Юрга Гуткнехта, издание 2005 г.
- Генеалогия языка Оберона
- Система разработки Астроб АРМ Оберон-07
- Oberon System V4 для HP OpenVMS Alpha с 64-битной адресацией, совместимой с исходным кодом
- 64-битный компилятор Оберон-2 для 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)
- Язык программирования Оберон-2 Х. Мессенбёк, Н. Вирт, Институт компьютерных систем, ETH Цюрих, январь 1992 г.
- Различия между Обероном и Обероном-2 Мессенбёк и Вирт (1991)
- Что нового в Component Pascal (изменения с Оберона-2 на CP), Pfister (2001)
Ссылки
[ редактировать ]- ^ Вирт, Никлаус (1987). От Модулы до Оберона и языка программирования Оберон (Отчет). Технические отчеты ETH D-INFK. Том. Группа 82. Уайли. дои : 10.3929/ethz-a-005363226 .
- ^ Вирт, Никлаус (июль 1988 г.). «Язык программирования Оберон». Программное обеспечение: практика и опыт . 18 (7): 661–670. дои : 10.1002/спе.4380180707 .
- ^ Вирт, Никлаус (июль 1988 г.). «От Модулы до Оберона». Программное обеспечение: практика и опыт . 18 (7): 671–690. дои : 10.1002/спе.4380180706 . S2CID 13092279 .
- ^ Вирт, Никлаус (апрель 1988 г.). «Расширения типов» . Транзакции ACM на языках программирования . 10 (2): 204–214. дои : 10.1145/42190.46167 . S2CID 15829497 .
- ^ Паунтейн, Д. Март 1991. «Дети Модулы, Часть II: Оберон» . Байт . Том. 16, нет. 3. С. 135–142.
{{cite magazine}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ Вирт, Николас ; Гуткнехт, Юрг (1987–2021). «Проект Оберон» (PDF) .
- ^ Вирт, Никлаус. «Журнал изменений Оберона» . ETH Цюрих . Проверено 16 января 2021 г.
- ^ Мессенбёк, Ханспетер. «Создание компилятора: искусство Никлауса Вирта» (PDF) . Университет Иоганна Кеплера.
- ^ Вирт, Никлаус ; Гуткнехт, Юрг (1987–2021). «Проект Оберон» .
- ^ Спайви (8 апреля 2019 г.). «Компилятор Оксфорд Оберон-2» . Проверено 17 января 2021 г.
- ^ dcwbrown (16 июня 2020 г.). «Компилятор Оберона Виши» . Гитхаб . Получено 17 января.
- ^ jtempl (2 января 2020 г.). «Фронт» . Гитхаб . Проверено 17 января 2021 г.
- ^ Вирт, Никлаус (3 мая 2016 г.). Язык программирования Оберон-07 (PDF) . ETH Zurich, факультет компьютерных наук (отчет) . Проверено 17 января 2021 г.
- ^ Фридрих, Феликс ; Гуткнехт, Юрг (2006). «Типы объектов со структурой массива для математического программирования». В Лайтфуте, Дэвид Э.; Шиперски, Клеменс (ред.). Модульные языки программирования . Конспекты лекций по информатике. Том. 4228. Шпрингер, Берлин Гейдельберг. стр. 195–210. дои : 10.1007/11860990_13 . ISBN 978-3-540-40927-4 . S2CID 34210781 .
- ^ «Предложение по контекстам модулей» (PDF) .
- ^ Мюллер, Питер Йоханнес (2002). Проектирование системы активных объектов и многопроцессорная реализация (PDF) (доктор философии). Швейцарский федеральный технологический институт, Цюрих ( ETH Zurich ).
- ^ Фрелих, Питер Х.; Франц, Майкл. О некоторых основных свойствах компонентно-ориентированных языков программирования (PDF) (Отчет). Калифорнийский университет в Ирвайне . Проверено 18 января 2021 г.
- ^ Фрелих, Питер Х.; Галь, Андреас; Франц, Майкл (апрель 2005 г.). «Поддержка композиции программного обеспечения на уровне языка программирования» . Наука компьютерного программирования . 56 (1–2). Эльзевир Б.В.: 41–57. дои : 10.1016/j.scico.2004.11.004 . Проверено 18 января 2021 г.
- ^ Франц, Майкл; Фрелих, Питер Х.; Кистлер, Томас (20 ноября 1999 г.). «На пути к языковой поддержке компонентно-ориентированного программирования реального времени». Труды: Пятый международный семинар по объектно-ориентированным надежным системам реального времени . Институт инженеров по электротехнике и электронике (IEEE). стр. 125–129. дои : 10.1109/WORDSF.1999.842343 . ISBN 0-7695-0616-Х . S2CID 6891092 . Проверено 21 января 2021 г.
- ^ Гриземер, Роберт (1993). «Язык числовых приложений на векторных компьютерах». Материалы CONPAR 90: Конференция VAPP IV, Diss Nr. 10277 . ETH Цюрих.