Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

Оберон (мова програмування)


OberonLogo.png

План:


Введення

Оберон - мова програмування високого рівня, розроблений Никлаусом Віртом, для виконання програм на якому призначена однойменна операційна система, авторами якої є Н. Вірт і Юрг Гуткнехт (Jurg Gutknecht).


1. Системи і середовища

Програми, написані на мові програмування Оберон, вимагають певної підтримки під час виконання - їм необхідний динамічний завантажувач і централізовано виконується автоматичний збирач сміття, для цього програмами на мові Оберон потрібна спеціальна операційна середу. Звичайним способом її реалізації є додавання в систему набору бібліотек, що реалізують необхідні компоненти, хоча, взагалі кажучи, операційному середовищі зовсім не обов'язково потрібна окрема операційна система: вона сама по собі може являти собою операційну систему. Такі системи Native Oberon для початкового Оберона і Bluebottle для Active Oberon. На даний момент існують компілятори Оберон в байт-код віртуальної Java-машини і CLI для віртуальної машини . NET.

Операційні системи і середовища для виконання програм на мовах сімейства Оберон, розвинулися з первісної Системи Оберон, є ETH Oberon, BlackBox Component Builder, WinOberon, Bluebottle та ін

На базі Оберона були розроблені проекти Оберон-0, Оберон-X та інші. Простота Оберона та наявність вихідних текстів оригінальної реалізації дозволяють легко адаптувати його для спеціальних класів задач. Але всі ці Оберон дуже близькі між собою, оскільки і первісний Оберон дуже простий.


2. Історія мови

Основою для Оберона послужив мову Модула-2, який із Паскаля, (за словами Вірта [1], спочатку систему хотіли писати безпосередньо на Модулі, але прийшли до висновку про необхідність її доопрацювання та скорочення, що і привело до появи Оберона). Метою проекту (Project Oberon) Ніклауса Вірта і Юрга Гуткнехта в 1986-89 рр.. [2] було створення з нуля осяжній і надійної операційної системи для однокористувальницької робочої станції.

Для реалізації цього проекту в 1988 Никлаусом Віртом був спроектований мова програмування високого рівня загального призначення, також названий Оберон. [3]

В 1989 в Швейцарської вищої технічної школи Цюріха (ETH) була випущена перша реалізація Оберона для процесорів сімейства NS32000. Він був створений в якості компонента операційного середовища Оберон. Цей компілятор вимагає менше 50 Кбайт пам'яті, складається з 6 модулів загальним обсягом близько 4000 рядків і сам себе компілює за 15 секунд на комп'ютері з процесором NS32532 (тактова частота - 25 МГц).


3. Мова Оберон

3.1. Нововведення

Просто неможливо подякувати всім тим, хто так чи інакше підживлював своїми ідеями те, що тепер називається Oberon. Більшість ідей прийшло від використання і вивчення існуючих мов, таких як Modula-2, Ada, Smalltalk і Cedar, які часто застерігали нас від того, як не треба робити.

Ніклаус Вірт [1]

Мова зберіг основні риси синтаксису Модулі і був об'єктним розширенням. Це дозволило відмовитися від механізму варіантних записів модулів, що є відступом від початкової суворої статичної типізації, що дало можливість ввести механізм автоматичного управління пам'яттю - збірку сміття : з мови виключена можливість звільнення динамічно виділеної пам'яті за допомогою особливого оператора, а замість нього сама середу виконання містить модуль, який повертає невживану пам'ять системі. Автоматичне управління пам'яттю є засобом підвищення надійності програм з динамічними структурами даних, так як виключає людські помилки, властиві, наприклад, таким мовам, як З / C + +.


3.2. Спрощення синтаксису

Щоб домогтися максимальної надійності і продуктивності трансляції, було зроблено значне спрощення мови за рахунок його відмови від коштів, які були визнані непотрібними (виходячи з досвіду розробки, реалізації та експлуатації інших мов), або ускладнювали компілятор без достатнього виправдання з точки зору продуктивності, або були досить складні, щоб бути відправленими в зовнішні бібліотеки, або погано поєднувалися з механізмами модульності та автоматичного управління пам'яттю: записи з варіантами, перечислимого типи, типи-діапазони, безлічі загального вигляду, беззнаковий цілий тип, локальні модулі, модулі визначень, списки експорту, оператор for, колишній варіант оператора with, спеціальний синтаксис визначення головної програми. Рудиментарні засоби підтримки паралельного програмування, що були в Модулі-2, не увійшли в мову, так як він обслуговував однопользовательськую операційну систему. З метою спрощення відмовилися від обробки виключень.

Було спрощено опис масивів (індекси масивів можуть бути тільки цілочисельними і завжди починаються з нуля, подібно до мови Сі), обмежено використання покажчиків - покажчики можуть існувати тільки на записи і масиви, в списках імпорту вказується тільки імпортований модуль, а при використанні імпортованих імен потрібна обов'язкова кваліфікація (явне вказівка ​​імені модуля-експортера). У статті "від модуля до Оберону" [1] Вірт детально прокоментував причини видалення кожного з елементів.

З міркувань "достатнього мінімуму" в мову не були включені в якості явного синтаксичного поняття методи (процедури і функції, пов'язані з типом), так як цей механізм у найзагальнішому вигляді легко змоделювати, створюючи в об'єктах (записах в мові Оберон) поля процедурного типу і привласнюючи їм процедури, відповідні методам. Таким чином, в Обероне мінімальними засобами підтримується об'єктно-орієнтоване програмування для спрощення процесу трансляції коду і прискорення цього процесу.

Завдяки внесеним змінам, Оберон став синтаксично простіше. Опис його синтаксису помістилося на одній сторінці, повний опис мови займає близько 20 сторінок, що вдвічі менше, ніж опис Модуль-2. Оберон є якщо не мінімальним, то, у всякому разі, одним з найменших за обсягом універсальних мов програмування високого рівня.


3.3. Синтаксис в РБНФ

Синтаксис "Оберона-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  |  "&"  . Позначення  =  УточнІдент  {  "."  ідент |  "["  СпісокВираж  "]"  |  "^"  |  "("  УточнІдент  ")"  }  . СпісокВираж  =  Висловлю  {  ","  Висловлю  }  . СпісокІдент  =  ІдентОпр  {  ","  ІдентОпр  }  . УточнІдент  =  [  ідент  "."  ]  ідент. ІдентОпр  =  ідент  [  "*"  |  "-"  ]  . 

3.4. Основні елементи

Програма на Обероне являє собою набір модулів. В загальному вигляді модуль має вигляд:

 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), і якщо такі відомості їй необхідні, посилання на екземпляр повинна бути передана явно (наприклад, через параметр). Відсутність явно описуваних методів було одним з якостей вихідного Оберона, що викликав критику звикли до традиційних гібридним мов програмістів. З іншого боку, пропонований Оберон механізм дозволяє реалізувати все, що реалізовується традиційними засобами мов з методами, і навіть більш того - в Обероне кожен екземпляр класу може мати власний варіант методу (значення поля процедурного типу), тоді як при описі методів як частини класу все екземпляри працюють з одним варіантом методу. В Обероне-2 методи були все-таки введені. Методи описуються окремо від типу запис, із зазначенням типу, з яким вони пов'язані.

Новий тип запис може бути оголошений як розширення існуючого. В цьому випадку тип, який розширюється, вказується в описі запису в дужках після ключового слова RECORD. Розширений тип автоматично отримує всі поля розширюваного типу і (в Обероне-2) зв'язується з усіма процедурами, пов'язаними з розширюваним типом. Процедури, пов'язані з новим типом, можуть мати ту ж сигнатуру, що і процедури, пов'язані з розширюваним типом - таким чином забезпечується перевизначення методів у породжених типах. В Компонентному Паскалі з метою більш повного контролю за розширюваністю типів запису за замовчуванням не є розширюваними, а методи не можуть бути перевизначені. Щоб дозволити розширення записів і перевизначення методів, використовуються спеціально введені ключові слова EXTENSIBLE, ABSTRACT, LIMITED, EMPTY.


4. Концепції програмування

Компонентне програмування

Оберон націлений на компонентно-орієнтовану розробку програмного забезпечення. [4] Інкапсуляція підтримується виключно на рівні модуля - всі типи, оголошені усередині модуля, друг для друга абсолютно прозорі. З інших модулів доступно те, що оголошено при визначенні як експортоване.

Поліморфізм забезпечується за рахунок механізму методів (і процедурні поля в Обероне, і методи в Обероне-2 ведуть себе як віртуальні, в термінології більшості гібридних об'єктно-орієнтованих мов), а також розширеної конструкцією WITH, що дозволяє виконувати різні групи операторів в залежності від того, до якого з розширених типів належить її аргумент.

У мові відсутня спеціальний механізм конструкторів. Рекомендованим методом створення і ініціалізації об'єктів є опис породжують модулів і процедур (у традиційній термінології ООП - factory).

Програма в такої технології є набір відносно самостійних компонентів (в даному випадку - модулів), які мають приховану від зовнішнього світу внутрішню структуру і чітко визначений інтерфейс. Модулі можуть завантажуватися і розвантажуватися динамічно, під час роботи програми, система надає розвинені засоби контролю типів під час виконання, які дозволяють писати універсальні алгоритми обробки даних, які не залежать від конкретних типів цих даних (наприклад, бібліотека для роботи з СУБД може надавати методи, що записують результат запиту з бази в запис довільної структури, якщо набір та типи полів цього запису відповідають набору і типам полів в БД).

У компонентної парадигмі вважається невдалим архітектурне рішення, пов'язане з широким використанням успадкування реалізації від типів, оголошених в іншому компоненті, оскільки це призводить до явища, відомому як "крихкість базового типу" - після того, як від базового типу породжене велика кількість типів-спадкоємців ( причому частина з них може бути навіть невідома розробнику базового типу), будь-які зміни в реалізації базового типу стають вкрай ризикованими, тому що вони можуть непередбачуваним чином відбитися на типах-нащадках.

Відомо, що однією з проблем застосування об'єктно-орієнтованого програмування в системному програмуванні є необхідність мати групи маленьких класів, які могли б взаємодіяти без додаткових накладних витрат. В Обероне цієї проблеми немає - всі типи, визначені в одному модулі, бачать один одного, а проблем з надійністю це не створює, так як модуль все одно розробляється, тестується і супроводжується як єдине ціле.

Типова система, розроблена на Обероне, являє собою набір модулів з процедурними інтерфейсами, через які модулі обмінюються даними, у тому числі й об'єктами. При цьому всі кошти інкапсуляції діють тільки в міжмодульних взаємодії, що робить зручним системне програмування з використанням об'єктів.

Об'єктно-орієнтоване програмування

Засоби об'єктного програмування інтерпретуються в Обероне як природний розвиток засобів роботи з записами в модульній системі, точніше, як технічний інструментарій для вирішення конкретної архітектурної завдання: забезпечити ефективне "розподіл праці" між різними модулями при роботі з динамічними типами та структурами даних: наприклад, робота з покажчиками у списку може бути прихована (разом з відповідними полями) в одному модулі, а визначення і робота з конкретним "наповненням" елементів списку - задаватися в іншому (або, частіше, інших). У цьому сенсі технологія об'єктного програмування в Обероне підпорядкована концепції модульності: вона тут є, швидше, засобом опису даних, ніж засобом побудови архітектури програми в цілому.


5. Вплив Оберона на інші мови

За твердженням Вірта [5], розробники мови Java за кілька років до її створення "вивчили вихідні коди Оберона і, зокрема, вихідні коди обероновскіх збирачів сміття. Потім вони зіпсували Оберон синтаксисом Сі і назвали вийшло словом Java". Хоча від усного виступу не можна вимагати абсолютної точності формулювань, але у всякому разі безсумнівну схожість ідеологій Оберона і Java (прагнення до мінімалізму і суворої типізації, обмеження множинного успадкування, автоматичне управління пам'яттю) говорить про те, що тут має місце певний консенсус щодо того, які кошти повинні складати ядро ​​сучасної мови програмування загального призначення. Однак якщо в Обероне і його прямих спадкоємців мінімалізм залишається на чолі кута, розробники Java пішли по шляху екстенсивного нарощування можливостей мови.

У саме сімейство мов Оберон входять також Оберон-07, Оберон-2, Component Pascal ( Компонентний Паскаль), Active Oberon, OberonScript та ін


6. Версії мови

Вихідна версія Oberon ("класичний Оберон") - найбільш коротка, з найменшою кількістю ключових слів і синтаксичних конструкцій. Вона була використана в якості бази для створення сімейства мов, кожен з яких розширює класичний в якомусь напрямі або відрізняється від нього деякими деталями.

Oberon-2

В 1992 Ніклаус Вірт і його учень Ханспетер Мессенбек (Hanspeter Moessenboek) - нині професор Університету ім. Йоганна Кеплера в Лінці - опублікували опис доповненого варіанта Оберона, що отримав назву Оберон-2. Він являє собою уточнену версію класичного Оберона. Доповнення, внесені в Оберон-2 і оформлені дуже економно, полягають в наступному:

  • додані процедури, пов'язані з типом, що допускають перевизначення для породжених типів (приблизний аналог віртуальних методів в інших об'єктно-орієнтованих мовах);
  • в мову повернуто оператор циклу з кроком FOR;
  • додана можливість експорту описів в режимі "тільки для читання". [6] [7]

Цікаво, що незважаючи на розширення мови, обсяг формального опису синтаксису Оберона-2 менше, ніж у класичного Оберона. Це сталося в результаті оптимізації опису синтаксису. Існує оптимізуючий компілятор XDS [8] для Oberon-2;

Є також компілятор мови Оберон-2 [9] в байт-код віртуальної машини Java ( Java Virtual Machine). Розроблений С.Свердловим (Вологда, ВДПУ) в 1998 році компілятор працює в Windows 95/NT. Генерує файли класів (. Class), які можуть завантажуватися і виконуватися віртуальною машиною мови Java. Дозволяє створювати додатки і аплети. Містить стандартні для Оберона, так звані Дубові вимоги бібліотеки а також інтерфейси для Java API.

ETH Oberon

ETH Oberon, реалізації якого є для багатьох обчислювальних платформ.

Oberon SA і Oberon-07

Oberon SA - це версія мови Oberon, розроблена Н. Віртом для процесора Strong-ARM, використовуваного в безпілотному вертольоті.

На основі досвіду розробки Oberon SA Н. Віртом в 2007 підготував зміни та доповнення до класичного Оберону [10] [11] для більш суворої підтримки структурного програмування, ніж, наприклад, в Oberon-2 або компонентному Паскалі. Нова версія мови отримала назву Oberon-07 [12]. Є переклад "The Programming Language Oberon, Revision 1.11.2008" на російську мову [13]. Але щодо підтримки об'єктно-орієнтованого програмування мову Oberon-07 не слід за Оберон-2, а продовжує мінімалістичну лінію класичного Оберона, включаючи відсутність підтримки процедур, прив'язаних до типів записів.

Oberon-07 має такі основні відмінності від класичного Оберона:

  • в циклі WHILE дозволені кілька охоронюваних гілок (ELSIF ... DO). Тим самим забезпечена повна явна підтримка циклу Дейкстри [14]. Раніше цикл Дейкстри моделювався за допомогою циклу 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 [15] для мови Oberon-07 для мікроконтролерів ARM7 компанії NXP (Philips) і синтаксичні діаграми мови Oberon-07 [16], а також рекомендації по стилю програм на Oberon-07 [17].

Дієслово

У Росії був розроблений мова Дієслово, структурно дуже близький до Оберону-2. Головна його відмінність полягає у використанні російських службових слів. [18] [19] Крім цього, мова має ще ряд відмінностей від Оберона-2:

  • видалені методи (процедури, пов'язані з типом);
  • не використовуються псевдоніми в оголошеннях імпорту модулів;
  • добавлена умовна компіляція вихідних текстів;
  • додана можливість безпосередньо вказувати шлях до використовуваних модулів;
  • додана спеціальна позначка для головного (запускається) модуля програми;
  • доданий вбудований тип-ітератор для прискорення послідовного доступу до масиву.
  • змінені мітки експорту для змінних, констант і процедур, а також спосіб вказівки параметрів-змінних;
  • змінений синтаксис оператора WITH (ДЛЯ);
  • заборонена передача через параметри процедур масивів і записів;
  • змінені розміри деяких типів даних;
  • змінений набір вбудованих процедур і склад системних модулів;

Мова підтримує юникод. Реалізовано компілятор (званий перетворювачем) для платформ Windows і PocketPC, а також середу розробки (також під Windows).


7. Мови сімейства Oberon

Компонентний Паскаль (Component Pascal)

Оберон-2 одразу після опублікування в 1992 році розглядався як кандидат на роль стандарту мови (конференція Oakwood Conference, Croydon, 1993), але практичний досвід, накопичений при створенні великих програмних комплексів, виявив деякі слабкості нововведень і бажаність подальших уточнень (що зайвий раз підкреслює мудрість консерватизму, проявленого Віртом у визначенні класичного Оберона). Ці уточнення були зроблені у варіанті Оберона-2, названому Компонентний Паскаль і опублікованому в 1999, компанією Oberon microsystems [20], утвореної в 1992 році учнями Вірта (сам Вірт став членом ради директорів). Як і при переході від Оберона до Оберону-2, ці уточнення зроблені максимально економно [21]. Зокрема, тепер мова повністю підтримує методологію компонентно-орієнтованого програмування. Завдяки останньому обставині, Компонентний Паскаль на даний момент є, мабуть, найбільш досконалим серед прямих нащадків класичного Оберона. Однак він може бути скорочений не тільки до підмножини, еквівалентному початкового Оберону, але і до іншого повноцінного мінімалістичному підмножині, в якому спадкування та перевизначення методів допускається тільки для чисто інтерфейсних типів і методів (визначених з атрибутом ABSTRACT). Ця обставина виявляє кілька проміжний характер Оберона-2.

В Компонентний Паскаль в порівнянні з Оберон-2 додані засоби, що дозволяють розробнику повністю контролювати розширення експортованих типів і перевизначення методів (атрибути EXTENSIBLE, ABSTRACT, NEW, EMPTY, а також можливість обмеженого експорту методу "тільки для реалізації"). Доданий блок завершення тіла модуля (ключове слово CLOSE) і зумовлений порожній метод FINALIZE. Система основних (елементарних) типів приведена у відповідність з типами Java. Введено неявний рядковий тип. Компанія Oberon Microsystems, що визначила Компонентний Паскаль, випустила також фреймворк BlackBox Component Framework і середу візуального програмування BlackBox Component Builder [22] - невеликі за розміром і невимогливі до ресурсів, цілком побудовані на компонентному Паскалі.

Згодом компілятор BlackBox був інтегрований в крос-платформену середу програмування Denia, зокрема для операційної системи реального часу JBed, повністю написаною на компонентному Паскалі.

Active Oberon [23], Zonnon

Ці мови вже з повною підставою можна назвати не розширеннями або версіями Оберона, а самостійними мовами. В них істотно розширено синтаксис, введені конструкції для опису класичних "властивостей" (property) з контролем читання / запису, числових типів з заданим розміром в бітах. Введена підтримка активних об'єктів, які обмінюються повідомленнями в форматі, визначеному РБНФ-описом, обробка винятків.


8. Цікаві факти

  • За підрахунками, опублікованими у статті Сергія Свердлова "Арифметика синтаксису", "лінія Вірта", як він її назвав - лінія, що включає Паскаль, Модула-2, Оберон і Оберон2 - це єдиний приклад "генетичної лінії" мов-нащадків Алгол-60, в якій складність мови, визначена з необхідними застереженнями як кількість лексем в його описі, стабільно знижувалася і в даний час виявляється нижче, ніж у спільного "прабатька" - Алгол-60. Всі мови "лінії Вірта" простіше Алгол-60, і кожен наступний мова в цій лінії простіше попереднього. У той же час Ада більш ніж удвічі складніше свого попередника - Паскаля, C + + приблизно в 1,7 рази складніше Сі, а в лінійці Паскаль - Турбо Паскаль різних версій - Object Pascal складність експоненціально зростає від версії до версії.
  • Епіграфом до опису оригінального Оберона була обрана фраза Ейнштейна: "Роби настільки просто, наскільки можливо, але не простіше цього". В описі Оберона-2 цього епіграфа немає.

Примітки

  1. 1 2 3 Ніклаус Вірт "від модуля до Оберону" - www.vspu.ac.ru/ ~ chul / wirth / frommodula / frommodula.htm. ІнфоАрт. Статичний - www.webcitation.org/616yKy274 з першоджерела 22 серпня 2011.
  2. N. Wirth and J. Gutknecht. Project Oberon. Addison-Wesley, 1992
  3. N. Wirth. The Programming Language Oberon. Software - Practice and Experience, Vol.18, No.7, p.671-690
  4. C. Szyperski. Component Software - Beyond Object-Oriented Programming. Addison-Wesley, 1998.
  5. Лекція Н. Вірта в Нижегородському державному університеті ім. Н. І. Лобачевського - www.oberon2005.ru/r260905.html
  6. Мова програмування Оберон-2 - www.uni-vologda.ac.ru/oberon/o2rus.htm, Х.Мессенбек, Н. Віртом
  7. A Description of the Oberon-2 Language, Paul Floyd - www.edm2.com/0608/oberon2.html (Англ.)
  8. XDS Family of Products - www.excelsior-usa.com/xds.html
  9. компілятор Оберон-2 в байт-код віртуальної машини Java ( - www.uni-vologda.ac.ru/JOB/rus/index.html Java Virtual Machine)
  10. Difference between Oberon-07 and Oberon - www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.pdf
  11. Oberon at a glance - oberoncore.ru / _media / wiki / lang / wirth_n.oberon_at_a_glance.en.pdf
  12. The Programming Language Oberon, Revision 20.7.2011 - www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf
  13. Переклад "The Programming Language Oberon, Revision 1.11.2008" на російську мову - forum.oberoncore.ru / download / file.php? id = 1956
  14. Е.Дейкстра. Дисципліна програмування. Світ, Москва, 1978
  15. IDE Astrobe для мови Oberon-07 - www.cfbsoftware.com / astrobe / astrobe.aspx
  16. Синтаксичні діаграми мови Oberon-07 - www.cfbsoftware.com/astrobe/Oberon07.Syntax.zip
  17. Рекомендації по стилю програм на Oberon-07 в главі 10 Programming Conventions and Guidelines - www.cfbsoftware.com/astrobe/Oberon.LPC2000.pdf
  18. Розробки на Дієслово - glagol.nad.ru /. Статичний - www.webcitation.org/616yLba33 з першоджерела 22 серпня 2011. , Glagol.nad.ru
  19. Офіційний сайт мови Дієслово - glagol.tut.su /. Статичний - www.webcitation.org/616yM8K25 з першоджерела 22 серпня 2011.
  20. Oberon microsystems AG - www.oberon.ch
  21. Повідомлення про мову Компонентний Паскаль - www.inr.ac.ru/ ~ info21/cpascal/cp_report_1.4_rus.htm
  22. BlackBox Component Builder - www.oberon.ch / blackbox.html
  23. Active Oberon for. NET: An Exercise in Object Model Mappin - research.microsoft.com / en-us / um / people / nick / entcs / gutknecht.pdf

Література

На англійській мові

Цей текст може містити помилки.

Схожі роботи | скачати

Схожі роботи:
Оберон-2 (мова програмування)
S (мова програмування)
Мова програмування
J (мова програмування)
R (мова програмування)
Сі (мова програмування)
Oz (мова програмування)
D (мова програмування)
Скретч (мова програмування)
© Усі права захищені
написати до нас