Light-industry-up.ru

Экосистема промышленности

Zonnon

20-10-2023

Zonnon — язык программирования общего назначения, основанный на языкe Modula-2, и поддерживающий активные объекты, появившиеся в Active Oberon. В языке введена новая парадигма программирования — композиционная модель. Используется сборка мусора, содержатся синтаксические средства объектного программирования, организации параллельных вычислений, переопределения операторов и обработки исключений. Язык разработан Юргом Гуткнехтом. В современной версии компилятора ETH в языке появилась возможность решать задачи линейной алгебры с синтаксисом похожим на matlab[1][2]. Компилятор языка является первым полностью созданным вне Microsoft и полностью интегрированным в Visual Studio совместно с другими языками платформы .NET.[3]

Содержание

История

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

Проект Zonnon нельзя считать продолжением линейки языков Паскаль — Модула — Оберон — Оберон-2 — Компонентный Паскаль. Это, скорее, параллельная ветвь, отделившаяся от упомянутой линейки где-то на уровне Модулы — Оберона. Непосредственным предком Zonnon является Active Oberon, разработанный при участии того же Юрга Гуткнехта. Если Никлаус Вирт при создании Оберона максимально упростил Модулу-2, удалив из неё всё, что было сочтено не слишком необходимым, то создатели языка Zonnon пошли по более традиционному пути — они сохранили большинство особенностей Модулы-2 и даже вернули кое-что из Паскаля, а также дополнили язык несколькими новыми понятиями и механизмами.

Zonnon является более простым и более мощным, чем такие языки, как Ada, Java и C#.[5] Он предназначен для простого и эффективного программирования одновременных систем с использованием новых многоядерных процессоров, которые будут доминировать в отрасли в течение десятилетия.

Особенности

Язык регистро-зависимый — разница в регистре букв в идентификаторах приводит к их различию. Cделан оригинальный ход — ключевые (зарезервированные) слова являются зарезервированными при написании либо всех букв в верхнем, либо всех букв в нижнем регистре. То есть 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 на одном уровне, обходя его в средствах параллельной обработки, но всё ещё оставаясь проще.

Реализации

Реализация языка с самого начала пошла не по пути создания собственной IDE и среды поддержки, как в случае с языком Оберон, а по пути интеграции с платформой .NET, выпущенной и поддерживаемой Microsoft. Такой подход обеспечил повышение скорости реализации за счёт отказа от разработки собственной среды и системы библиотек, а также автоматически дал программам доступ к прикладным и системным библиотекам среды .NET. К недостаткам этого варианта реализации можно отнести зависимость разработки от внешнего ПО, не находящегося под контролем реализатора языка.

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

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

Первый компилятор создан в ETH для платформы Microsoft .NET Евгением Зуевым. В 2005 году был создан также комплекс ПО, интегрирующий компилятор и CASE-систему, поддерживающую проектирование Zonnon-программ путём построения диаграмм на языке UML 2.0, в среду разработки Microsoft Visual Studio .NET. Получившееся средство поддерживает стандартный для 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

Примечания

  1. Математическое расширение языка программирования Zonnon. Вестник Нижегородского университета им. Н.И. Лобачевского, 2010, 3-1, ISSN 1993-1778
  2. Start with mathematics
  3. [1], ННГУ
  4. 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
  5. Reliability by Design

Zonnon.

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06