Jump to content

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

(Перенаправлено с Оберона-07 )

Оберон
Парадигмы Императивный , структурированный , модульный , объектно-ориентированный
Семья Вирт Оберон
Разработано Никлаус Вирт Отредактируйте это в Викиданных
Разработчик Никлаус Вирт Отредактируйте это в Викиданных
Впервые появился 1987 год ; 37 лет назад ( 1987 )
Стабильная версия
Оберон-07 / 6 марта 2020 г .; 4 года назад ( 06.03.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).

В первую выпущенную спецификацию было внесено несколько изменений. Например, были добавлены функции объектно-ориентированного программирования (ООП), 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]

См. также

[ редактировать ]

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

[ редактировать ]
  1. ^ Вирт, Никлаус (1987). От Модулы до Оберона и языка программирования Оберон (Отчет). Технические отчеты ETH D-INFK. Том. Группа 82. Уайли. дои : 10.3929/ethz-a-005363226 .
  2. ^ Вирт, Никлаус (июль 1988 г.). «Язык программирования Оберон». Программное обеспечение: практика и опыт . 18 (7): 661–670. дои : 10.1002/спе.4380180707 .
  3. ^ Вирт, Никлаус (июль 1988 г.). «От Модулы до Оберона». Программное обеспечение: практика и опыт . 18 (7): 671–690. дои : 10.1002/спе.4380180706 . S2CID   13092279 .
  4. ^ Вирт, Никлаус (апрель 1988 г.). «Расширения типов» . Транзакции ACM на языках программирования . 10 (2): 204–214. дои : 10.1145/42190.46167 . S2CID   15829497 .
  5. ^ Паунтейн, Д. Март 1991. «Дети Модулы, Часть II: Оберон» . Байт . Том. 16, нет. 3. С. 135–142. {{cite magazine}}: CS1 maint: числовые имена: список авторов ( ссылка )
  6. ^ Вирт, Николас ; Гуткнехт, Юрг (1987–2021). «Проект Оберон» (PDF) .
  7. ^ Вирт, Никлаус. «Журнал изменений Оберона» . ETH Цюрих . Проверено 16 января 2021 г.
  8. ^ Мессенбёк, Ханспетер. «Создание компилятора: искусство Никлауса Вирта» (PDF) . Университет Иоганна Кеплера.
  9. ^ Вирт, Никлаус ; Гуткнехт, Юрг (1987–2021). «Проект Оберон» .
  10. ^ Спайви (8 апреля 2019 г.). «Компилятор Оксфорд Оберон-2» . Проверено 17 января 2021 г.
  11. ^ dcwbrown (16 июня 2020 г.). «Компилятор Оберона Виши» . Гитхаб . Получено 17 января.
  12. ^ jtempl (2 января 2020 г.). «Фронт» . Гитхаб . Проверено 17 января 2021 г.
  13. ^ Вирт, Никлаус (3 мая 2016 г.). Язык программирования Оберон-07 (PDF) . ETH Zurich, факультет компьютерных наук (отчет) . Проверено 17 января 2021 г.
  14. ^ Фридрих, Феликс ; Гуткнехт, Юрг (2006). «Типы объектов со структурой массива для математического программирования». В Лайтфуте, Дэвид Э.; Шиперски, Клеменс (ред.). Модульные языки программирования . Конспекты лекций по информатике. Том. 4228. Шпрингер, Берлин Гейдельберг. стр. 195–210. дои : 10.1007/11860990_13 . ISBN  978-3-540-40927-4 . S2CID   34210781 .
  15. ^ «Предложение по контекстам модулей» (PDF) .
  16. ^ Мюллер, Питер Йоханнес (2002). Проектирование системы активных объектов и многопроцессорная реализация (PDF) (доктор философии). Швейцарский федеральный технологический институт, Цюрих ( ETH Zurich ).
  17. ^ Фрелих, Питер Х.; Франц, Майкл. О некоторых основных свойствах компонентно-ориентированных языков программирования (PDF) (Отчет). Калифорнийский университет в Ирвайне . Проверено 18 января 2021 г.
  18. ^ Фрелих, Питер Х.; Галь, Андреас; Франц, Майкл (апрель 2005 г.). «Поддержка композиции программного обеспечения на уровне языка программирования» . Наука компьютерного программирования . 56 (1–2). Эльзевир Б.В.: 41–57. дои : 10.1016/j.scico.2004.11.004 . Проверено 18 января 2021 г.
  19. ^ Франц, Майкл; Фрелих, Питер Х.; Кистлер, Томас (20 ноября 1999 г.). «На пути к языковой поддержке компонентно-ориентированного программирования реального времени». Труды: Пятый международный семинар по объектно-ориентированным надежным системам реального времени . Институт инженеров по электротехнике и электронике (IEEE). стр. 125–129. дои : 10.1109/WORDSF.1999.842343 . ISBN  0-7695-0616-Х . S2CID   6891092 . Проверено 21 января 2021 г.
  20. ^ Гриземер, Роберт (1993). «Язык числовых приложений на векторных компьютерах». Материалы CONPAR 90: Конференция VAPP IV, Diss Nr. 10277 . ETH Цюрих.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 674292ababf40507cdca6f08826fe076__1718548320
URL1:https://arc.ask3.ru/arc/aa/67/76/674292ababf40507cdca6f08826fe076.html
Заголовок, (Title) документа по адресу, URL1:
Oberon (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)