Zonnon

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

Zonnonязык программирования общего назначения, основанный на языках Паскаль, Модула-2 и семействе языков Оберон. В целом может быть охарактеризован как Модула-2, расширенная средствами сборки мусора, объектного программирования, параллельного программирования (мультипрограммирования), переопределения операторов и обработки исключений. Разработан Юргом Гуткнехтом.

Содержание

История

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

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

Особенности

Язык регистро-зависимый — разница в регистре букв в идентификаторах приводит к их различию. 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.

Дополнительно в язык внесены:

  • Средства ООП: объявление классов (используется ключевое слово object), методы (описываются целиком внутри описания класса), спецификаторы видимости для полей и методов private и public, отдельное описание ООП-интерфейсов и возможность явного указания реализации интерфейсов классом.
  • Свойства — псевдополя классов с полностью контролируемым доступом.
  • Индексаторы — возможность описания классов, экземпляры которых внешне ведут себя как массивы.
  • Средства обработки исключений.
  • Переопределение существующих операторов и объявление новых.
  • Средства параллельного программирования: языковыми средствами могут быть созданы параллельно исполняющиеся фрагменты программы, взаимодействие которых происходит через протоколы — специфический тип данных, задаваемый с помощью модифицированного РБНФ-описания формат сообщения, которое будет передаваться.

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

Пример программы

 
module Primer; (*это комментарий*)
 var
   x, y, sum: integer;
begin
   write("Введите X: ")
   readln(x);
   write("Введите Y: ");
   readln(y);
   sum := x + y; (*Считаем сумму двух чисел*)
   writeln("X + Y = ", sum);
end Primer.

Эта программа считает сумму двух чисел, введённых с клавиатуры.

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

Однозначно определить те или иные особенности языка как достоинства и недостатки вряд ли возможно — такая оценка сильно зависит от взгляда оценивающего. В этой связи будет уместным привести сравнение Zonnon с близкими ему языками.

По сравнению с Паскалем и Модулой-2 Zonnon стал значительно мощнее, но при этом и объёмнее, и сложнее. Увеличение мощности достигнуто за счёт включения новых синтаксических конструкций. Если сравнивать его с языками Оберон-серии, можно заметить, что при очень похожем, несколько более сложном синтаксисе Zonnon имеет лишь два принципиальных преимущества: средства параллельной обработки (в случае Zonnon — это не только сами синтаксические конструкции, но и общий принцип конструирования программ как наборов активных объектов) и средства обработки исключений. Сравнительная оценка языков будет зависеть от того, насколько существенными считать эти два преимущества.

По поводу средств параллельной обработки есть разные мнения: часть теоретиков и практиков считает, что средства параллельного программирования вообще не следует вносить в язык, и для них вполне достаточно поддержки системными библиотеками, другие указывают на то, что такие библиотеки должны быть абсолютно стандартными, то есть всё равно становиться частью языка, в противном случае использующие их программы потеряют переносимость (с другой стороны, переносимость в действительности нужна не так уж часто). В любом случае, для программиста ценность механизмов параллельной обработки Zonnon во многом определяется тем, в какой мере он готов принять предлагаемую языком модель активных объектов как основного элемента программы.

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

Остальные нововведения Zonnon, в частности, более развитый ООП-синтаксис, интерфейсы, индексаторы, свойства, переопределение операторов, вряд ли следует считать принципиальными. С одной стороны, они усложняют язык, а всё, что позволяют делать они, может быть практически так же легко сделано и без них. С другой, нельзя не отметить, что в данном случае эти средства реализованы достаточно экономно. Ведь если сравнить Zonnon с Object Pascal, развивавшимся приблизительно по той же схеме — дополняя исходный язык новыми модными механизмами, можно видеть, что по объёму возможностей Zonnon находится с Object Pascal на одном уровне, обходя его в средствах параллельной обработки, но всё ещё оставаясь проще.

Реализации

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

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

В пределах той же реализации под .NET существует вариант кросс-платформенной среды разработки, интегрированной в Eclipse и использующей свободную реализацию Mono среды .NET. Она может функционировать под Linux. Для Windows имеется также простейшая собственная среда разработки ETH Zonnon Builder, включающая текстовый редактор с подсветкой синтаксиса, средства построения проекта, простейшие средства контроля версий.

Ссылки


de:Zonnon

en:Zonnon

Источник — «http://www.sbup.com/wiki/Zonnon»
Личные инструменты

Served in 0.115 secs.