Охарактеризуйте кратко языки программирования фортран бейсик паскаль оберон

Примечания

  1.  (недоступная ссылка). Дата обращения: 21 августа 2012.
  2. Wirth, N. Project Oberon :  / N. Wirth, J. Gutknecht. — New York : Addison-Wesley, 1992.
  3. Wirth, N. 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. . Дата обращения: 11 декабря 2021.
  6.  (недоступная ссылка). Дата обращения: 12 октября 2009.
  7. . Дата обращения: 30 сентября 2021.
  8. . Дата обращения: 14 февраля 2011.
  9. Э.Дейкстра. Дисциплина программирования. Мир, Москва, 1978
  10. . Дата обращения: 3 мая 2010.
  11. . Дата обращения: 28 сентября 2007.
  12.  (недоступная ссылка). Дата обращения: 22 декабря 2005.
  13. . Дата обращения: 15 февраля 2011.

Влияние на другие языки

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

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

Реализации и варианты

Oberon

Бесплатные реализации Oberon (язык) и Oberon (операционная система) можно найти в Интернете (несколько из ETHZ сам).

Оберон-2

В первую выпущенную спецификацию были внесены некоторые изменения (были добавлены функции объектно-ориентированного программирования, например, был восстановлен цикл FOR); результат был Oberon-2. Существует выпуск под названием Native Oberon, который включает операционную систему и может напрямую загружаться на аппаратном обеспечении класса ПК. .NET реализация Oberon с добавлением некоторых незначительных расширений, связанных с.NET, также была разработана в ETHZ. В 1993 году дочерняя компания ETHZ представила на рынке диалект Oberon-2 под названием Oberon-L, который в 1997 году был переименован в Component Pascal.

Разработаны компиляторы Oberon-2 by ETH включают версии для Microsoft Windows, Linux, Solaris и классической Mac OS. Кроме того, существуют реализации для различных других операционных систем, таких как Atari-TOS или AmigaOS.

Существует сканер Oberon-2 Lex и Yacc синтаксический анализатор Стивена Дж. Бевана из Манчестерского университета, Великобритания, на основе справочного материала Мессенбека и Вирта. Это версия 1.4.

Active Oberon

ETHZ выпустил Active Oberon, который поддерживает активные объекты, а также операционную систему Bluebottle и среду (JDK, HTTP, FTP и т. Д.) Для этого языка. Как и многие предыдущие разработки ETHZ, версии обоих доступны для загрузки в Интернете. На данный момент поддерживаются как одиночные, так и двойные ЦП x86 и семейство StrongARM.

Родственные языки

Языки этого семейства разрабатываются. Дальнейшее расширение Oberon-2, первоначально называвшееся Oberon / L, но позже переименованное в Component Pascal, было разработано для Windows и классической Mac OS дочерней коммерческой компанией Oberon Microsystems. от ETHZ, а для.NET — Технологический университет Квинсленда. Кроме того, языки и Obliq несут дух Оберона в специализированные области.

Недавние усилия по разработке.NET в ETHZ были сосредоточены на новом языке под названием Zonnon. Это включает функции Оберона и некоторые из них восстанавливает из Паскаля (перечисляемые типы, встроенный ввод-вывод), но имеет некоторые синтаксические отличия. Дополнительные функции включают поддержку активных объектов, перегрузку оператора и обработку исключений. Zonnon доступен как язык надстройки для среды разработки Microsoft Visual Studio для.NET.

Oberon-V (первоначально называвшийся Seneca, от Seneca the Younger ) является потомком Oberon, разработанным для числовых приложений на суперкомпьютерах, особенно векторных или конвейерных архитектур. Он включает конструкторы массивов и оператор ALL. (См. «Seneca — язык для числовых приложений на векторных компьютерах», Proc CONPAR 90 — VAPP IV Conf. R. Griesemer, Diss Nr. 10277, ETH Zurich.)

Дизайн

Оберон разработан с девизом, приписываемым Альберт Эйнштейн в уме: «Делайте вещи как можно проще, но не проще». Основная рекомендация заключалась в том, чтобы сосредоточиться на основных и важных функциях и опустить эфемерные проблемы. Еще одним фактором было признание роста сложности таких языков, как C ++ и Ада: в отличие от них, Oberon подчеркивает использование концепции библиотеки для расширения языка. Типы перечисления и поддиапазона, которые присутствовали в Модуле-2, были удалены; аналогично, типы наборов были ограничены небольшими наборами целых чисел, а количество средств нижнего уровня было резко сокращено (в частности, были устранены функции передачи типов). Устранение оставшихся потенциально небезопасных объектов завершает самый важный шаг к получению действительно высокого уровня языка. Очень тщательная проверка типов даже между модулями, строгая проверка индекса во время выполнения, нулевой указатель проверка и концепция безопасного расширения типа в значительной степени позволяют программисту полагаться только на правила языка.

Цель этой стратегии состояла в том, чтобы создать язык, который легче выучить, проще в реализации и очень эффективен. Компиляторы Oberon считаются компактными и быстрыми, обеспечивая при этом адекватное качество кода по сравнению с коммерческими компиляторами.

мЙФЕТБФХТБ РП пВЕТПОХ

л УПЦБМЕОЙА, ОБ ТХУУЛПН СЪЩЛЕ «ВХНБЦОЩЕ» ЛОЙЗЙ РП пВЕТПОХ РПЛБ ОЕ ЙЪДБЧБМЙУШ. фЕН ОЕ НЕОЕЕ, УППВЭЕОЙЕ П СЪЩЛЕ пВЕТПО-2 (ЛТБФЛПЕ, ОП ЙУЮЕТРЩЧБАЭЕЕ ПРЙУБОЙЕ СЪЩЛБ оЙЛМБХУПН чЙТФПН) ВЩМП РЕТЕЧЕДЕОП ОБ ТХУУЛЙК СЪЩЛ:

и. нЈУУЕОВЈЛ, о. чЙТФ «сЪЩЛ РТПЗТБННЙТПЧБОЙС пВЕТПО-2» рЕТЕЧПД у. ъ. уЧЕТДМПЧБ (pdf, html)

фБЛЦЕ ВЩМ ЧЩРПМОЕО РЕТЕЧПД «уППВЭЕОЙС П СЪЩЛЕ лПНРПОЕОФОЩК рБУЛБМШ» Й ДПЛХНЕОФБГЙЙ РП вМЬЛВПЛУХ — ОБЙВПМЕЕ ЙОФЕТЕУОПК, У РТБЛФЙЮЕУЛПК ФПЮЛЙ ЪТЕОЙС, ТЕБМЙЪБГЙЙ СЪЩЛБ. ч ЛБЮЕУФЧЕ ХТПЛПЧ РП вМЬЛВПЛУХ НПЦОП РПУПЧЕФПЧБФШ ТБВПФЩ ТХУУЛПЗП ХЮЙФЕМС еТНБЛПЧБ й. е. ЙЪ ЗПТПДБ пТЈМ:

  1. «ъОБЛПНУФЧП УП УТЕДПК»
  2. «рЙЫЕН УЧПК РЕТЧЩК НПДХМШ»
  3. «уЙУФЕНБ Black Box. лПНРПОЕОФОЩК рБУЛБМШ.» (2Mb PDF)

оБ БОЗМЙКУЛПН СЪЩЛЕ УХЭЕУФЧХАФ УМЕДХАЭЙЕ ЛОЙЗЙ РП BlackBox’Х:

  • Programming with BlackBox / J. Stanley Warford (2Mb rar) (БОЗМ.)
  • Developing Programs with BlackBox Oberon / Brett S. Hallett (1.5Mb rar) (БОЗМ.)

жХОДБНЕОФ МЙФЕТБФХТЩ РП пВЕТПОХ ЪБМПЦЙМБ «ФТЙМПЗЙС пВЕТПОБ», Б ЙНЕООП ФТЙ ЛОЙЗЙ ПФ УПЪДБФЕМС СЪЩЛБ (ЧЩМПЦЕООЩЕ БЧФПТБНЙ Ч УЧПВПДОЩК ДПУФХР):

  1. Programming in Oberon: steps beyond Pascal and Modula. / Martin Reiser, Niklaus Wirth — NY: ACM Press, 1992 — ISBN 0–201–56543–9 — (22Mb PDF) (БОЗМ.)
    мХЮЫЕЕ ЧЧЕДЕОЙЕ Ч СЪЩЛ пВЕТПО ДМС ОПЧЙЮЛПЧ. хЮЕВОЙЛ Й ПРЙУБОЙЕ СЪЩЛБ.
  2. Algorithms and Data Structures (Oberon Version) / N.Wirth — (1.2M PDF) (БОЗМ.)
    рТПЗТБННЙТПЧБОЙЕ «Ч НБМПН». оБРЙУБОЙЕ ПФДЕМШОЩИ НПДХМЕК: БМЗПТЙФНЩ, УФТХЛФХТЩ ДБООЩИ.
  3. Project Oberon: The Design of an Operating System and Compiler / N.Wirth, J.Gutknecht — (4.2M PDF) (БОЗМ.)
    рТПЗТБННЙТПЧБОЙЕ «Ч ВПМШЫПН». уВПТЛБ УЕТШЈЪОЩИ РТПЕЛФПЧ ЙЪ НПДХМЕК, ПВЯЕЛФПЧ, ЛПНРПОЕОФ.

фБЛЦЕ ЙЪХЮБАЭЙН СЪЩЛ пВЕТПО РПМЕЪОЩ МЕЛГЙЙ оЙЛМБХУБ чЙТФБ ОБ БОЗМЙКУЛПН СЪЩЛЕ:

  • The Programming Language Oberon / N.Wirth — (91Kb PDF) (БОЗМ.)
  • Programming in Oberon. A derivative of Programming in Modula-2 / N.Wirth — (400Kb PDF) (БОЗМ.)

нБФЕТЙБМ ЙЪ ЧЙЛЙРЕДЙЙ — УЧПВПДОПК ЬОГЙЛМПРЕДЙЙ

Среда времени выполнения

Информация о типах времени выполнения

Только структурные типы (массивы, записи, объекты) имеют информацию о типах времени выполнения (метаинформацию). Метаинформация хранится в специальной структуре, называемой Дескриптор типа. Дескриптор типа содержит данные о типах и именах переменных и полей, таблицу наследования, таблицу виртуальных методов и таблицы реализованных интерфейсов.

Управление памятью

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

Управление памятью основано на использовании типизированных участков памяти. Такой участок хранит указатель на дескриптор типа. Используя информацию о типах времени выполнения, находящуюся в дескрипторе типа, сборщик мусора находит переменные и поля ссылочного типа и помечает блоки, на которые они указывают. Другими словами, сборщику мусора нет необходимости проверять каждое значение, похожее на указатель, является ли оно корректным указателем в куче — используя информацию, предоставляемую дескриптором типа, он точно знает, какие элементы обрабатывать, что существенно увеличивает скорость и точность работы и снижает нагрузку на процесс сборки мусора. Для ускорения выделения памяти свободные участки помещаются в Списки свободных блоков, содержащие блоки памяти определенных размеров.

Переменные ссылочного типа, помеченные модификатором UNTRACED относятся к нетрассируемым указателям. Такие указатели не отслеживаются сборщиком мусора и участки памяти, на которые они ссылаются, могут быть утилизированы в любой момент времени, в случае, если они были выделены средой времени выполнения и на них нет достижимых ссылок, учитываемых сборщиком мусора. Часто, такие модификаторы используются для работы с участками памяти, выделенными вне среды времени выполнения Активного Оберона, или с небезопасными указателями.

Управление активностью объектов

Среда времени выполнения отвечает за распределение процессорного времени, гарантирует (совместно с компилятором), что в монопольной области находится не более одной активности, обеспечивает своевременную проверку условий оператора AWAIT и возобновление работы приостановленных активностей. Выражения условий продолжения внутри объекта пересчитываются во всех точках выхода из монопольных областей. Это означает, что изменение состояния объекта вне монопольной области не приводит к пересчёту условий. Когда несколько активностей соревнуются за одну и ту же монопольную область, то активности с выполненными условиями рассматриваются раньше тех, которые только хотят войти в защищенную область.

Подключение и инициализация модулей

В Активном Обероне отсутствуют средства для прямого управления динамической загрузкой и выгрузкой модулей. Язык предлагает лишь секцию импорта (IMPORT), в которой указан список подключаемых модулей и секцию инициализации модуля. Среда времени выполнения должна обеспечить подключение и инициализацию подключаемых модулей до инициализации текущего модуля. Динамическое подключение модуля осуществляется через механизм динамического связывания. Модуль нельзя выгрузить до тех пор, пока на него есть ссылка из списка подключения другого загруженного модуля. Таким образом, чтобы исключить проблему циклических ссылок, модули должны выгружаться в порядке, обратном порядку загрузки.

Обработка ошибок и исключительных ситуаций

Модуль Traps обеспечивает централизованную обработку исключительных ситуаций. Параметры, принимаемые операторами ASSERT и HALT, могут использоваться для классификации исключительной ситуации.

После обработки исключительной ситуации в модуле Traps среда времени выполнения осуществляет поиск секций гарантированного завершения FINALLY и передает на них управление для выполнения завершающих операций.

В случае, если активность помечена модификатором SAFE и в теле объекта отсутcтвует секция FINALLY, производится перезапуск активности, иначе выполнение активности завершается.

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

Словарь

Для составления лексем предусматривается использование следующих правил. Пробелы и переносы не должны встречаться внутри лексем (исключая комментарии и пробелы в строках). Они игнорируются, если они не существенны для отделения двух последовательных лексем. Заглавные и строчные буквы считаются различными.

Идентификаторы — это последовательности букв и цифр. Первая литера идентификатора должна быть буквой.

 идент = буква {буква | цифра}.

Примеры:

 x  Scan  Oberon  GetSymbol  firstLetter

Числа — это (беззнаковые) целые или вещественные числа. Целые числа являются последовательностью цифр и могут быть продолжены буквой суффикса. Если суффикса нет, то представление десятичное. Суффикс H указывает на шестнадцатеричное представление.

Вещественное число всегда содержит десятичную точку. Опционально оно может также содержать десятичный порядок. Буква E означает «умножить на десять в степени».

 число       =  целое | вещественное.
 целое       =  цифра {цифра} | цифра {шестнЦифра} "H".
 вещественное  =  цифра {цифра} "." {цифра} .
 порядок       =  ("E")  цифра {цифра}.
 шестнЦифра  =  цифра | "A" | "B" | "C" | "D" | "E" | "F".
 цифра       =  "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".

Примеры:

 1987
 100H     = 256
 12.3
 4.567E8  = 456700000

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

 строка = """ {литера} """ | цифра {шестнЦифра} "X".

Примеры:

 "OBERON"    "Don't worry!"    22X 

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

 +	:=	ARRAY	IMPORT	THEN
 -	^	BEGIN	IN	TO
 *	=	BY	IS	TRUE
 /	#	CASE	MOD	TYPE
 ~	<	CONST	MODULE	UNTIL
 &	>	DIV	NIL	VAR
 .	<=	DO	OF	WHILE
 ,	>=	ELSE	OR
 ;	..	ELSIF	POINTER
 |	:	END	PROCEDURE
 (	)	FALSE	RECORD
 	FOR	REPEAT
 {	}	IF	RETURN

Комментарии могут быть вставлены между любыми двумя лексемами в программе. Они являются произвольными последовательностями литер, которые открываются скобкой и закрываются с помощью . Комментарии не влияют на смысл программы. Они могут быть вложенными.

Оберон-системы

Первоначально Оберон возник в рамках проекта создания операционной системы
для однопользовательской рабочей станции Ceres. Эта ОС, также носящая имя
Оберон, была написана (на Обероне) Н.Виртом и Юргом
Гуткнехтом ([email protected]).

Впоследствии эта Оберон-система была перенесена на множество платформ:
Amiga, Linux, Macintosh, Unix (DECstation, HP station, RS600, Silicon Graphics,
SparcStation), PowerMac, Windows. Сейчас это семейство оригинальных Оберон-систем
известно под названием Oberon V4.

Полный перечень известных Оберон-систем можно найти здесь.
Как правило они доступны вместе с исходным текстом.

Основные элементы

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

  MODULE Имя;
    IMPORT СписокИмпорта;
    Определения;
  BEGIN
    Операторы
  END Имя.

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

Тело модуля исполняется при его загрузке. В Компонентном Паскале внутри тела модуля (в разделе ) появилась возможность добавить секцию :

  BEGIN
    Операторы
  CLOSE
    Операторы
  END Имя.

Здесь операторы, расположенные между и , выполняются при загрузке модуля, а операторы, расположенные между и  — при выгрузке его из памяти. Такое расширение было сочтено полезным для компонентных программ, которые загружают и выгружают модули динамически.

Создаваемые программистом типы данных ограничены следующим набором: типы-массивы , типы-записи , процедурные типы , типы-указатели . Указатель может быть объявлен только на массив или запись.

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

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

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

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

Приложение: Синтаксис Оберона

буква        =  "A" | "B" | ... | "Z" | "a" | "b" | ... | "z".
цифра        =  "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
шестнЦифра   =  цифра | "A" | "B" | "C" | "D" | "E" | "F".

идент        =  буква {буква | цифра}.
уточнИдент   =   идент.
идентОпр     =  идент .

целое        =  цифра {цифра} | цифра {шестнЦифра} "H".
вещественное =  цифра {цифра} "." {цифра} .
порядок	     =  ("E")  цифра {цифра}.
число        =  целое | вещественное.
строка       = """ {литера} """ | цифра {шестнЦифра} "X".

ОбъявлениеКонстанты  =  идентОпр "=" КонстВыражение.
КонстВыражение       =  выражение.

ОбъявлениеТипа  =  идентОпр "=" тип.
тип             =  уточнИдент | ТипМассив | ТипЗапись | ТипУказатель | ПроцедурныйТип.
ТипМассив       =  ARRAY длина {"," длина} OF тип. 
длина           =  КонстВыражение.
ТипЗапись       =  RECORD   END.
БазовыйТип      =  уточнИдент.
ПоследСпискаПолей =  СписокПолей {";" СписокПолей}.
СписокПолей     =  СписокИдент ":" тип.
СписокИдент     =  идентОпр {"," идентОпр}.
ТипУказатель    =  POINTER TO тип.
ПроцедурныйТип  =  PROCEDURE .

ОбъявлениеПеременных = СписокИдент ":" тип.

выражение           = ПростоеВыражение .
отношение           = "=" | "#" | "" | ">=" | IN | IS. 
ПростоеВыражение    =   слагаемое {ОперацияСложения слагаемое}. 
ОперацияСложения    =  "+" | "-" | OR. 
слагаемое           = множитель {ОперацияУмножения множитель}. 
ОперацияУмножения   = "*" | "/" | DIV | MOD | "&" . 
множитель           = число | строка | NIL | TRUE | FALSE | множество |
                      обозначение  |
                      "(" выражение ")" | "~" множитель. 
обозначение         = уточнИдент {селектор}.
селектор            = "." идент | "" | "^" | "(" уточнИдент ")".
множество           = "{"  "}". 
элемент             = выражение . 
СписокВыражений     = выражение {"," выражение}.
ФактическиеПараметры  = "("  ")" . 

оператор            = . 
присвоение          = обозначение ":=" выражение
ВызовПроцедуры      = обозначение .
ПослОператоров      = оператор {";" оператор}.
ОператорIf          = IF выражение THEN
                         ПослОператоров 
                      {ELSIF выражение THEN
                         ПослОператоров} 
                       
                      END.
ОператорCase        = CASE выражение OF вариант {" | " вариант} END.
вариант             = .
СписокМетокВарианта = МеткиВарианта {"," МеткиВарианта }.
МеткиВарианта       = метка .
метка               = целое | строка | уточнИдент.
ОператорWhile       = WHILE выражение DO ПослОператоров 
                      {ELSIF выражение DO ПослОператоров} END. 
ОператорRepeat      = REPEAT ПослОператоров UNTIL выражение.
ОператорFor         = FOR идент ":=" выражение TO выражение  DO 
                      ПослОператоров END.

ОбъявлениеПроцедуры = ЗаголовокПроцедуры ";" ТелоПроцедуры идент.
ЗаголовокПроцедуры  = PROCEDURE идентОпр .
ТелоПроцедуры       = ПослОбъявлений 
                       END.
ПослОбъявлений      = 
                      
                       
                      {ОбъявлениеПроцедуры ";"}.

ФормальныеПараметры = "("  ")" .
СекцияФП            =  идент {"," идент} ":" ФормалныйТип.
ФормалныйТип        = {ARRAY OF} уточнИдент.

модуль              = MODULE идент ";"  ПослОбъявлений
                       END идент ".".
СписокИмпорта       = IMPORT импорт {"," импорт} ";".
импорт              =  идент.

Перевод выполнил Иван Денисов

Использованы:
— перевод Сергея Свердлова
— перевод пакета Дельта
— перевод из сборки проектра Информатика-21
— перевод Бурцева Вадима
— перевод Валерия Шипкова.
Благодарность за замечания по переводу:
— Александру Ширяеву,
— Артуру Ефимову,
— Александру Легалову,
— Константину (comdivbyzero).

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

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

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

В Компонентный Паскаль добавлены средства, позволяющие разработчику полностью контролировать расширение экспортируемых типов и переопределение методов (атрибуты EXTENSIBLE, ABSTRACT, NEW, EMPTY, а также возможность ограниченного экспорта метода «только для реализации»). Добавлен блок завершения тела модуля (ключевое слово CLOSE) и предопределённый пустой метод FINALIZE. Система основных (элементарных) типов приведена в соответствие с типами Java. Введён неявный строковый тип.

Компания Oberon Microsystems, определившая Компонентный Паскаль, выпустила также фреймворк BlackBox Component Framework и среду визуального программирования BlackBox Component Builder — небольшие по размеру и нетребовательные к ресурсам, целиком построенные на Компонентном Паскале.

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

Активный Оберон, Zonnon

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

Системы и среды

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

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

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: