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-опису за кодом проекту.
Посилання
- Zonnon в MS Visual Studio 2008(англ.)
- Введення в методи програмування на основі .NET, з використанням Zonnon, НГТУ
- Zonnon Compiler for java
- Зоннон — Паскаль для майбутнього .NET! Інтерв'ю з Ніною Гоновой, магистранткой ННГУ, стажировавшейся в ETH в Цюріху в групі Ніклауса Вірта
- Start with mathematics, Ніна Гонова
- Приклади програм(англ.)
- Бібліотека для розробки чисельних приложенийи (англ.)
- Офіційне повідомлення про мову (англ.)
- The Zonnon Project: A .NET Language and Compiler Experiment. Jürg Gutknech, Vladimir Romanov, Eugene Zuef
- Р. О. Мітін. Мова програмування Zonnon (основи), навчальний посібник
- Е. В. Касьянова. Мова програмування Zonnon для платформи .NET
- Касьянова Е. В. Адаптивні методи і засоби підтримки дистанційного навчання програмування
- Руслан Богатирьов. Від Паскаля до мови Zonnon: реалізація нових ідей на платформі .NET
Примітки
- 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
- Reliability by Design. Архів оригіналу за 26 вересня 2017. Процитовано 29 березня 2018.