Оберон (забони барноманависӣ)
Как язык программирования, Оберон является прямым наследником Паскаля и Модулы-2. Удивительно, но факт: он одновременно и проще, и намного мощнее, чем Паскаль и Модула.
- Проще — благодаря исключению ряда средств, полезность которых на практике оказалась маргинальной или сомнительной (например, перечислимые типы и типы-диапазоны; в случае Модулы это ещё и вложенные модули, а также отдельные модули-определения).
- Намного мощнее — благодаря введению механизма автоматического управления памятью, ради полноценной интеграции которого в язык пришлось исключить/модифицировать некоторые языковые средства (например, вместо вариантных записей теперь следует использовать типы-потомки, произведенные от одного предка).
В первоначальном Обероне (1988) есть основной механизм объектно-ориентированного программирования — механизм расширения типов (наследование и полиморфизм).
В Обероне-2 (Вирт, Мёссенбёк, 1992) добавлены «методы» — процедуры, связанные с типом. В типах-потомках методы типа-предка могут переопределяться (с сохранением сигнатуры).
В Компонентном Паскале (Oberon microsystems, 1999) введен ряд уточнений по сравнению с Обероном-2, важных для повышения надежности больших программных комплексов; в частности, теперь язык полностью поддерживает методологию компонентно-ориентированного программирования. Благодаря последнему обстоятельству, Компонентный Паскаль на данный момент является, по-видимому, наиболее совершенным вариантом «классических» Оберонов.
Есть и группа экспериментальных языков, близкородственных Оберону, но отклоняющихся дальше от линии Оберон/Оберон-2/Компонентный Паскаль. Это Active Oberon и Zonnon. Их развивают в группе сподвижника Никлауса Вирта по проектам Модула-2 и Оберон Юрга Гуткнехта.
Есть ещё Оберон-0, Оберон-X, Oberon.NET … и этот список не полон. Дело в том, что простота Оберона и наличие исходников оригинального Оберона позволяет легко адаптировать его для специальных классов задач. Но все эти Обероны очень близки между собой, поскольку и первоначальный Оберон очень прост.
Наиболее зрелыми, видимо, следует считать ETH Oberon, реализации которого имеются для многих платформ, и Компонентный Паскаль.
Есть несколько систем разработки программ для различных вариантов языка Оберон: ETH Oberon, доступная для многих вычислительных платформ; оптимизирующий компилятор XDS для Oberon-2; Блэкбокс (BlackBox Component Builder) для Компонентного Паскаля.
Программы, написанные на языке программирования Оберон требуют определенной поддержки во время выполнения (динамический загрузчик и централизованно выполняемый автоматический сбор мусора). Поэтому, вообще говоря, одного компилятора здесь недостаточно — нужна специальная операционная среда. На самом деле такой операционной среде не обязательно нужна отдельная операционная система: она сама по себе может представлять собой операционную систему. Таковы системы Native Oberon для первоначального Оберона и Bluebottle для Active Oberon. В качестве операционной среды может выступать, например, платформа .NET компании Майкрософт, в которой реализовано автоматическое управление памятью (сбор мусора). Под .NET работают Oberon.NET и Zonnon, но эти проекты ещё не достигли необходимой степени зрелости, чтобы рекомендовать их в качестве рабочих инструментов.
Существует аналог Оберона — Глагол, который, в отличие от Оберона, изначально ориентирован на русский язык и использует русскоязычные управляющие слова.
Синтаксис языка [вироиш]
Синтаксис «Оберона-2» отличается компактностью. Он определён в следующих 33 предложениях РБНФ (даётся по Х. Мёссенбёк, Н. Вирт, 1996):
Модуль = MODULE идент ";" [СписокИмпорта] ПослОбъявл [BEGIN ПослОператоров] END идент ".".
СписокИмпорта = IMPORT [идент ":="] идент {"," [идент ":="] идент} ";".
ПослОбъявл = { CONST {ОбъявлКонст ";" } | TYPE {ОбъявлТипа ";" } | VAR {ОбъявлПерем ";" }}
{ОбъявлПроц ";" | ОпережающееОбъяв";"}.
ОбъявлКонст = ИдентОпр "=" КонстВыраж.
ОбъявлТипа = ИдентОпр "=" Тип.
ОбъявлПерем = СписокИдент ":" Тип.
ОбъявлПроц = PROCEDURE [Приемник] ИдентОпр [ФормальныеПарам]";" ПослОбъявл [BEGIN ПослОператоров] END идент.
ОпережающееОбъяв = PROCEDURE "^" [Приемник] ИдентОпр [ФормальныеПарам].
ФормальныеПарам = "(" [СекцияФП {";" СекцияФП}] ")" [":" УточнИдент].
СекцияФП = [VAR] идент {"," идент} ":" Тип.
Приемник = "(" [VAR] идент ":" идент ")".
Тип = УточнИдент | ARRAY [КонстВыраж {"," КонстВыраж}] OF Тип
| RECORD ["("УточнИдент")"] СписокПолей {";" СписокПолей} END | POINTER TO Тип | PROCEDURE [ФормальныеПарам].
СписокПолей = [СписокИдент ":" Тип].
ПослОператоров = Оператор {";" Оператор}.
Оператор = [ Обозначение ":=" Выраж
| Обозначение ["(" [СписокВыраж] ")"]
| IF Выраж THEN ПослОператоров {ELSIF Выраж THEN ПослОператоров} [ELSE ПослОператоров] END
| CASE Выраж OF Вариант {"|" Вариант} [ELSE ПослОператоров] END
| WHILE Выраж DO ПослОператоров END
| REPEAT ПослОператоров UNTIL Выраж
| FOR идент ":=" Выраж TO Выраж [BY КонстВыраж] DO ПослОператоров END
| LOOP ПослОператоров END
| WITH Охрана DO ПослОператоров {"|" Охрана DO ПослОператоров} [ELSE ПослОператоров] END
| EXIT
| RETURN [Выраж] ].
Вариант = [МеткиВарианта {"," МеткиВарианта} ":" ПослОператоров].
МеткиВарианта = КонстВыраж [".." КонстВыраж].
Охрана = УточнИдент ":" УточнИдент.
КонстВыраж = Выраж.
Выраж = ПростоеВыраж [Отношение ПростоеВыраж].
ПростоеВыраж = ["+" | "-"] Слагаемое {ОперСлож Слагаемое}.
Слагаемое = Множитель {ОперУмн Множитель}.
Множитель = Обозначение ["(" [СписокВыраж] ")"] | число | символ | строка | NIL | Множество
| "(" Выраж ")" | " ~ " Множитель.
Множество = "{" [Элемент {"," Элемент}] "}".
Элемент = Выраж [".." Выраж].
Отношение = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
ОперСлож = "+" | "-" | OR.
ОперУмн = "*" | "/" | DIV | MOD | "&".
Обозначение = УточнИдент {"." идент | "[" СписокВыраж "]" | "^" | "(" УточнИдент ")"}.
СписокВыраж = Выраж {"," Выраж}.
СписокИдент = ИдентОпр {"," ИдентОпр}.
УточнИдент = [идент "."] идент.
ИдентОпр = идент [ "*" | "-" ].
Литература по Оберону [вироиш]
К сожалению, на русском языке «бумажные» книги по Оберону пока не издавались. Тем не менее, сообщение о языке Оберон-2 (краткое, но исчерпывающее описание языка Никлаусом Виртом) было переведено на русский язык:
Также был выполнен перевод «Сообщения о языке Компонентный Паскаль» и документации по Блэкбоксу — наиболее интересной, с практической точки зрения, реализации языка. В качестве уроков по Блэкбоксу можно посоветовать работы русского учителя Ермакова И. Е. из города Орёл:
- «Знакомство со средой»
- «Пишем свой первый модуль»
- «Система BlackBox. Компонентный Паскаль.» (2Mb PDF)
На английском языке существуют следующие книги по BlackBox'у:
- Programming with BlackBox / J. Stanley Warford (2Mb rar)(англ.)
- Developing Programs with BlackBox Oberon / Brett S. Hallett (1.5Mb rar)(англ.)
Фундамент литературы по Оберону заложила «трилогия Оберона», а именно три книги от создателя языка (выложенные авторами в свободный доступ):
- Programming in Oberon: steps beyond Pascal and Modula. / Martin Reiser, Niklaus Wirth — NY: ACM Press, 1992 — ISBN 0-201-56543-9 — (22Mb PDF)(англ.)
- Лучшее введение в язык Оберон для новичков. Учебник и описание языка.
- Algorithms and Data Structures (Oberon Version) / N.Wirth — (1.2M PDF)(англ.)
- Программирование «в малом». Написание отдельных модулей: алгоритмы, структуры данных.
- Project Oberon: The Design of an Operating System and Compiler / N.Wirth, J.Gutknecht — (4.2M PDF)(англ.)
- Программирование «в большом». Сборка серьёзных проектов из модулей, объектов, компонент.
Также изучающим язык Оберон полезны лекции Никлауса Вирта на английском языке:
- The Programming Language Oberon / N.Wirth — (91Kb PDF)(англ.)
- Programming in Oberon. A derivative of Programming in Modula-2 / N.Wirth — (400Kb PDF)(англ.)
Ссылки [вироиш]
- Оберон (домашняя страничка на английском языке)
- Российский образовательный проект, отданный языку Оберон, на сайте есть русифицированный компилятор BlackBox
- Портал, посвящённый языку Оберон
- Первый (1998) сайт на русском языке по Оберону
- Компонентный Паскаль и среда BlackBox, на сайте есть Форум по Компонентному Паскалю и другим языкам семейства Оберон
- Глагол — русский Оберон