Реферат Глагол (язык программирования)

Опубликовать

скачать
20 запрещенных фильмов
Реферат на тему:

# Оберон (язык программирования)

## План:

Введение
- 1 Системы и среды
- 2 История языка
- 3 Язык Оберон
  - 3.1 Нововведения
  - 3.2 Упрощение синтаксиса
  - 3.3 Синтаксис в РБНФ
  - 3.4 Основные элементы
- 4 Концепции программирования
- 5 Влияние Оберона на другие языки
- 6 Версии языка
- 7 Языки семейства Oberon
- 8 Интересные факты
Примечания
Литература

## Введение

Оберон — язык программирования высокого уровня, разработанный Никлаусом Виртом, для исполнения программ на котором предназначена одноимённая операционная система, авторами которой являются Н. Вирт и Юрг Гуткнехт (Jurg Gutknecht).

## 1. Системы и среды

Программы, написанные на языке программирования Оберон, требуют определённой поддержки во время выполнения — им необходим динамический загрузчик и централизованно выполняемый автоматический сборщик мусора, для этого программам на языке Оберон нужна специальная операционная среда. Обычным способом её реализации является добавление в систему набора библиотек, реализующих необходимые компоненты, хотя, вообще говоря, операционной среде вовсе не обязательно нужна отдельная операционная система: она сама по себе может представлять собой операционную систему. Таковы системы Native Oberon для первоначального Оберона и Bluebottle для Active Oberon. На данный момент существует компиляторы Оберон в байт-код виртуальной Java-машины и CLI для виртуальной машины .NET.

Операционные системы и среды для исполнения программ на языках семейства Оберон, развившихся из первоначальной Системы Оберон, являются ETH Oberon, BlackBox Component Builder, WinOberon, Bluebottle и др.

На базе Оберона были разработаны проекты Оберон-0, Оберон-X и другие. Простота Оберона и наличие исходных текстов оригинальной реализации позволяют легко адаптировать его для специальных классов задач. Но все эти Обероны очень близки между собой, поскольку и первоначальный Оберон очень прост.

## 2. История языка

Основой для Оберона послужил язык Модула-2, выросший из Паскаля, (по словам Вирта[1], первоначально систему хотели писать непосредственно на Модуле, но пришли к выводу о необходимости её доработки и сокращения, что и привело к появлению Оберона). Целью проекта (Project Oberon) Никлауса Вирта и Юрга Гуткнехта в 1986-89 гг.[2] было создание с нуля обозримой и надежной операционной системы для однопользовательской рабочей станции.

Для реализации этого проекта в 1988 году Никлаусом Виртом был спроектирован язык программирования высокого уровня общего назначения, также названный Оберон.[3]

В 1989 году в Швейцарской высшей технической школе Цюриха (ETH) была выпущена первая реализация Оберона для процессоров семейства NS32000. Он был создан в качестве компонента операционной среды Оберон. Этот компилятор требует менее 50 Кбайт памяти, состоит из 6 модулей общим объёмом около 4000 строк и сам себя компилирует за 15 секунд на компьютере с процессором NS32532 (тактовая частота — 25 МГц).

## 3. Язык Оберон

### 3.1. Нововведения

| Просто невозможно поблагодарить всех тех, кто так или иначе подпитывал своими идеями то, что теперь называется Oberon. Большинство идей пришло от использования и изучения существующих языков, таких как Modula-2, Ada, Smalltalk и Cedar, которые часто предостерегали нас от того, как не надо делать. |

Никлаус Вирт [1]

Язык сохранил основные черты синтаксиса Модулы и был объектным расширением. Это позволило отказаться от механизма вариантных записей Модулы, являющихся отступлением от первоначальной строгой статической типизации, что дало возможность ввести механизм автоматического управления памятью — сборку мусора: из языка исключена возможность освобождения динамически выделенной памяти с помощью особого оператора, а вместо него сама среда исполнения содержит модуль, возвращающий неиспользуемую память системе. Автоматическое управление памятью является средством повышения надёжности программ с динамическими структурами данных, так как исключает человеческие ошибки, свойственные, например, таким языкам, как С/C++.

### 3.2. Упрощение синтаксиса

Чтобы добиться максимальной надёжности и производительности трансляции, было предпринято значительное упрощение языка за счёт его отказа от средств, которые были сочтены ненужными (исходя из опыта разработки, реализации и эксплуатации других языков), либо усложняли компилятор без достаточного оправдания с точки зрения производительности, либо были достаточно сложны, чтобы быть отправленными во внешние библиотеки, либо плохо совмещались с механизмами модульности и автоматического управления памятью: записи с вариантами, перечислимые типы, типы-диапазоны, множества общего вида, беззнаковый целый тип, локальные модули, модули определений, списки экспорта, оператор for, прежний вариант оператора with, специальный синтаксис определения главной программы. Рудиментарные средства поддержки параллельного программирования, имевшиеся в Модуле-2, не вошли в язык, так как он обслуживал однопользовательскую операционную систему. В целях упрощения отказались от обработки исключений.

Было упрощено описание массивов (индексы массивов могут быть только целочисленными и всегда начинаются с нуля, подобно языку Си), ограничено использование указателей — указатели могут существовать только на записи и массивы, в списках импорта указывается только импортируемый модуль, а при использовании импортированных имён требуется обязательная квалификация (явное указание имени модуля-экспортёра). В статье «От Модулы к Оберону»[1] Вирт подробно прокомментировал причины удаления каждого из элементов.

Из соображений «достаточного минимума» в язык не были включены в качестве явного синтаксического понятия методы (процедуры и функции, связанные с типом), так как этот механизм в самом общем виде легко смоделировать, создавая в объектах (записях в языке Оберон) поля процедурного типа и присваивая им процедуры, соответствующие методам. Таким образом, в Обероне минимальными средствами поддерживается объектно-ориентированное программирование для упрощения процесса трансляции кода и ускорения этого процесса.

Благодаря внесённым изменениям, Оберон стал синтаксически проще. Описание его синтаксиса поместилось на одной странице, полное описание языка занимает около 20 страниц, что вдвое меньше, чем описание Модулы-2. Оберон является если не минимальным, то, во всяком случае, одним из самых малых по объёму универсальных языков программирования высокого уровня.

### 3.3. Синтаксис в РБНФ

Синтаксис «Оберона-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 | "&".
    Обозначение      = УточнИдент {"." идент | "[" СписокВыраж "]" | "^" | "(" УточнИдент ")"}.
    СписокВыраж      = Выраж {"," Выраж}.
    СписокИдент      = ИдентОпр {"," ИдентОпр}.
    УточнИдент       = [идент "."] идент.
    ИдентОпр         = идент [ "*" | "-" ].

### 3.4. Основные элементы

Программа на Обероне представляет собой набор модулей. В общем виде модуль имеет вид:

      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`.

## 4. Концепции программирования

Компонентное программирование

Оберон нацелен на компонентно-ориентированную разработку программного обеспечения.[4] Инкапсуляция поддерживается исключительно на уровне модуля — все типы, объявленные внутри модуля, друг для друга абсолютно прозрачны. Из других модулей доступно то, что объявлено при определении как экспортируемое.

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

В языке отсутствует специальный механизм конструкторов. Рекомендуемым методом создания и инициализации объектов является описание порождающих модулей и процедур (в традиционной терминологии ООП — factory).

Программа в такой технологии представляет собой набор относительно самостоятельных компонентов (в данном случае — модулей), имеющих скрытую от внешнего мира внутреннюю структуру и чётко определённый интерфейс. Модули могут загружаться и выгружаться динамически, во время работы программы, система предоставляет развитые средства контроля типов во время выполнения, которые позволяют писать универсальные алгоритмы обработки данных, не зависящие от конкретных типов этих данных (например, библиотека для работы с СУБД может предоставлять методы, записывающие результат запроса из базы в запись произвольной структуры, если набор и типы полей этой записи соответствуют набору и типам полей в БД).

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

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

Типичная система, разработанная на Обероне, представляет собой набор модулей с процедурными интерфейсами, через которые модули обмениваются данными, в том числе и объектами. При этом все средства инкапсуляции действуют только в межмодульном взаимодействии, что делает удобным системное программирование с использованием объектов.

Объектно-ориентированное программирование

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

## 5. Влияние Оберона на другие языки

По утверждению Вирта[5], разработчики языка Java за несколько лет до её создания «изучили исходные коды Оберона и, в частности, исходные коды обероновских сборщиков мусора. Потом они испортили Оберон синтаксисом Си и назвали получившееся словом Java». Хотя от устного выступления нельзя требовать абсолютной точности формулировок, но во всяком случае несомненное сходство идеологий Оберона и Java (стремление к минимализму и строгой типизации, ограничение множественного наследования, автоматическое управление памятью) говорит о том, что здесь имеет место определённый консенсус относительно того, какие средства должны составлять ядро современного языка программирования общего назначения. Очевидно[] и то, что из двух языков Оберон спроектирован гораздо тщательнее.

В само семейство языков Оберон входят также Оберон-07, Оберон-2, Component Pascal (Компонентный Паскаль), Active Oberon, OberonScript и др.

## 6. Версии языка

Исходная версия 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.

ETH Oberon

ETH Oberon, реализации которого имеются для многих вычислительных платформ.

Oberon SA и Oberon-07

Oberon SA — это версия языка Oberon, разработанная Н.Виртом для процессора Strong-ARM, используемого в беспилотном вертолете.

На основе опыта разработки Oberon SA Н.Вирт в 2007 году подготовил изменения и дополнения к классическому Оберону [10][11] для более строгой поддержки структурного программирования, чем, например, в Oberon-2 или Компонентном Паскале. Новая версия языка получила название Oberon-07[12]. Имеется перевод "The Programming Language Oberon, Revision 1.11.2008" на русский язык [13]. Но в отношении поддержки объектно-ориентированного программирования язык Oberon-07 не следует за Обероном-2, а продолжает минималистичную линию классического Оберона, включая отсутствие поддержки процедур, привязанных к типам записей.

Oberon-07 имеет следующие основные отличия от классического Оберона:

- в цикле WHILE разрешены несколько охраняемых ветвей (ELSIF … DO). Тем самым обеспечена полная явная поддержка цикла Дейкстры[14]. Ранее цикл Дейкстры моделировался при помощи цикла LOOP;
- соответственно, исключен неструктурированный цикл LOOP вместе с оператором EXIT (выход из цикла);
- в процедуре теперь может быть только одна точка выхода, фиксированная в конце тела процедуры: RETURN, в сущности, перестал быть оператором, превратившись в такую же синтаксическую часть описания процедуры, как ключевое слово PROCEDURE и т.д.;
- добавлен оператор цикла FOR;
- исключено неявное приведение типа INTEGER к REAL и типов с различной разрядностью друг к другу;
- разрешены ссылки только на записи;
- уточнено правило импорта/экспорта: экспорт переменных разрешён только для чтения, спецификатор экспорта один — «*»;
- уточнены типы данных — CHAR поддерживает множество Latin-1, INTEGER — −2^31 — +2^31-1, REAL и LONGREAL — IEEE Standard, 32 и 64 бита соответственно, SET — множество целых между 0 и 31.

Австралийская компания CFB Software (г. Брисбен) при Университете штата Квинсленд разработала IDE Astrobe[15] для языка Oberon-07 для микроконтроллеров ARM7 компании NXP (Philips) и синтаксические диаграммы языка Oberon-07[16], а также рекомендации по стилю программ на Oberon-07 [17].

Глагол

В России был разработан язык Глагол, структурно очень близкий к Оберону-2. Главное его отличие состоит в использовании русских служебных слов. [18] [19] Помимо этого, язык имеет ещё ряд отличий от Оберона-2:

- удалены методы (процедуры, связанные с типом);
- не используются псевдонимы в объявлениях импорта модулей;
- добавлена условная компиляция исходных текстов;
- добавлена возможность непосредственно указывать путь к используемым модулям;
- добавлена специальная пометка для главного (запускаемого) модуля программы;
- добавлен встроенный тип-итератор для ускорения последовательного доступа к массиву.
- изменены метки экспорта для переменных, констант и процедур, а также способ указания параметров-переменных;
- изменён синтаксис оператора WITH (ДЛЯ);
- запрещена передача через параметры процедур массивов и записей;
- изменены размеры некоторых типов данных;
- изменён набор встроенных процедур и состав системных модулей;

Язык поддерживает юникод. Реализован компилятор (называемый преобразователем) для платформ Windows и PocketPC, а также среда разработки (также под Windows).

## 7. Языки семейства Oberon

Компонентный Паскаль (Component Pascal)

Оберон-2 сразу после опубликования в 1992 году рассматривался как кандидат на роль стандарта языка (конференция Oakwood Conference, Croydon, 1993), но практический опыт, накопленный при создании больших программных комплексов, выявил некоторые слабости нововведений и желательность дальнейших уточнений (что лишний раз подчёркивает мудрость консерватизма, проявленного Виртом в определении классического Оберона). Эти уточнения были предприняты в варианте Оберона-2, названном Компонентный Паскаль и опубликованном в 1999 году, компанией Oberon microsystems [20], образованной в 1992 году учениками Вирта (сам Вирт стал членом совета директоров). Как и при переходе от Оберона к Оберону-2, эти уточнения сделаны максимально экономно [21]. В частности, теперь язык полностью поддерживает методологию компонентно-ориентированного программирования. Благодаря последнему обстоятельству, Компонентный Паскаль на данный момент является, по-видимому, наиболее совершенным среди прямых потомков классического Оберона. Однако он может быть редуцирован не только к подмножеству, эквивалентному первоначальному Оберону, но и к другому полноценному минималистичному подмножеству, в котором наследование и переопределение методов допускается только для чисто интерфейсных типов и методов (определенных с атрибутом ABSTRACT). Это обстоятельство выявляет несколько промежуточный характер Оберона-2.

В Компонентный Паскаль по сравнению с Обероном-2 добавлены средства, позволяющие разработчику полностью контролировать расширение экспортируемых типов и переопределение методов (атрибуты EXTENSIBLE, ABSTRACT, NEW, EMPTY, а также возможность ограниченного экспорта метода «только для реализации»). Добавлен блок завершения тела модуля (ключевое слово CLOSE) и предопределенный пустой метод FINALIZE. Система основных (элементарных) типов приведена в соответствие с типами Java. Введён неявный строковый тип. Компания Oberon Microsystems, определившая Компонентный Паскаль, выпустила также фреймворк BlackBox Component Framework и среду визуального программирования BlackBox Component Builder[22] — небольшие по размеру и нетребовательные к ресурсам, целиком построенные на Компонентном Паскале.

Впоследствии компилятор BlackBox был интегрирован в кросс-платформенную среду программирования Denia, в частности для операционной системы реального времени JBed, полностью написанной на Компонентном Паскале.

Active Oberon[23], Zonnon

Эти языки уже с полным основанием можно назвать не расширениями или версиями Оберона, а самостоятельными языками. В них существенно расширен синтаксис, введены конструкции для описания классических «свойств» (property) с контролем чтения/записи, числовых типов с задаваемым размером в битах. Введена поддержка активных объектов, обменивающихся сообщениями в формате, определяемом РБНФ-описанием, обработка исключений.

## 8. Интересные факты

- По подсчётам, опубликованным в статье Сергея Свердлова «Арифметика синтаксиса», «линия Вирта», как он её назвал — линия, включающая Паскаль, Модулу-2, Оберон и Оберон2 — это единственный пример «генетической линии» языков-потомков Алгола-60, в которой сложность языка, определённая с необходимыми оговорками как количество лексем в его описании, стабильно снижалась и в настоящее время оказывается ниже, чем у общего «прародителя» — Алгола-60. Все языки «линии Вирта» проще Алгола-60, и каждый следующий язык в этой линии проще предыдущего. В то же время Ада более чем вдвое сложнее своего предшественника — Паскаля, C++ приблизительно в 1,7 раза сложнее Си, а в линейке Паскаль — Турбо Паскаль разных версий — Object Pascal сложность экспоненциально растёт от версии к версии.
- Эпиграфом к описанию оригинального Оберона была выбрана фраза Эйнштейна: «Делай настолько просто, насколько возможно, но не проще этого». В описании Оберона-2 этого эпиграфа нет.

## Примечания

1. ↑ 1 2 3 Никлаус Вирт «От модулы к Оберону» - www.vspu.ac.ru/~chul/wirth/frommodula/frommodula.htm . ИнфоАрт.
2. N. Wirth and J. Gutknecht. Project Oberon. Addison-Wesley, 1992
3. N. Wirth. The Programming Language Oberon. Software — Practice and Experience, Vol.18, No.7, p.671-690
4. C. Szyperski. Component Software — Beyond Object-Oriented Programming. Addison- Wesley, 1998.
5. Лекция Н. Вирта в Нижегородском государственном университете им. Н. И. Лобачевского - www.oberon2005.ru/r260905.html
6. Язык программирования Оберон-2 - www.uni-vologda.ac.ru/oberon/o2rus.htm,Х.Мёссенбёк, Н.Вирт
7. A Description of the Oberon-2 Language, Paul Floyd - www.edm2.com/0608/oberon2.html (англ.)
8. XDS Family of Products - www.excelsior-usa.com/xds.html
9. компилятор Оберон-2 в байт-код виртуальной машины Ява ( - www.uni-vologda.ac.ru/JOB/rus/index.htmlJava Virtual Machine)
10. Difference between Oberon-07 and Oberon - www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.pdf
11. Oberon at a glance - oberoncore.ru/_media/wiki/lang/wirth_n.oberon_at_a_glance.en.pdf
12. The Programming Language Oberon, Revision 1.11.2008 - www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf
13. Перевод "The Programming Language Oberon, Revision 1.11.2008" на русский язык - forum.oberoncore.ru/download/file.php?id=1956
14. Э.Дейкстра. Дисциплина программирования. Мир, Москва, 1978
15. IDE Astrobe для языка Oberon-07 - www.cfbsoftware.com/astrobe/astrobe.aspx
16. Синтаксические диаграммы языка Oberon-07 - www.cfbsoftware.com/astrobe/Oberon07.Syntax.zip
17. Рекомендации по стилю программ на Oberon-07 в главе 10 Programming Conventions and Guidelines - www.cfbsoftware.com/astrobe/Oberon.LPC2000.pdf
18. Разработки на Глаголе - glagol.nad.ru/., glagol.nad.ru
19. Официальный сайт языка Глагол - glagol.tut.su/.
20. Oberon microsystems AG - www.oberon.ch
21. Сообщение о языке Компонентный Паскаль - www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm
22. BlackBox Component Builder - www.oberon.ch/blackbox.html
23. Active Oberon for .NET:An Exercise in Object Model Mappin - research.microsoft.com/en-us/um/people/nick/entcs/gutknecht.pdf

## Литература

- Свердлов С. З. Языки программирования и методы трансляции - www.piter.com/book.phtml?978546900378, Питер,2007, ISBN 978-5-469-00378-6

На английском языке

- Martin Reiser, Niklaus Wirth. Programming in Oberon: steps beyond Pascal and Modula - www.oberon.ethz.ch/WirthPubl/ProgInOberonWR.pdf — NY: ACM Press, 1992 — ISBN 0-201-56543-9, 22Mb
- N.Wirth.Algorithms and Data Structures (Oberon Version - www.oberon.ethz.ch/WirthPubl/AD.pdf, 1.2Мб
- N.Wirth, J.Gutknecht.Project Oberon: The Design of an Operating System and Compiler - www.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf, 4.2Мб PDF
- N.Wirth.The Programming Language Oberon - store.oberoncore.ru/lib/book/report_oberon.pdf, 91Кб
- N.Wirth.Programming in Oberon. A derivative of Programming in Modula-2 - www.inr.ac.ru/~info21/wirth/programming_in_oberon.pdf, 400Кб

Данный реферат составлен на основе статьи из русской Википедии. Синхронизация выполнена 14.07.11 04:42:07

Похожие рефераты: CPL (язык программирования), X10 (язык программирования), Cat (язык программирования), J (язык программирования), Язык программирования, R (язык программирования), C (язык программирования), Joy (язык программирования), Oz (язык программирования).
Категории: Появились в 1986 году, Языки программирования по алфавиту, Языки программирования, Семейство языков программирования Pascal.

Текст доступен по лицензии Creative Commons Attribution-ShareAlike.