WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
Zonnon
Класс языка императивный, структурный, модульный, объектно-ориентированный, многопоточный
Тип исполнения компилируемый
Появился в 2000
Автор Юрг Гуткнехт[1]
Расширение файлов .znn
Выпуск 1.3.0 (9 ноября 2012)
Система типов статическая, сильная
Основные реализации: ETHZ
Испытал влияние Активный Оберон
Лицензия MS-PL
Платформа .NET
Сайт zonnon.ethz.ch

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

История

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

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

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

Особенности

Язык регистро-зависимый — разница в регистре букв в идентификаторах приводит к их различию. Сделан оригинальный ход — ключевые (зарезервированные) слова являются зарезервированными при написании либо всех букв в верхнем, либо всех букв в нижнем регистре. То есть 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 году был создан также комплекс ПО, интегрирующий компилятор и CASE-систему, поддерживающую проектирование Zonnon-программ путём построения диаграмм на языке UML 2.0, в среду разработки Microsoft Visual Studio .NET. Получившееся средство поддерживает стандартный для MS Visual Studio .NET цикл разработки ПО на языке Zonnon с использованием UML, в том числе обратное построение UML-описания по коду проекта.

Ссылки

Примечания

  1. Персональный сайт Юрга Гуткнехта Архивировано 9 июня 2013 года.
  2. расширение синаксиса сделан Ниной Гоновой: Математическое расширение языка программирования Zonnon. Вестник Нижегородского университета им. Н. И. Лобачевского, 2010, 3-1, ISSN 1993—1778
  3. Start with mathematics
  4. , ННГУ
  5. 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
  6. Reliability by Design (недоступная ссылка). Проверено 13 февраля 2011. Архивировано 26 сентября 2017 года.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии