Оберон (язык программирования): различия между версиями
[непроверенная версия] | [непроверенная версия] |
Lit-uriy (обсуждение | вклад) |
Leonidv (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
== Системы и среды == |
== Системы и среды == |
||
Программы, написанные на языке программирования Оберон, требуют определённой поддержки во время выполнения — им необходим динамический загрузчик и централизованно выполняемый автоматический сборщик мусора, для этого программам на языке Оберон нужна специальная операционная среда. Обычным способом её реализации является добавление в систему набора библиотек, реализующих необходимые компоненты, хотя, вообще говоря, операционной среде вовсе не обязательно нужна отдельная операционная система: она сама по себе может представлять собой операционную систему. Таковы системы Native Oberon для первоначального Оберона и [http://bluebottle.ethz.ch/ Bluebottle] для Active Oberon. |
Программы, написанные на языке программирования Оберон, требуют определённой поддержки во время выполнения — им необходим динамический загрузчик и централизованно выполняемый автоматический сборщик мусора, для этого программам на языке Оберон нужна специальная операционная среда. Обычным способом её реализации является добавление в систему набора библиотек, реализующих необходимые компоненты, хотя, вообще говоря, операционной среде вовсе не обязательно нужна отдельная операционная система: она сама по себе может представлять собой операционную систему. Таковы системы Native Oberon для первоначального Оберона и [http://bluebottle.ethz.ch/ Bluebottle] для Active Oberon. На данный момент существует компиляторы Оберон в bytcode виртуальной Java-машины и CLI для виртуальной машины .NET. |
||
[[Операционная система|Операционные сиситемы]] системы и среды для исполнения программ на языках семейства Оберон, развившихся из первоначальной Системы Оберон, являются ETH Oberon, [[BlackBox (среда разработки)|BlackBox Component Builder]], [[WinOberon]], [[Bluebottle]] и др. |
[[Операционная система|Операционные сиситемы]] системы и среды для исполнения программ на языках семейства Оберон, развившихся из первоначальной Системы Оберон, являются ETH Oberon, [[BlackBox (среда разработки)|BlackBox Component Builder]], [[WinOberon]], [[Bluebottle]] и др. |
||
На базе Оберона были разработаны проекты [[Оберон-0]], [[Оберон-X |
На базе Оберона были разработаны проекты [[Оберон-0]], [[Оберон-X]] и другие. Простота Оберона и наличие исходных текстов оригинальной реализации позволяют легко адаптировать его для специальных классов задач. Но все эти Обероны очень близки между собой, поскольку и первоначальный Оберон очень прост. |
||
== История языка == |
== История языка == |
Версия от 10:09, 6 ноября 2009
Оберон — язык программирования высокого уровня, разработанный Никлаусом Виртом, для исполнения программ на котором предназначена одноименная операционная система (автор Вирт и Юрг Гуткнехт).
Системы и среды
Программы, написанные на языке программирования Оберон, требуют определённой поддержки во время выполнения — им необходим динамический загрузчик и централизованно выполняемый автоматический сборщик мусора, для этого программам на языке Оберон нужна специальная операционная среда. Обычным способом её реализации является добавление в систему набора библиотек, реализующих необходимые компоненты, хотя, вообще говоря, операционной среде вовсе не обязательно нужна отдельная операционная система: она сама по себе может представлять собой операционную систему. Таковы системы Native Oberon для первоначального Оберона и Bluebottle для Active Oberon. На данный момент существует компиляторы Оберон в bytcode виртуальной Java-машины и CLI для виртуальной машины .NET.
Операционные сиситемы системы и среды для исполнения программ на языках семейства Оберон, развившихся из первоначальной Системы Оберон, являются ETH Oberon, BlackBox Component Builder, WinOberon, Bluebottle и др.
На базе Оберона были разработаны проекты Оберон-0, Оберон-X и другие. Простота Оберона и наличие исходных текстов оригинальной реализации позволяют легко адаптировать его для специальных классов задач. Но все эти Обероны очень близки между собой, поскольку и первоначальный Оберон очень прост.
История языка
Основой для Оберона послужил язык Модула-2,выросшей из Паскаля, (по словам Вирта[1], первоначально систему хотели писать непосредственно на Модуле, но пришли к выводу о необходимости её доработки и сокращения, что и привело к появлению Оберона). Целью проекта (Project Oberon) Никлауса Вирта и Юрга Гуткнехта (Jurg Gutknecht) в 1986-89 гг.[2] было создание с нуля обозримой и надежной операционной системы для однопользовательской рабочей станции.
Для реализации этого проекта в 1988 году Никлаусом Виртом был спроектирован язык программирования высокого уровня общего назначения, также названный Оберон.[3]
В 1989 году в ETH была выпущена первая реализация Оберона для процессоров семейства NS32000. Он был создан в качестве компонента операционной среды Оберон. Этот компилятор требует менее 50 Кбайт памяти, состоит из 6 модулей общим объёмом около 4000 строк и сам себя компилирует за 15 секунд на компьютере с процессором NS32532 (тактовая частота — 25 МГц).
Язык Оберон
Нововведения
Язык сохранил основные черты синтаксиса Модулы и был объектным расширением. Это позволило отказаться от механизма вариантных записей Модулы, являющихся отступлением от от первоначальной строгой статической типизации, что дало возможность ввести механизм автоматического управления памятью — сборку мусора: из языка исключёна возможность освобождения динамически выделенной памяти с помощью особого оператора, а вместо него сама среда исполнения содержит модуль, возвращающий неиспользуемую память системе. Автоматическое управление памятью является средством повышения надёжности программ с динамическими структурами данных, так как исключает человеческие ошибки, свойственные, например, таким языкам, как С/C++.
Упрощение синтаксиса
Чтобы добиться максимальной надёжности и производительности трансляции, было предпринято значительное упрощение языка за счёт его отказа от средств, которые были сочтены ненужными (исходя из опыта разработки, реализации и эксплуатации других языков), либо усложняли компилятор без достаточного оправдания с точки зрения производительности, либо были достаточно сложны, чтобы быть отправленными во внешние библиотеки, либо плохо совмещались с механизмами модульности и автоматического управления памятью: записи с вариантами, перечислимые типы, типы-диапазоны, множества общего вида, беззнаковый целый тип, локальные модули, модули определений, списки экспорта, оператор for, прежний вариант оператора with, специальный синтаксис определения главной программы. Рудиментарные средства поддержки параллельного программирования, имевшиеся в Модуле-2, не вошли в язык, так как он обслуживал однопользовательскую операционную систему. В целях упрощения отказались от обработки исключений.
Было упрощено описание массивов (индексы массивов могут быть только целочисленными и всегда начинаются с нуля, подобно языку Си), ограничено использование указателей — указатели могут существовать только на записи и массивы, в списках импорта указывается только импортируемый модуль, а при использовании импортированных имён требуется обязательная квалификация (явное указание имени модуля-экспортёра). В статье «От Модулы к Оберону»[1] Вирт подробно прокомментировал причины удаления каждого из элементов.
Из соображений «достаточного минимума» в язык не были включены в качестве явного синтаксического понятия методы (процедуры и функции, связанные с типом), так как этот механизм в самом общем виде легко смоделировать, создавая в объектах (записях в языке Оберон) поля процедурного типа и присваивая им процедуры, соответствующие методам. Таким образом, в Обероне минимальными средствами поддерживается объектно-ориентированное программирование для упрощения процесса трансляции кода и ускорения этого процесса.
Благодаря внесённым изменениям, Оберон стал синтаксически проще, но также и стал обладать бОльшими возможнастями, чем Паскаль и Модула. Описание его синтаксиса поместилось на одной странице, полное описание языка занимает около 20 страниц, что вдвое меньше, чем описание Модулы-2. Оберон является если не минимальным, то, во всяком случае, одним из самых малых по объёму универсальных языков программирования высокого уровня.
Синтаксис в РБНФ
Синтаксис «Оберона-2» отличается компактностью. Он определён в следующих 33 предложениях РБНФ (даётся по Х. Мёссенбёк, Н. Вирт, 1996):
Модуль = MODULE идент ";" [СписокИмпорта] ПослОбъявл [BEGIN ПослОператоров] END идент ".".
СписокИмпорта = IMPORT [идент ":="] идент {"," [идент ":="] идент} ";".
ПослОбъявл = { CONST {ОбъявлКонст ";" } | TYPE {ОбъявлТипа ";" } | VAR {ОбъявлПерем ";" }}
{ОбъявлПроц ";" | ОпережающееОбъяв";"}.
ОбъявлКонст = ИдентОпр "=" КонстВыраж.
ОбъявлТипа = ИдентОпр "=" Тип.
ОбъявлПерем = СписокИдент ":" Тип.
ОбъявлПроц = PROCEDURE [Приемник] ИдентОпр [ФормальныеПарам]";" ПослОбъявл [BEGIN ПослОператоров] END идент.
ОпережающееОбъяв = PROCEDURE "^" [Приемник] ИдентОпр [ФормальныеПарам].
ФормальныеПарам = "(" [СекцияФП {";" СекцияФП}] ")" [":" УточнИдент].
СекцияФП = [VAR] идент {"," идент} ":" Тип.
Приемник = "(" [VAR] идент ":" идент ")".
Тип = УточнИдент | ARRAY [КонстВыраж {"," КонстВыраж}] OF Тип
| RECORD ["("УточнИдент")"] СписокПолей {";" СписокПолей} END | POINTER TO Тип | PROCEDURE [ФормальныеПарам].
СписокПолей = [СписокИдент ":" Тип].
ПослОператоров = Оператор {";" Оператор}.
Оператор = [ Обозначение ":=" Выраж
| Обозначение ["(" [СписокВыраж] ")"]
| IF Выраж THEN ПослОператоров {ELSIF Выраж THEN ПослОператоров} [ELSE ПослОператоров] END
| CASE Выраж OF Вариант {"|" Вариант} [ELSE ПослОператоров] END
| WHILE Выраж DO ПослОператоров END
| REPEAT ПослОператоров UNTIL Выраж
| FOR идент ":=" Выраж TO Выраж [BY КонстВыраж] DO ПослОператоров END
| LOOP ПослОператоров END
| WITH Охрана DO ПослОператоров {"|" Охрана DO ПослОператоров} [ELSE ПослОператоров] END
| EXIT
| RETURN [Выраж] ].
Вариант = [МеткиВарианта {"," МеткиВарианта} ":" ПослОператоров].
МеткиВарианта = КонстВыраж [".." КонстВыраж].
Охрана = УточнИдент ":" УточнИдент.
КонстВыраж = Выраж.
Выраж = ПростоеВыраж [Отношение ПростоеВыраж].
ПростоеВыраж = ["+" | "-"] Слагаемое {ОперСлож Слагаемое}.
Слагаемое = Множитель {ОперУмн Множитель}.
Множитель = Обозначение ["(" [СписокВыраж] ")"] | число | символ | строка | NIL | Множество
| "(" Выраж ")" | " ~ " Множитель.
Множество = "{" [Элемент {"," Элемент}] "}".
Элемент = Выраж [".." Выраж].
Отношение = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
ОперСлож = "+" | "-" | OR.
ОперУмн = "*" | "/" | DIV | MOD | "&".
Обозначение = УточнИдент {"." идент | "[" СписокВыраж "]" | "^" | "(" УточнИдент ")"}.
СписокВыраж = Выраж {"," Выраж}.
СписокИдент = ИдентОпр {"," ИдентОпр}.
УточнИдент = [идент "."] идент.
ИдентОпр = идент [ "*" | "-" ].
Основные элементы
Программа на Обероне представляет собой набор модулей. В общем виде модуль имеет вид:
MODULE Имя;
IMPORT СписокИмпорта;
Определения;
BEGIN
Операторы
END Имя.
Список импорта определяет, из каких модулей будут импортированы внешние имена. Определения включают определения типов, процедур, функций, переменных, констант. При этом определения имён, отмеченных звёздочкой, экспортируютя данным модулем, то есть будут видны другим модулям, импортирующим данный. В Обероне-2 допустимо также помечать имена знаком минус, в этом случае они экспортируются в режиме «только для чтения».
Тело модуля исполняется при его загрузке. В Компонентном Паскале внутри тела модуля (в разделе BEGIN..END) появилась возможность добавить секцию CLOSE:
BEGIN
Операторы
CLOSE
Операторы
END Имя.
Здесь операторы, расположенные между BEGIN и CLOSE, выполняются при загрузке модуля, а операторы, расположенные между CLOSE и END — при выгрузке его из памяти. Такое расширение было сочтено полезным для компонентных программ, которые загружают и выгружают модули динамически.
Создаваемые программистом типы данных ограничены следующим набором: типы-массивы ARRAY, типы-записи RECORD, процедурные типы PROCEDURE, типы-указатели POINTER. Указатель может быть объявлен только на массив или запись.
Синтаксис внутренней части программы достаточно традиционен и прост. Язык поддерживает традиционный набор констукций: условный оператор IF, оператор выбора CASE, циклы (с предусловием — WHILE, с постусловием REPEAT..UNTIL, безусловный — LOOP, со счётчиком — FOR). Подобно Модуле-2, прописные и строчные буквы в идентификаторах различаются, все зарезервированные слова пишутся большими буквами. Все языковые конструкции, кроме цикла REPEAT..UNTIL заканчиваются ключевым словом END и допускают расположение внутри нескольких операторов без использования составного оператора BEGIN..END. Естественно, как и в Модуле-2 нет безусловных переходов.
Парадигма объектно-ориентированного программирования поддерживается механизмом расширения записей (в языке нет отдельного ключевого слова для описания классов, вроде «class» или «object», сочтено, что обычного понятия «тип запись» вполне достаточно). По сути, каждый тип запись — это описание класса, а поля записи — это данные-члены класса.
В исходном Обероне методов (процедур и функций, связанных с классом) нет вообще. Механизм методов может быть использован путём объявления в записи полей процедурного типа, которым при создании экземпляра класса присваиваются конкретные процедуры. Вызов таких процедур производится традиционным способом обращения к полю записи, по умолчанию процедура не знает об экземпляре класса, для которого она была вызвана (нет механизма, аналогичного this
в C++ или Java), и если такие сведения ей необходимы, ссылка на экземпляр должна быть передана явно (например, через параметр). Отсутствие явно описываемых методов было одним из качеств исходного Оберона, вызвавшего критику привыкших к традиционным гибридным языкам программистов. С другой стороны, предлагаемый Обероном механизм позволяет реализовать всё, что реализуемо традиционными средствами языков с методами, и даже более того — в Обероне каждый экземпляр класса может иметь собственный вариант метода (значение поля процедурного типа), тогда как при описании методов как части класса все экземпляры работают с одним вариантом метода. В Обероне-2 методы были всё-таки введены. Методы описываются отдельно от типа запись, с указанием типа, с которым они связаны.
Новый тип запись может быть объявлен как расширение существующего. В этом случае тип, который расширяется, указывается в описании записи в скобках после ключевого слова RECORD. Расширенный тип автоматически получает все поля расширяемого типа и (в Обероне-2) связывается со всеми процедурами, связанными с расширяемым типом. Процедуры, связанные с новым типом, могут иметь ту же сигнатуру, что и процедуры, связанные с расширяемым типом — таким образом обеспечивается переопределение методов в порождённых типах. <>В Компонентном Паскале с целью более полного контроля за расширяемостью типов записи по умолчанию не являются расширяемыми, а методы не могут быть переопределены. Чтобы разрешить расширение записей и переопределение методов, используются специально введённые ключевые слова EXTENSIBLE, ABSTRACT, LIMITED, EMPTY.
Пример программы Hello, World! на языке Оберон.
Концепции программирования
- Компонентное программирование
Оберон нацелен на компонентно-ориентированную разработку программного обеспечения.[4] Инкапсуляция поддерживается исключительно на уровне модуля — все типы, объявленные внутри модуля, друг для друга абсолютно прозрачны. Из других модулей доступно то, что объявлено при определении как экспортируемое.
Полиморфизм обеспечивается за счёт механизма методов (и процедурные поля в Обероне, и методы в Обероне-2 ведут себя как виртуальные, в терминологии большинства гибридных объектно-ориентированных языков), а также расширенной конструкцией WITH, позволяющей выполнять различные группы операторов в зависимости от того, к какому из расширенных типов относится её аргумент.
В языке отсутствует специальный механизм конструкторов. Рекомендуемым методом создания и инициализации объектов является описание порождающих модулей и процедур (в традиционной терминологии ООП — factory).
Программа в такой технологии представляет собой набор относительно самостоятельных компонентов (в данном случае — модулей), имеющих скрытую от внешнего мира внутреннюю структуру и чётко определённый интерфейс. Модули могут загружаться и выгружаться динамически, во время работы программы, система предоставляет развитые средства контроля типов во время выполнения, которые позволяют писать универсальные алгоритмы обработки данных, не зависящие от конкретных типов этих данных (например, библиотека для работы с СУБД может предоставлять методы, записывающие результат запроса из базы в запись произвольной структуры, если набор и типы полей этой записи соответствуют набору и типам полей в БД).
В компонентной парадигме считается неудачным архитектурное решение, связанное с широким использованием наследования реализации от типов, объявленных в другом компоненте, поскольку это приводит к явлению, известному как «хрупкость базового типа» — после того, как от базового типа порождено большое количество типов-наследников (причём часть из них может быть даже неизвестна разработчику базового типа), любые изменения в реализации базового типа становятся крайне рискованными, так как они могут непредсказуемым образом отразиться на типах-потомках.
Известно, что одной из проблем применения объектно-ориентированного программирования в системном программировании является необходимость иметь группы маленьких классов, которые могли бы взаимодействовать без дополнительных накладных расходов. В Обероне этой проблемы нет — все типы, определённые в одном модуле, видят друг друга, а проблем с надёжностью это не создаёт, так как модуль всё равно разрабатывается, тестируется и сопровождается как единое целое.
Типичная система, разработанная на Обероне, представляет собой набор модулей с процедурными интерфейсами, через которые модули обмениваются данными, в том числе и объектами. При этом все средства инкапсуляции действуют только в межмодульном взаимодействии, что делает удобным системное программирование с использованием объектов.
- Объектно-ориентированное программирование
Средства объектного программирования интерпретируются в Обероне не в духе какой-либо «новой парадигмы программирования», а как естественное развитие средств работы с записями в модульной системе, точнее, как технический инструментарий для решения конкретной архитектурной задачи: обеспечить эффективное «разделение труда» между различными модулями при работе с динамическими типами и структурами данных: например, работа с указателями в списке может быть скрыта (вместе с соответствующими полями) в одном модуле, а определение и работа с конкретным «наполнением» элементов списка — задаваться в другом (или, чаще, других). В этом смысле технология объектного программирования в Обероне подчинена концепции модульности: она здесь является, скорее, средством описания данных, чем средством построения архитектуры приложения в целом.
Влияние Оберона на другие языки
По утверждению Вирта[5], разработчики языка Java за несколько лет до ее создания «изучили исходные коды Оберона и, в частности, исходные коды обероновских сборщиков мусора. Потом они испортили Оберон синтаксисом Си и назвали получившееся словом Java». Хотя от устного выступления нельзя требовать абсолютной точности формулировок, но во всяком случае несомненное сходство идеологий Оберона и Java (стремление к минимализму и строгой типизации, ограничение множественного наследования, автоматическое управление памятью) говорит о том, что здесь имеет место определенный консенсус относительно того, какие средства должны составлять ядро современного языка программирования общего назначения. Очевидно и то, что из двух языков Оберон спроектирован гораздо тщательнее.
В само семейство языков Оберон входят также Оберон-07, Оберон-2, Component Pascal (Компонентный Паскаль), Active Oberon, OberonScript и др.
Версии языка
Исходная версия Oberon — наиболее краткая, с наименьшим количеством ключевых слов и синтаксических конструкций. Она была использована в качестве базы для создания семейства языков, каждый из которых расширяет базовый Oberon в каком-либо направлении либо отличается от него некоторыми деталями.
- Oberon-2
В 1992 году Никлаус Вирт и его ученик Ханспетер Мёссенбёк (Hanspeter Moessenboek) — ныне профессор Университета им. Иоганна Кеплера в Линце — опубликовали описание дополненного варианта Оберона, получившего название Оберон-2. Он представляет собой уточнённую версию исходного Оберона. Дополнения, внесённые в Оберон-2 и оформленные очень экономно, заключаются в следующем:
- добавлены процедуры, связанные с типом, допускающие переопределение для порождённых типов (приблизительный аналог виртуальных методов в других объектно-ориентированных языках);
- в язык возвращён оператор цикла с шагом FOR;
- добавлена возможность экспорта описаний в режиме «только для чтения».[6][7]
Любопытно, что несмотря на расширение языка, объём формального описания синтаксиса Оберона-2 меньше, чем у исходного Оберона. Это произошло в результате оптимизации описания синтаксиса. Существует оптимизирующий компилятор XDS[8] для Oberon-2;
Есть также компилятор языка Оберон-2 [9]в байт-код виртуальной машины Ява (Java Virtual Machine). Разработанный С.Свердловым (Вологда, ВГПУ) в 1998 году компилятор работает в Windows 95/NT. Генерирует файлы классов (.class), которые могут загружаться и исполняться виртуальной машиной языка Ява. Позволяет создавать приложения и аплеты. Содержит стандартные для Оберона, так называемые Дубовые требования библиотеки а также интерфейсы для Java API.
- Strong-ARM, Оберон 2007
Был реализация языка Оберон для аппаратной платформы ARM — Strong-ARM, в частости, для использования в управляющих системах беспилотных летательных аппаратов.
В 2007 году Вирт, основываясь на опыте работы с платформой ARM, пересмотрел язык Оберон. Новый язык получил название Оберон 2007.[10] Стоит подчеркнуть, что за основу был взят именно первоначальный Оберон[11], а не, скажем, Оберон-2, причины чего должны быть ясны из вышесказанного.
ETH Oberon, реализации которого имеются для многих вычислительных платформ.
- Компонентный Паскаль (Component Pascal)
Оберон-2 сразу после опубликования в 1992 году рассматривался как кандидат на роль стандарта языка (конференция Oakwood Conference, Croydon, 1993), но практический опыт, накопленный при создании больших программных комплексов, выявил некоторые слабости нововведений и желательность дальнейших уточнений (что лишний раз подчёркивает мудрость консерватизма, проявленного Виртом в определении первоначального Оберона). Эти уточнения были предприняты в варианте Оберона-2, названном Компонентный Паскаль и опубликованном в 1999 году, компанией Oberon microsystems[12], образованной в 1992 году учениками Вирта (сам Вирт стал членом совета директоров). Как и при переходе от Оберона к Оберону-2, эти уточнения сделаны максимально экономно [13]. В частности, теперь язык полностью поддерживает методологию компонентно-ориентированного программирования. Благодаря последнему обстоятельству, Компонентный Паскаль на данный момент является, по-видимому, наиболее совершенным вариантом «классических» Оберонов. Однако он может быть редуцирован не только к подмножеству, эквивалентному первоначальному Оберону, но и к другому полноценному мимималистичному подмножеству, в котором наследование и переопределение методов допускается только для чисто интерфейсных типов и методов (определенных с атрибутом ABSTRACT). Это обстоятельство выявляет несколько промежуточный характер Оберона-2.
Компонентный Паскаль представляет собой дальнейшее развитие Оберона-2, в котором добавлены средства, позволяющие разработчику полностью контролировать расширение экспортируемых типов и переопределение методов (атрибуты EXTENSIBLE, ABSTRACT, NEW, EMPTY, а также возможность ограниченного экспорта метода «только для реализации»). Добавлен блок завершения тела модуля (ключевое слово CLOSE) и предопределенный пустой метод FINALIZE. Система основных (элементарных) типов приведена в соответствие с типами Java. Введён неявный строковый тип. Компания Oberon Microsystems, выпустившая версию языка - Компонентный Паскаль, выпустила также библиотеку BlackBox Component Framework и среду визуального программирования BlackBox Component Builder[14] — небольшой по объёму и нетребовательный к ресурсам, целиком построенный на Компонентном Паскале.
Впоследствии BlackBox был расширен средой кросс-программирования Denia, позволяющей выполнять кросс-программирование для ОСРВ JBed (которая тоже полностью реализована на Компонентном Паскале). JBed предназначена для встроенных систем, работающих в реальном времени, например, для промышленных автоматов.
- Oberon SA и Oberon-07
Oberon SA — это версия языка Oberon, доработанная для эффективного программирования процессоров. На основе опыта разработки Oberon SA Н.Вирт подготовил изменения и дополнения к первоначальному стандарту языка Oberon. Новая версия языка получила название Oberon-07.
Oberon-07 — это уточнение базового Оберона, прежде всего для более строгой поддержки структурного программирования. В цикле WHILE разрешены несколько охраняемых ветвей (ELSIF … DO), тем самым обеспечена полная явная поддержка цикла Дейкстры[15]. При этом исключен неструктурированный цикл LOOP. Добавлен оператор цикла FOR. В процедуре теперь может быть только один оператор RETURN, его позиция в конце процедуры фиксирована. Уточнено правило импорта/экспорта: экспорт переменных разрешён только для чтения, спецификатор экспорта один — «*». Уточнены типы данных — CHAR поддерживает множество Latin-1, INTEGER — −2^31 — +2^31-1, REAL и LONGREAL — IEEE Standard, 32 и 64 бита соответственно, SET — множество целых между 0 и 31.
Языки семейства Oberon
- Active Oberon, Zonnon
Эти языки уже с полным основанием можно назвать не расширениями или версиями Оберона, а самостоятельными языками. В них существенно расширен синтаксис, введены конструкции для описания классических «свойств» (property) с контролем чтения/записи, числовых типов с задаваемым размером в битах. Введена поддержка активных объектов, обменивающихся сообщениями в формате, определяемом РБНФ-описанием, обработка исключений.
- Глагол
В России был разработан язык Глагол, структурно очень близкий к Оберону-2. Главное его отличие состоит в использовании русских служебных слов. [16] [17] Помимо этого, язык имеет ещё ряд отличий от Оберона-2:
- удалены методы (процедуры, связанные с типом);
- не используются псевдонимы в объявлениях импорта модулей;
- добавлена условная компиляция исходных текстов;
- добавлена возможность непосредственно указывать путь к используемым модулям;
- добавлена специальная пометка для главного (запускаемого) модуля программы;
- добавлен встроенный тип-итератор для ускорения последовательного доступа к массиву.
- изменены метки экспорта для переменных, констант и процедур, а также способ указания параметров-переменных;
- изменён синтаксис оператора WITH (ДЛЯ);
- запрещена передача через параметры процедур массивов и записей;
- изменены размеры некоторых типов данных;
- изменён набор встроенных процедур и состав системных модулей;
Язык поддерживает юникод. Реализован компилятор (называемый преобразователем) для платформ Windows и PocketPC, а также среда разработки (также под Windows).
Интересные факты
- По подсчётам, опубликованным в статье Сергея Свердлова «Арифметика синтаксиса», «линия Вирта», как он её назвал — линия, включающая Паскаль, Модулу-2, Оберон и Оберон2 — это единственный пример «генетической линии» языков-потомков Алгола-60, в которой сложность языка, определённая с необходимыми оговорками как количество лексем в его описании, стабильно снижалась и в настоящее время оказывается ниже, чем у общего «прародителя» — Алгола-60. Все языки «линии Вирта» проще Алгола-60, и каждый следующий язык в этой линии проще предыдущего. В то же время Ада более чем вдвое сложнее своего предшественника — Паскаля, C++ приблизительно в 1,7 раза сложнее Си, а в линейке Паскаль — Турбо Паскаль разных версий — Object Pascal сложность экспоненциально растёт от версии к версии.
- Эпиграфом к описанию оригинального Оберона была выбрана фраза Эйнштейна: «Делай настолько просто, насколько возможно, но не проще этого». В описании Оберона-2 этого эпиграфа нет.
Примечания
- ↑ 1 2 Н. Вирт. От Модулы к Оберону
- ↑ N. Wirth and J. Gutknecht. Project Oberon. Addison-Wesley, 1992
- ↑ N. Wirth. The Programming Language Oberon. Software — Practice and Experience, Vol.18, No.7, p.671-690
- ↑ C. Szyperski. Component Software — Beyond Object-Oriented Programming. Addison- Wesley, 1998.
- ↑ Лекция Н. Вирта в Нижегородском государственном университете им. Н. И. Лобачевского
- ↑ Язык программирования Оберон-2,Х.Мёссенбёк, Н.Вирт
- ↑ A Description of the Oberon-2 Language, Paul Floyd (англ.)
- ↑ XDS Family of Products
- ↑ компилятор Оберон-2 в байт-код виртуальной машины Ява (Java Virtual Machine)
- ↑ The Programming Language Oberon, rev. 1.12.2007
- ↑ Difference between Oberon-07 and Oberon
- ↑ http://www.oberon.ch
- ↑ Сообщение о языке Компонентный Паскаль
- ↑ BlackBox Component Builder
- ↑ Э.Дейкстра. Дисциплина программирования. Мир, Москва, 1978
- ↑ Разработки на Глаголе ., glagol.nad.ru
- ↑ Официальный сайт языка Глагол .
Литература
- На английском языке
- Martin Reiser, Niklaus Wirth. Programming in Oberon: steps beyond Pascal and Modula — NY: ACM Press, 1992 — ISBN 0-201-56543-9, 22Mb
- N.Wirth.Algorithms and Data Structures (Oberon Version, 1.2Мб
- N.Wirth, J.Gutknecht.Project Oberon: The Design of an Operating System and Compiler, 4.2Мб PDF
- N.Wirth.The Programming Language Oberon, 91Кб
- N.Wirth.Programming in Oberon. A derivative of Programming in Modula-2, 400Кб
Ссылки
- ETH: Oberon (англ.)
- Язык Оберон.Краткий путеводитель.Руслан Богатырев, Мир ПК, октябрь 2005
- Мёссенбёк, Н. Вирт. Язык программирования Оберон-2, Институт компьютерных систем, ETH, Цюрих,1996. pdf
- Язык программирования Оберон- первый российский ресурс (1998)
- Портал oberon2005.ru
- Сборник статей (русск.) и книг(англ.), в том числе по Оберону
- Языки программирования и технологии «Оберон»: перспективы для индустрии и образования, Орловский ГУ, материалы секции-семинара, 30 марта 2006 г.
- Подготовка учебных пособий на русском
См. также