Zonnon

Zonnon мова програмування загального призначення, створена на основі мови Modula-2, яка підтримує активні об'єкти, що з'явилися в Active Oberon. У мові введено нову парадигму програмування композиційну модель. Використовується збирання сміття, є синтаксичні засоби об'єктного програмування, організації паралельних обчислень, перевизначення операторів та обробки виняткових ситуацій. Мову розроблено Юргом Гуткнехтом (Jurg Gutknecht). У сучасній версії компілятора ETH надається можливість розв'язувати задачі лінійної алгебри з синтаксисом, подібним до Matlab. Компілятор мови є першим повністю створеним поза Microsoft і повністю інтегрованим у Visual Studio разом з іншими мовами платформи .NET.

Zonnon
Парадигма композиційна модель
Дата появи 2000
Творці Юрг Гуткнехт
Система типізації динамічна типізація
Під впливом від Паскаль, Modula-2, Active Oberon

Історія

Проект виник завдяки участі вчених Швейцарського федерального технологічного інституту (ETH), фахівців з Оберону, в рамках Проекту 7 (Project 7), ініціативи, висунутої в 1999 році підрозділом Microsoft Research з метою вивчення мови на сумісність з платформою .NET (1999—2002) роки.[1] Автор мови Юрг Гуткнехт (Jurg Gutknecht), професор ETH, колега Ніклауса Вірта і його співавтор з мови Оберон. Проект Zonnon було розроблено на початку 2000-х років в Цюріху в ETH. Метою проекту було створення мови програмування високого рівня загального призначення з максимально простим і зрозумілим синтаксисом, який би водночас дозволяв розробку програмного забезпечення будь-якої складності.

Проект Zonnon не можна вважати продовженням лінійки мов Паскаль Модула Оберон Оберон-2 Компонентний Паскаль. Це, швидше, паралельна гілка, яка відокремилася від згаданої лінійки десь на рівні Модули — Оберона. Безпосереднім предком Zonnon є Активний Оберон, розроблений за участі того ж Юрга Гуткнехта. Якщо Ніклаус Вірт при створенні Оберона максимально спростив Модулу-2, вилучивши з неї все, що було визнано не надто необхідним, то творці мови Zonnon пішли більш традиційним шляхом — вони зберегли більшість особливостей Модули-2 і навіть повернули дещо з Паскаля, а також доповнили мову декількома новими поняттями й механізмами.

Zonnon, на думку прихильників цього проекту, є простішим і потужнішим, ніж такі мови як Ada, Java і C#[2]. Він призначений для простого і ефективного програмування паралельних систем з використанням нових багатоядерних процесорів, які мали домінувати в галузі протягом десятиліття.

Особливості

Мова регістро-залежна — різниця в регістрі літер в ідентифікаторах призводить до їх відмінності. Зроблено оригінальний хід — слова вважаються ключовими (зарезервованими) при написанні всіх літер або у верхньому, або в нижньому регістрі. Тобто accept і ACCEPT — ключові слова, а ось AcCePt — просто припустимий ідентифікатор.

У мові 51 ключове слово (записуються або тільки в нижньому або тільки у верхньому регістрі): accept | activity | array | as | await | begin | by | case | const | definition | div | do | else | elsif | end | exception | exit | false | for | if | implementation | implements | import | in | is | launch | loop | mod | module | new | nil | object | of | on | operator | or | procedure | receive | record | refines | repeat | return | self | send | then | to | true | type | until | var | while

З особливостей можна відзначити використання знака # як символу операції «не дорівнює» (як у Модулі-2), а також наявність операції ** — «піднесення до степеня», — повернутої після багаторічного забуття мови Фортран.

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

Масиви описуються так само, як в Обероні — тип-масив може мати необмежений розмір за будь-якого набору розмірностей, при створенні реального масиву його розміри вказуються явно. Індекси масиву можуть бути цілими числами (нижня межа — завжди нуль) або зліченного типу.

Загальна структура програми, модулів, розділення модуля на визначення і реалізацію, правила запису синтаксичних конструкцій запозичено з Модули-2 практично без змін. Підтримується «довга» конструкція умовного оператора IF-THEN-ELSIF-ELSE-END, усі типи циклів, наявні у Модулі: REPEAT-UNTIL, WHILE, FOR, LOOP, конструкція вибору CASE. З Паскаля повернуто в мову стандартні примітивні операції вводу-виводу Write, WriteLn, Read, ReadLn (які в Модулі-2 було винесено в стандартну бібліотеку).

Додатково до мови внесено:

  • Засоби ООП: оголошення класів (використовується ключове слово object), методи (описуються цілком всередині опису класу), специфікатори видимості полів і методів private і public, окремий опис ООП-інтерфейсів і можливість явної вказівки реалізації інтерфейсів класом.
  • Властивості — псевдополя класів з повністю контрольованим доступом.
  • Індексатори — можливість опису класів, примірники яких зовні поводяться як масиви.
  • Засоби опрацювання винятків.
  • Перевизначення операторів і оголошення нових.
  • Засоби паралельного програмування: засобами мови можна створити паралельно виконувані фрагменти програми, взаємодія яких відбувається через протоколи — специфічний тип даних, створюваний за допомогою модифікованого РБНФ-опису формат повідомлення, яке буде передаватися.

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

Приклад програми

 module Example; (*Це - коментар*)
 var
   x, y, sum: integer;
begin
   write("Введіть X: ");
   readln(x);
   write("Введіть Y: ");
   readln(y);
   sum := x + y; (*Обчислюємо суму двох чисел*)
   writeln("X + Y = ", sum);
end Example.

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

Композиційна модель

Zonnon використовує композиційні моделі успадкування на основі агрегування. Як правило, об'єкт (або модуль) складається з кількох функціональних компонентів, кожен з них надає себе клієнтам у формі абстрактного визначення. Ряд визначень, а також власний інтерфейс об'єкта (тобто сукупність всіх усуспільнених елементів об'єкта), являють собою інтерфейс між об'єктом і його клієнтами. Це дозволяє реалізувати переваги модульного і компонентного програмування, а також, що важливо, отримати можливість підтримувати одинарне і множинне успадкування (без недоліків реалізації останнього в С++), поліморфізм, уточнення й агрегування, делегування на рівні сигнатур методів.

Переваги і недоліки

Переваги і недоліки мови Zonnon розглянемо шляхом порівняння з близькими їй мовами.

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

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

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

Решта нововведень Zonnon, зокрема, більш розвинений ООП-синтаксис, інтерфейси, індексатори, властивості, перевизначення операторів, навряд чи слід вважати принциповими. З одного боку, вони ускладнюють мову, а все, що дозволяють робити вони, може бути практично так само легко зроблено і без них. З іншого, не можна не відзначити, що в даному випадку ці засоби реалізовано досить економно. Адже, якщо порівняти Zonnon з Object Pascal, що розвивався приблизно за тією ж схемою — доповнюючи початкову мову новими модними механізмами, можна бачити, що за обсягом можливостей Zonnon перебуває з Object Pascal на одному рівні, обходячи його в засобах паралельної обробки, але все ще залишаючись простішим.

Реалізації

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

Проте, в межах тієї ж реалізації під .NET, існує варіант кросплатформного середовища розробки, інтегрованого в Eclipse, яке використовує вільну реалізацію Mono середовища .NET, яка може функціювати під Linux.

Для Windows є також найпростіше власне середовище розробки ETH Zonnon Builder, що включає текстовий редактор з підсвічуванням синтаксису, засоби побудови проекту, найпростіші засоби контролю версій.

Перший компілятор створено в ETH для платформи Microsoft .NET Євгеном Зуєвим. У 2005 році було також створено комплекс, що інтегрує до середовища розробки MS Visual Studio .NET, компілятор і CASE-систему, яка підтримує проектування Zonnon-програм шляхом побудови діаграм UML 2.0. Отриманий засіб підтримує стандартний для MS Visual Studio .NET цикл розробки мовою Zonnon з використанням UML, зокрема зворотну побудову UML-опису за кодом проекту.

Посилання

Примітки

  1. László Böszörményi, Peter Schojer: Modular Programming Languages, Joint Modular Languages Conference, JMLC 2003, Klagenfurt, Austria, August 25-27, 2003, Proceedings Springer 2003, p.132
  2. Reliability by Design. Архів оригіналу за 26 вересня 2017. Процитовано 29 березня 2018.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.