Оберон (мова програмування)
Oberon | |
---|---|
Парадигма | декілька: імперативна, структурована, модульна |
Дата появи | 1986 |
Творці | Ніклаус Вірт |
Розробник | Ніклаус Вірт |
Система типізації | статична, сильна, |
Під впливом від | Modula-2, Pascal |
Вплинула на | Modula-2, Oberon-2, Zonnon |
Ліцензія | Ліцензія BSD |
Вебсайт | projectoberon.net |
Оберон — мова програмування високого рівня, розроблена Ніклаусом Віртом. Для виконання програм цією мовою приназначена однойменна операційна система (автори Н. Вірт і Юрг Гуткнехт (Jurg Gutknecht)).
Програми, що написані мовою програмування Оберон, вимагають певної підтримки під час виконання — їм необхідний динамічний завантажувач і централізовано виконуваний автоматичний збирач сміття. Для цього програмам, що написані мовою Оберон, потрібне спеціальне операційне середовище. Звичайним способом його реалізації є додавання в систему набору бібліотек, що реалізують необхідні компоненти. Загалом кажучи, операційному середовищу зовсім не обов'язково потрібна окрема операційна система: воно само по собі може являти собою операційну систему. Такими є системи Native Oberon для первісного Оберона й Bluebottle для Active Oberon. У цей час існують компілятори Оберона в байт-код Віртуальної Java-машини і CLI для віртуальної машини .NET.
Операційними системами й середовищами для виконання програм на мовах родини Оберон, що розвилися з первісної системи Оберон, є ETH Oberon, BlackBox Component Builder, WinOberon, Bluebottle тощо.
На базі Оберона були розроблені проекти Оберон-0, Оберон-X та інші. Простота Оберона й наявність вихідних текстів оригінальної реалізації дозволяють легко адаптувати його для спеціальних класів завдань. Але всі ці Оберони дуже близькі між собою, оскільки й первісний Оберон дуже простий.
Основою для Оберона послужила мова Модула-2, що виросла з Паскаля, (за словами Вірта[1], спочатку систему хотіли писати безпосередньо на Модулі, але прийшли до висновку про необхідність її доробки й скорочення, що й привело до появи Оберона). Метою проекту (Project Oberon) Ніклауса Вірта і Юрга Гуткнехта в 1986–1989 роках[2] було створення з нуля доступної для розгляду й надійної операційної системи для однокористувальницької робочої станції.
Для реалізації цього проекту в 1988 році Ніклаусом Віртом була спроектована мова програмування високого рівня загального призначення, також названа Обероном.[3]
У 1989 році в ETH була випущена перша реалізація мови Оберон для процесорів родини NS32000. Вона була створена як компонент операційного середовища Оберон. Цей компілятор вимагає менше 50 Кбайт пам'яті, складається з 6 модулів загальним обсягом близько 4000 рядків і сам себе компілює за 15 секунд на комп'ютері із процесором NS32532 (тактова частота — 25 МГц).
Мова зберегла основні риси синтаксису Модули й була об'єктним розширенням. Це дозволило відмовитися від механізму варіантних записів Модули, що є відступом від первісної строгої статичної типізації, що дало можливість запровадити механізм автоматичного керування пам'яттю — збирання сміття: з мови виключена можливість звільнення динамічно виділеної пам'яті за допомогою особливого оператора, а замість нього саме середовище виконання містить модуль, що повертає невикористовувану пам'ять системі. Автоматичне керування пам'яттю є засобом підвищення надійності програм із динамічними структурами даних, тому що виключає людські помилки, властиві, наприклад, таким мовам, як С/C++.
Щоб досягти максимальної надійності та продуктивності трансляції, було здійснено значне спрощення мови за рахунок відмови від засобів, які було визнано непотрібними (виходячи з досвіду розробки, реалізації та експлуатації інших мов), або ускладнювали компілятор без належного виправдання з погляду продуктивності, або були занадто складними, аби передати в зовнішні бібліотеки, чи погано поєднувалися з механізмами модульності й автоматичного керування пам'яттю: записи з варіантами, перечислимі типи, типи-діапазони, множини загального виду, беззнаковий цілий тип, локальні модулі, модулі визначень, списки експорту, оператор for, колишній варіант оператора with, особливий синтаксис визначення головної програми. Рудиментарні засоби підтримки паралельного програмування, що були в Модулі-2, не ввійшли до мови, оскільки вона призначалася для однокористувацької операційної системи. З метою спрощення відмовилися від обробки винятків.
Було спрощено опис масивів (індекси масивів можуть бути тільки цілими числами і завжди починаються з нуля, подібно до мови C), обмежено використання вказівників (можуть існувати вказівники лише на записи та масиви), у списках імпорту вказується тільки імпортований модуль, а при використанні імпортованих імен потрібна обов'язкова кваліфікація (явне зазначення імені модуля-експортера). У статті «Від Модули до Оберона»[1] Вірт докладно прокоментував причини вилучення кожного з елементів.
З міркувань «достатнього мінімуму» до мови не було включено синтаксичного поняття методів (процедур і функцій), що пов'язані з типом, тому що цей механізм у найзагальнішому вигляді можна легко змоделювати, створюючи в об'єктах («записах» у мові Оберон) поля процедурного типу й надаючи їм значення процедур, що відповідають методам. Таким чином, в Обероні мінімальними засобами підтримується об'єктно-орієнтоване програмування для спрощення й прискорення процесу трансляції коду.
Завдяки внесеним змінам, Оберон став синтаксично простішим. Опис його синтаксису вмістився на одній сторінці, повний опис мови має близько 20 сторінок, що вдвічі менше за опис Модули-2. Оберон є якщо не мінімальною, то, у будь-якому разі, однією з найменших за обсягом універсальних мов програмування високого рівня.
Синтаксис «Оберона-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 | "&".
Позначення = УточнІдент {"." ідент | "[" СписокВиразів "]" | "^" | "(" УточнІдент ")"}.
СписокВиразів = Вираз {"," Вираз}.
СписокІдент = ІдентОзн {"," ІдентОзн}.
УточнІдент = [ідент "."] ідент.
ІдентОзн = ідент [ "*" | "-" ].
Програма на Обероні являє собою набір модулів. У загальному виді модуль має вигляд:
MODULE Ім'я; IMPORT СписокІмпорту; Означення; BEGIN Оператори END Ім'я.
Список імпорту визначає, з яких модулів будуть імпортовані зовнішні імена. Визначення включають визначення типів, процедур, функцій, змінних, констант. При цьому визначення імен, позначених зірочкою, експортуються даним модулем, тобто будуть видні іншим модулям, що імпортують даний. В Обероні-2 допустимо також позначати імена знаком мінус, у цьому випадку вони експортуються в режимі «тільки для читання».
Тіло модуля виконується при його завантаженні. У Компонентному Паскалі всередині тіла модуля (у розділі BEGIN..END) появилася можливість додати секцію CLOSE:
BEGIN Оператори CLOSE Оператори END Ім'я.
Тут оператори, розташовані між BEGIN і CLOSE, виконуються при завантаженні модуля, а оператори, розташовані між CLOSE і END — при вивантаженні його з пам'яті. Таке розширення було признане корисним для компонентних програм, які завантажують і вивантажують модулі динамічно.
Створювані програмістом типи даних обмежені наступним набором: типи-масиви ARRAY, типи-запису RECORD, процедурні типи PROCEDURE, типи-вказівники POINTER. Вказівник може вказувати тільки на масив або запис.
Синтаксис внутрішньої частини програми досить традиційний і простий. Мова підтримує традиційний набір конструкцій: умовний оператор IF, оператор вибору CASE, цикли (з передумовою — WHILE, з постумовою REPEAT..UNTIL, безумовний — LOOP, з лічильником — FOR). Подібно до Модули-2, великі й малі літери в ідентифікаторах різняться, усі зарезервовані слова пишуться великими літерами. Усі мовні конструкції, крім циклу REPEAT..UNTIL закінчуються ключовим словом END і допускають розташування усередині декількох операторів без використання складеного оператора BEGIN..END. Природно, як і в Модулі-2, немає безумовних переходів.
Парадигма об'єктно-орієнтованого програмування підтримується механізмом розширених записів (у мові немає окремого ключового слова для опису класів, таких, як «class» або «object», прийнято, що звичайного поняття «тип запис» цілком достатньо). По суті, кожний тип запис — це опис класу, а поля запису — це дані-члени класу.
У вихідному Обероні методів (процедур і функцій, пов'язаних із класом) немає взагалі. Механізм методів може бути використаний шляхом оголошення в записі полів процедурного типу, яким при створенні екземпляра класу надаються значення конкретних процедур. Виклик таких процедур провадиться традиційним способом звертання до поля запису, за умовчанням процедура не знає про екземпляр класу, для якого вона була викликана (немає механізму, аналогічного this
в C++ або Java, або Self
в Object Pascal), і якщо такі дані їй необхідні, то посилання на екземпляр повинне бути передане явно (наприклад, через параметр). Відсутність явно описуваних методів була однією із властивостей вихідного Оберона, що викликала критику призвичаєних до традиційних гібридних мов програмістів. З іншого боку, пропонований Обероном механізм дозволяє реалізувати все, що реалізовано традиційними засобами мов із методами, і, навіть більше того, — в Обероні кожен екземпляр класу може мати власний варіант методу (значення поля процедурного типу), тоді як при описі методів як частин класу всі екземпляри працюють з одним варіантом методу. В Обероні-2 методи були все-таки введені. Методи описуються окремо від типу запис, із зазначенням типу, з яким вони пов'язані.
Новий тип запис може бути оголошений як розширення існуючого. У цьому разі тип, що розширюється, вказується в описі запису в дужках після ключового слова RECORD. Розширений тип автоматично отримує всі поля розширюваного типу й (в Обероні-2) пов'язується з усіма процедурами, зв'язаними з розширюваним типом. Процедури, пов'язані з новим типом, можуть мати ту ж сигнатуру, що й процедури, пов'язані з розширюваним типом — у такий спосіб забезпечується перевизначення методів у породжених типах. У Компонентному Паскалі, з метою повнішого контролю за розширюваністю, типи запису за умовчанням не є розширюваними, а методи не можуть бути перевизначені. Щоб дозволити розширення записів і перевизначення методів, використовуються спеціально введені ключові слова EXTENSIBLE, ABSTRACT, LIMITED, EMPTY.
Приклад програми Hello, World! мовою Оберон.
- Компонентне програмування
Оберон націлений на компонентно-орієнтовану розробку програмного забезпечення[4] Інкапсуляція підтримується винятково на рівні модуля — усі типи, оголошені всередині модуля, один для одного абсолютно прозорі. З інших модулів доступно те, що оголошене при визначенні як експортоване.
Поліморфізм забезпечується за рахунок механізму методів (і процедурні поля в Обероні, і методи в Обероні-2 поводяться як віртуальні, у термінології більшості гібридних об'єктно-орієнтованих мов), а також завдяки розширеній конструкції WITH, що дозволяє виконувати різні групи операторів залежно від того, до якого з розширених типів відноситься її аргумент.
У мові відсутній спеціальний механізм конструкторів. Рекомендованим методом створення й ініціалізації об'єктів є опис породжуючих модулів і процедур (у традиційній термінології ООП — factory).
Програма в такій технології є набором відносно самостійних компонентів (у цьому разі — модулів), що мають приховану від зовнішнього світу внутрішню структуру й чітко визначений інтерфейс. Модулі можуть завантажуватися й вивантажуватися динамічно, під час роботи програми, система надає розвинуті засоби контролю типів під час виконання, які дозволяють писати універсальні алгоритми обробки даних, що не залежать від конкретних типів цих даних (наприклад, бібліотека для роботи із СКБД може надавати методи, що записують результат запиту з бази в запис довільної структури, якщо набір і типи полів цього запису відповідають набору й типам полів у БД).
У компонентній парадигмі вважається невдалим архітектурне рішення, пов'язане із широким використанням успадкування реалізацій від типів, оголошених в іншому компоненті, оскільки це призводить до явища, відомого як «крихкість базового типу» — після того, як від базового типу породжена велика кількість типів-нащадків (при цьому частина з них може бути навіть невідома розробнику базового типу), будь-які зміни в реалізації базового типу стають украй ризикованими, тому що вони можуть непередбаченим чином відобразитися на типах-нащадках.
Відомо, що однією із проблем застосування об'єктно-орієнтованого програмування в системному програмуванні є необхідність мати групи маленьких класів, які могли б взаємодіяти без додаткових накладних витрат. В Обероні цієї проблеми немає — всі типи, що визначені в одному модулі, бачать один одного, а проблем з надійністю це не створює, тому що модуль все-таки розробляється, тестується й супроводжується як єдине ціле.
Типова система, розроблена на Обероні, є набором модулів із процедурними інтерфейсами, через які модулі обмінюються даними, у тому числі й об'єктами. При цьому всі засоби інкапсуляції діють тільки в міжмодульній взаємодії, що робить зручним системне програмування з використанням об'єктів.
- Об'єктно-орієнтоване програмування
Засоби об'єктного програмування інтерпретуються в Обероні як природний розвиток засобів роботи із записами в модульній системі, точніше, як технічний інструментарій для вирішення конкретного архітектурного завдання: забезпечити ефективний «поділ праці» між різними модулями при роботі з динамічними типами й структурами даних: наприклад, робота із вказівниками в списку може бути прихована (разом із відповідними полями) в одному модулі, а визначення й робота з конкретним «наповненням» елементів списку — задаватися в іншому (або, частіше, інших). У цьому сенсі технологія об'єктного програмування в Обероні підпорядкована концепції модульності: вона тут є, скоріше, засобом опису даних, ніж засобом побудови архітектури застосунка в цілому.
За твердженням Вірта[5], розробники мови Java за кілька років до її створення «вивчили вихідні коди Оберона й, зокрема, вихідні коди оберонівських збирачів сміття. Потім вони зіпсували Оберон синтаксисом Сі й назвали отримане словом Java». Хоча від усного виступу не можна вимагати абсолютної точності формулювань, але у всякому разі безсумнівна подібність ідеологій Оберона й Java (прагнення до мінімалізму й строгої типізації, обмеження множинного успадкування, автоматичне керування пам'яттю) каже про те, що тут має місце певний консенсус щодо того, які засоби повинні складати ядро сучасної мови програмування загального призначення. Очевидно й те, що із двох мов Оберон спроектований набагато ретельніше.
У родину мов Оберон входять також Оберон-07, Оберон-2, Component Pascal (Компонентний Паскаль), Active Oberon, OberonScript тощо.
Вихідна версія Oberon («класичний Оберон») — найкоротша, з найменшою кількістю ключових слів і синтаксичних конструкцій. Вона була використана як база для створення родини мов, кожна з яких розширює класичну мову в якому-небудь напрямку або відрізняється від неї деякими деталями.
- Oberon-2
У 1992 році Ніклаус Вірт і його учень Ханспетер Месенбек (Hanspeter Moessenboek) — нині професор Університету ім. Йоганна Кеплера в Лінці — опублікували опис доповненого варіанта Оберона, що отримав назву Оберон-2. Він є уточненою версією класичного Оберона. Доповнення, внесені в Оберон-2, оформлені дуже економно й полягають у наступному:
- додані процедури, що пов'язані з типом і допускають перевизначення для породжених типів (наближений аналог віртуальних методів в інших об'єктно-орієнтованих мовах);
- у мову повернуто оператор FOR циклу із кроком;
- додана можливість експорту описів у режимі «тільки для читання».[6][7]
Цікаво, що незважаючи на розширення мови, обсяг формального опису синтаксису Оберона-2 менший, ніж обсяг опису класичного Оберона. Це сталося в результаті оптимізації опису синтаксису. Існує оптимізувальний компілятор XDS[8] для Oberon-2;
Є також компілятор мови Оберон-2[9]у байт-код віртуальної машини Ява (Java Virtual Machine). Розроблений С.Свердловим (Вологда, ВДПУ) в 1998 році компілятор працює в Windows 95/NT. Генерує файли класів (.class), які можуть завантажуватися й виконуватися віртуальною машиною мови Ява. Дозволяє створювати застосунки й аплети. Містить стандартні для Оберона вимоги бібліотеки, а також інтерфейси для Java API.
ETH Oberon, реалізації якого є для багатьох обчислювальних платформ.
- Компонентний Паскаль (Component Pascal)
Оберон-2 відразу після опублікування в 1992 році розглядався як кандидат на роль стандарту мови (конференція Oakwood Conference, Croydon, 1993), але практичний досвід, накопичений при створенні великих програмних комплексів, виявив деякі слабості нововведень і бажаність подальших уточнень (що зайвий раз підкреслює мудрість консерватизму, виявленого Віртом у визначенні класичного Оберона). Ці уточнення були початі у варіанті Оберона-2, названому Компонентний Паскаль і опублікованому в 1999 році, компанією Oberon microsystems[10], утвореної в 1992 році учнями Вірта (сам Вірт став членом ради директорів). Як і при переході від Оберона до Оберона-2, ці уточнення зроблені максимально економно[11]. Зокрема, тепер мова повністю підтримує методологію компонентно-орієнтованого програмування. Завдяки останній обставині, Компонентний Паскаль тепер є, мабуть, найдосконалішим серед прямих нащадків класичного Оберона. Однак він може бути скорочений не тільки до підмножини, еквівалентної первісному Оберону, але й до іншої повноцінної мінімалістичної підмножини, у якій спадкування й перевизначення методів допускається тільки для чисто інтерфейсних типів і методів (визначених з атрибутом ABSTRACT). Ця обставина виявляє дещо проміжний характер Оберона-2.
У Компонентний Паскаль у порівнянні з Обероном-2 додані засоби, що дозволяють розробникові повністю контролювати розширення експортованих типів і перевизначення методів (атрибути EXTENSIBLE, ABSTRACT, NEW, EMPTY, а також можливість обмежено��о експорту методу «тільки для реалізації»). Додано блок завершення тіла модуля (ключове слово CLOSE) і наперед визначений порожній метод FINALIZE. Система основних (елементарних) типів приведена у відповідність із типами Java. Уведено неявний рядковий тип. Компанія Oberon Microsystems, що визначила Компонентний Паскаль, випустила також бібліотеку BlackBox Component Framework і середовище візуального програмування BlackBox Component Builder[12] — невеликі за розміром і невимогливі до ресурсів, цілком побудовані на Компонентному Паскалі.
Згодом BlackBox був розширений середовищем крос-програмування Denia, що дозволяє виконувати крос-програмування для ОСРВ JBed (яка теж повністю реалізована на Компонентному Паскалі). JBed призначена для вбудованих систем, що працюють у реальному часі, наприклад, для промислових автоматів.
- Oberon SA і Oberon-07
Oberon SA — це версія мови Oberon, розроблена Н.Віртом для процесора Strong-ARM, використовуваного в безпілотному вертольоті.
На основі досвіду розробки Oberon SA Н.Вірт у 2007 році підготував зміни й доповнення до класичного Оберона[13][14] для строгішої підтримки структурного програмування, ніж, наприклад, в Oberon-2 або Компонентному Паскалі. Нова версія мови отримала назву Oberon-07[15]. Але відносно підтримки об'єктно-орієнтованого програмування мова Oberon-07 не йде за Обероном-2, а продовжує мінімалістичну лінію класичного Оберона, включаючи відсутність підтримки процедур, що прив'язані до типів записів.
Oberon-07 має такі основні відмінності від класичного Оберона:
- у циклі WHILE дозволені кілька охоронюваних гілок (ELSIF … DO). Тим самим забезпечена повна явна підтримка циклу Дейкстри[16]. Раніше цикл Дейкстри моделювався за допомогою циклу LOOP;
- відповідно, виключений неструктурований цикл LOOP разом з оператором EXIT (вихід із циклу);
- у процедурі тепер може бути тільки одна точка виходу, фіксована наприкінці тіла процедури: RETURN, по суті, перестав бути оператором, перетворившись у таку ж синтаксичну частину опису процедури, як ключове слово PROCEDURE і т. д.;
- доданий оператор циклу FOR;
- виключене неявне зведення типу INTEGER до REAL і типів із різною розрядністю один до одного;
- дозволені посилання тільки на записи;
- уточнене правило імпорту/експорту: експорт змінних дозволений тільки для читання, специфікатор експорту один — «*»;
- уточнені типи даних — CHAR підтримує множину Latin-1, INTEGER — −2^31 — +2^31-1, REAL і LONGREAL — IEEE Standard, 32 і 64 біти відповідно, SET — множину цілих між 0 і 31.
Австралійська компанія CFB Software (м. Брисбен) при Університеті штату Квінсленд розробила IDE Astrobe[17] для мови Oberon-07 і синтаксичні діаграми мови Oberon-07[18].
Ці мови вже можна називати не розширеннями чи версіями Оберона, а самостійними мовами. У них істотно розширено синтаксис, уведено конструкції для опису класичних «властивостей» (property) з контролем читання/запису, числові типи з розміром, що задається у бітах. Уведено підтримку активних об'єктів, що обмінюються повідомленнями у форматі, обумовленому РБНФ-описом, обробка винятків.
- Глагол
У Росії розроблено мову Глагол, структурно дуже близьку до Оберона-2. Головна її відмінність полягає у використанні російських службових слів. [19] [20] Крім цього, мова має ще ряд відмінностей від Оберона-2:
- вилучені методи (функції та процедури), що пов'язані з типом;
- не використовуються псевдоніми в оголошеннях імпорту модулів;
- додана умовна компіляція вихідних текстів;
- додана можливість безпосередньо вказувати шлях до використовуваних модулів;
- додана спеціальна позначка для головного модуля програми, що запускається;
- доданий вбудований тип-ітератор для прискорення послідовного доступу до масиву;
- змінені позначки експорту для змінних, констант і процедур, а також спосіб указання параметрів-змінних;
- змінений синтаксис оператора WITH (ДЛЯ);
- заборонена передача через параметри процедур масивів і записів;
- змінені розміри деяких типів даних;
- змінений набір убудованих процедур і склад системних модулів.
Мова підтримує юнікод. Реалізовано компілятор (називаний перетворювачем) для платформ Windows і PocketPC, а також середовище розробки (також для Windows).
- За підрахунками, опублікованими в статті Сергія Свердлова «Арифметика синтаксису», «лінія Вірта», як він її назвав — лінія, що включає Паскаль, Модулу-2, Оберон і Оберон-2 — це єдиний приклад «генетичної лінії» мов-нащадків Алголу-60, у якій складність мови, визначена з необхідними застереженнями як кількість лексем у її описі, стабільно знижувалася й у цей час виявляється нижчою, ніж у загального «прабатька» — Алголу-60. Усі мови «лінії Вірта» простіші за Алгол-60, і кожна наступна мова в цій лінії простіша за попередню. У той же час Ада більш ніж удвічі складніша за свого попередника — Паскаля, C++ приблизно в 1,7 раза складніший за Сі, а в лінійці Паскаль — Турбо Паскаль різних версій — Object Pascal складність експоненціально зростає від версії до версії.
- Епіграфом до опису оригінального Оберона була обрана фраза Ейнштейна: «Роби настільки просто, наскільки можливо, але не простіше цього». В описі Оберона-2 цього епіграфа немає.
- ↑ а б Н. Вірт. Від Модули до Оберона. Архів оригіналу за 19 вересня 2011. Процитовано 18 серпня 2010.
- ↑ N. Wirth and J. Gutknecht. Project Oberon. Addison-Wesley, 1992
- ↑ N. Wirth. The Programming Language Oberon. Software — Practice and Experience, Vol.18, No.7, p.671-690
- ↑ C. Szyperski. Component Software — Beyond Object-Oriented Programming. Addison-Wesley, 1998.
- ↑ Лекція Н. Вірта в Нижньогородському державному університеті ім. М. I. Лобачевського
- ↑ Мова програмування Оберон-2 [Архівовано 31 липня 2011 у Wayback Machine.], Х.Мессенбек, Н.Вірт
- ↑ A Description of the Oberon-2 Language, Paul Floyd (англ.)
- ↑ XDS Family of Products. Архів оригіналу за 23 серпня 2011. Процитовано 18 серпня 2010.
- ↑ Компілятор Оберон-2 у байт-код віртуальної машини Ява ([[Java Virtual Machine]]). Архів оригіналу за 21 серпня 2010. Процитовано 18 серпня 2010.
- ↑ Oberon microsystems AG
- ↑ Повідомлення про мову Компонентний Паскаль
- ↑ BlackBox Component Builder. Архів оригіналу за 18 грудня 2019. Процитовано 18 серпня 2010.
- ↑ Difference between Oberon-07 and Oberon (PDF). Архів оригіналу (PDF) за 26 травня 2011. Процитовано 26 травня 2011.
- ↑ Oberon at a glance (PDF). Архів оригіналу (PDF) за 6 січня 2012. Процитовано 6 січня 2012.
- ↑ The Programming Language Oberon, rev. 1.12.2007 (PDF). Архів оригіналу (PDF) за 19.04.2009. Процитовано 19.04.2009.
- ↑ Е.Дейкстра. Дисципліна програмування. Мир, Москва, 1978
- ↑ IDE Astrobe для мови Oberon-07
- ↑ Синтаксичні діаграми мови Oberon-07[недоступне посилання з червня 2019]
- ↑ Розробки на Глаголі. Архів оригіналу за 21 серпня 2011. Процитовано 18 серпня 2010., glagol.nad.ru
- ↑ Офіційний сайт мови Глагол. Архів оригіналу за 21 серпня 2011. Процитовано 18 серпня 2010.
- Свердлов С. З. Мови програмування й методи трансляції, Питер, 2007, ISBN 978-5-469-00378-6(рос.)
- далі — англійською мовою
- Martin Reiser, Niklaus Wirth. Programming in Oberon: steps beyond Pascal and Modula — NY: ACM Press, 1992 — ISBN 0-201-56543-9, 22Mb
- N.Wirth. Algorithms and Data Structures (Oberon Version), 1.2 Мб
- N.Wirth, J.Gutknecht.Project Oberon: The Design of an Operating System and Compiler, 4.2Мб PDF
- N.Wirth.The Programming Language Oberon[недоступне посилання з червня 2019], 91Кб
- N.Wirth.Programming in Oberon. A derivative of Programming in Modula-2, 400Кб
- ETH: Oberon (англ.)
- Мова Оберон. Короткий путівник. Руслан Богатирьов, Мир ПК, жовтень 2005(рос.)
- Месенбек, Н. Вірт. Мова програмування Оберон-2, Інститут комп'ютерних систем, ETH, Цюрих,1996. (рос.) pdf[недоступне посилання з квітня 2019] (рос.)
- Мова програмування Оберон- перший російський ресурс (1998) (рос.)
- Портал OberonCore.ru (рос.)
- Портал про ОС A2 і мову Active Oberon (рос.)
- Мови програмування й технології «Оберон»: перспективи для індустрії та освіти, Орловський ДУ, матеріали секції-семінару, 30 березня 2006 р. (рос.)
- Підготовка навчальних посібників російською мовою (рос.)