===== Языки семейства Оберон ===== Язык программирования [[ob:oberon|Оберон]] разработан Никлаусом Виртом при разработке одноименной операционной системы. По словам автора, разработке помогло критическое осмысления языков: Модула-2, Паскаль, Ada, Smalltalk и Cedar. От Оберона пошло несколько веток развития языка программирования: component "Oberon" as OBR #Yellow component "Oberon SA" as OSA #Gray component "Active Oberon" as AOB #LightGreen component "Oberon 2" as OB2 #LightGreen component "Оберон-07" as O07 #LightGreen component "Zonnon" as ZNN #Yellow component "Component Pascal" as CMP #LightGreen OBR -down-> OSA OBR -down-> OB2 OSA -down-> O07 AOB -down-> ZNN OB2 -down-> CMP OB2 -down-> AOB [[ob:oberon07|Оберон-07]] | [[ao:|Активный Оберон]] | [[ob:oberon2|Оберон-2]] | [[cp:|Компонентный Паскаль (Блэкбокс Оберон)]] Линия Оберон-07 — это авторское уточнение исходного языка без существенных добавлений. ===== Диаграмма наследования в развитии Оберон-технологий ===== {{ :ob:oberongenealogy.png?1000 |}} [[http://pub.iadenisov.ru/blackbox/oberongenealogy.gv|исходники CC BY-SA 4.0]] ===== Краткая история языка Паскаль ===== История языков семейства Оберон вытекает из развития языка Паскаль его автором. {{:ob:снимок_экрана_2023-01-07_в_16.38.18.png?1000|}} ==== Алгол ==== Алгол, определенный в 1960, был первым языком высокого уровня с синтаксисом, который был легко читаем, структурирован и описан формальным образом. Несмотря на его успешное использование в качестве нотации для математичесих алгоритмов, в нем недоставало важных типов данных, таких как указатели и литеры. ==== Паскаль ==== В конце 60-х гг. было выдвинуто несколько предложений об эволюционном развитии Алгола. Самым успешным оказался Паскаль, определенный в 1970 профессором Никлаусом Виртом из ETH, швейцарского Федерального политехнического университета в Цюрихе. Наряду с очищением языка от некоторых непрозрачных средств Алгола, в Паскале добав­лена воз­мож­ность объявления новых структур данных, построенных из уже существующих более простых. Паскаль также поддерживал динамические структуры данных, т.е. такие струк­туры данных, которые могут расти или уменьшаться во время выполнения программы. Паскаль получил мощный импульс к распространению, когда в ETH был выпущен компи­лятор, порождавший простой промежуточный код для виртуальной машины (P-код) вместо «родного» кода для конкретного процессора. Это существенно упростило перенос Паскаля на другие процессорные архитектуры, т.к. для этого нужно было только написать новый интерпретатор для P-кода вместо всего нового компилятора. Один из таких проектов был предпринят в Университете Калифорнии в Сан-Диего. Замечательно, что эта реализация (UCSD Pascal) не требовала мощного компьютера [mainframe] и могла работать на новых тогда персональных компьютерах семейства Apple II. Это дало распространению Паскаля второй серьезный импульс. Третьим был выпуск компанией Борланд продукта Турбо Паскаль, содержавшего быстрый и недорогой компилятор вместе с интегрированной средой разработки программ для компьютеров IBM PC. Позднее Борланд возродил свою версию Паскаля, выпустив среду быстрой разработки приложений Дельфи. Паскаль сильно повлиял на дизайн и эволюцию многих других языков, от Ada до Visual Basic. ==== Модула-2 ==== В середине 70-х гг., вдохновленный годичным академическим отпуском, проведенным в исследовательском центре PARC компании Xerox в г. Пало Альто, Вирт начал проект по созданию нового компьютера класса рабочая станция <проект Lilith>. Компьютер должен был быть полностью программируемым на языке высокого уровня, так что язык должен был обеспечить прямой доступ к аппаратному уровню. Далее, он должен был поддерживать коллективное программирование и современные принципы разработки программного обес­печения, такие как абстрактные типы данных. Эти требования были реализованы в языке программирования Модула-2 (1979). Модула-2 сохранила успешно зарекомендовавшие себя средства Паскаля и добавила систему модулей, а также контролируемые возмож­ности обойти систему типов языка в случаях программирования низкого уровня, например, при написании драйверов устройств. Модули могли добавляться к операционной системе непосредственно во время работы. На самом деле вся операционная система представляла собой набор модулей без выделенного ядра или иного подобного объекта. Модули могли компилироваться и загружаться раздельно, причем обеспечивалась полная проверка типов и версий их интерфейсов. Успех Модулы-2 был наиболее значителен в задачах с высокими требованиями на надеж­ность, таких как системы управления движением. <Например, бортовое программное обес­печение на запускаемых в настоящее время российских спутниках связи пишется на Модуле-2 с помощью кросс-среды разработки приложений, описанной А.А.Колташевым в докладе на конференции JMLC'2003; см. Modular Programming Languages. Lecture Notes in Computer Science (LNCS 2789), Springer-Verlag, 2003, cc. 98-101. ==== Simula, Smalltalk и Cedar ==== Однако Вирт продолжал интересоваться прежде всего настольными компьютерами, и опять важный импульс пришел из центра PARC компании Xerox. В этом центре были изобретены рабочая станция, лазерный принтер, локальная сеть, графический дисплей и многие дру­гие технологии, расширяющие возможности использования компьютеров человеком. Кроме того, в центре PARC были популяризированы некоторые более старые и малоизвестные технологии, такие как мышь, интерактивная графика и, наконец, объектно ориенти­ро­ван­ное программирование. Эта последняя концепция (хотя и не сам термин) была впервые использована в языке высокого уровня Симула (1966) — еще одном из семейства алголо­подобных языков. Как и предполагает имя, язык Simula использовал объектные технологии прежде всего для целей моделирования [simulation]. Однако язык Smalltalk (1983), разрабо­танный в центре PARC компании Xerox, использовал их практически для всего, что угодно. Проект Smalltalk был также пионерским в плане дизайна пользовательского интерфейса: графический интерфейс пользователя (GUI), каким мы его теперь знаем, был разработан для системы Smalltalk. В центре PARC эти идеи повлияли на другие проекты, например, паскалеподобный язык Cedar. Как и Smalltalk и позднее Оберон, Cedar представлял собой не только язык программирования, но и операционную систему. Операционная система Cedar была весьма впечатляющей и мощной, однако сложной и нестабильной. ==== Оберон [Oberon] ==== Проект Оберон был начат в 1985 в ETH Виртом и его коллегой Юргом Гуткнехтом [Jurg Gutknecht]. Это была попытка выделить все существенное из системы Cedar в виде универсальной, но все же обозримой операционной системы для рабочих станций. Получившаяся система оказалась очень маленькой и эффективной, прекрасно работала в оперативной памяти размером всего 2 MB и требовала при этом лишь 10 MB памяти на диске. Важной причиной малого размера системы Оберон был ее компонентный дизайн: вместо интеграции всех желаемых средств в один монолитный программный колосс, менее часто используемые программные компоненты (модули) могли быть реализованы как расширение ядра системы. Такие компоненты загружались, только когда они были действительно нужны, и они могли совместно использоваться всеми приложениями. Вирт понял, что компонентно-ориентированное программирование требовало некоторых средств объектно-ориентированного программирования, таких как упрятывание инфор­ма­ции [information hiding], позднее связывание [late binding] и полиморфизм. Упрятывание информации было сильной чертой Модулы-2. Позднее связывание поддер­жива­лось в Модуле-2 посредством процедурных переменных. Однако там не было полимор­физ­ма. Поэтому Вирт добавил расширенное переопределение типов [type extension]: записевый тип мог быть объявлен как расширение <потомок> другого записевого типа <предка>. Тип-потомок можно было использовать всюду вместо одного из его предков. Но компонентно-ориентированное программирование выходит за рамки объектно-ориенти­рованного. В системе, построенной из компонентов, компонент может разделять свои структуры данных с произвольным числом других компонентов, о которых она ничего не знает. Эти компоненты обычно также не знают о существовании друг друга. Такое взаимное незнание делает управление динамическими структурами данных, и в частности правильное освобождение уже ненужной памяти, принципиально более трудной проблемой, чем в закрытых программных системах. Следовательно, необходимо оставить на долю реализации языка всю работу по определению момента, когда какая-то область памяти более не нужна, чтобы повторно использовать ее без ущерба для безопасности системы. Системный сервис, выполняющий такую автоматическую утилизацию памяти, называется сборщик мусора [garbage collector]. Сбор мусора предотвращает две из числа наиболее труднонаходимых и попросту опасных ошибок в программах: утечки памяти [memory leaks] (когда более не используемая память не освобождается) и висячие ссылки [dangling pointers] (преждевременное освобождение памяти). Висячие ссылки позволяют одному компоненту разрушить структуры данных, принадлежащие другим. Такое нарушение защиты типов [type safety] должно быть предотвращено, т.к. компонентные системы могут содержать многие независимо написанные компоненты неизвестного качества (например, полученные из Интернета). Хотя алголоподобные языки всегда имели высокую репутацию в плане безопасности, вве­дение полной защиты типов (и, следовательно, сбора мусора) явилось качественным скачком. Именно по этой причине полная совместимость с Модулой-2 оказалась невоз­можной. Получившаяся модификация Модулы-2 была названа как и вся система — Оберон. Система модулей в Обероне, как и в Модуле-2, обеспечивала упрятывание информации для целых семейств типов, а не только для отдельных объектов. Это позволило определять и гарантировать инварианты для нескольких взаимодействующих объектов. Другими слова­ми, разработчики получили возможность разрабатывать механизмы защиты более высокого уровня, отталкиваясь от базовых средств защиты на уровне модулей и защиты типов, обеспечиваемых хорошей реализацией Оберона. Ортодоксальные объектно-ориентированные языка типа Smalltalk пренебрегали как типиза­цией переменных (вообще не поддерживая типы), так и упрятыванием информации (ограни­чивая ее объектами и классами), что явилось большим шагом назад в технологии разработки программного обеспечения. Оберон примирил миры объектно-ориентированного и модульного программирования. Последнее требование компонентно-ориентированного программирования — возможность динамически загружать новые компоненты. В Обероне единица загрузки та же, что и единица компиляции — модуль. ==== Компонентный Паскаль ==== В 1992 г. сотрудничество с профессором Х.П. Мёссенбёком (H.P. Mossenbock) привело к несколь­ким добавлениям к первоначальному языку Оберон («Оберон-2»). Так возник фактический стандарт языка. В 1997 г. компания Oberon microsystems, Inc., отделившаяся от ETH (с Виртом в составе совета директоров), сделала некоторые небольшие добавления к Оберону-2 и назвала его Компонентный Паскаль, чтобы четче выразить как его нацеленность (компонентно-ориен­тированное программирование), так и его происхождение (Паскаль). Это промышленная версия Оберона, являющаяся наследницей первоначального Паскаля и Модулы-2. Главная идея уточнений по сравнению с Обероном-2 была в том, чтобы дать проекти­ров­щику компонентного каркаса более полный контроль над ее проектируемыми свойствами в плане безопасности. Положительным результатом стало то, что теперь легче обеспечить целостность больших компонентных систем, что особенно важно во время итеративных циклов проектирования, когда библитека разрабатывается, и позднее, когда архитектура системы должна быть переработана, чтобы обес­печить дальнейшую эволюцию и поддержку. ==== BlackBox ==== Компания Oberon microsystems разрабатывала компонентную библиотеку <каркас> BlackBox Compo­nent Framework начиная с 1992 г. (сначала библиотека называлась Oberon/F). Эта библи­о­тека написана на Компонентном Паскале и упрощает разработку компонентов графи­чес­кого пользовательского интерфейса. Она поставляется с несколькими компонен­тами, включая текстовый редактор, систему визуального проектирования, средство досту­па к базам данных SQL, интегрированную среду разработки, а также систему поддержки выполнения программ на Компонентном Паскале. Весь пакет представляет собой развитый, но весьма нетребовательный к системным ресурсам инструмент быстрой разработки ком­по­нентных приложений, названный BlackBox Component Builder (Блэкбокс). Он нетребова­телен к системным ресурсам, т.к. полностью построен из модулей Компо­нен­т­ного Паскаля — включая ядро со сборщиком мусора, а также самого компилятора языка Компонентный Паскаль. Это — иллюстрация как мощи концепции компонентного программ­ного обеспечения вообще, так и адекватности языка Компонентный Паскаль в частности. Недавно диапазон приложений системы BlackBox Component Builder был значительно расширен за счет среды кросс-программирования Denia, которая является компонентом, расширающим систему Блэкбокс. Denia позволяет выполнять кросс-программирование на Компо­нен­тном Паскале для новой операционной системы реального времени JBed, которая полностью реализована на Компонентном Паскале. JBed предназначен для встроенных систем и приложений с жесткими требованиям реального времени [hard real-time requirements], например, в робототехнике и промышленной автоматизации. Большое применение JBed нашла в мобильных устройствах. ==== Oberon-SA ==== Разновидность языка Оберон, с некоторыми дополнениями для системного программирования и программирования реального времени процессора ARM. Разрабатывалось Никлаусом Виртом в проекте Automatic Control of Model Helicopter. В 1995 Н. Вирт присоединился к проекту Института автоматического контроля и измерений . Целью проекта была разработка системы позволяющая вертолету летать автономно по запрограммированному пути. Вирт разрботал систему бортового компьютера на основе процессора Strong-ARM. Кроме разработки аппаратных средств, он написал программы для различных инструментов программирования, включая разновидность компилятора Оберона с дополнительными возможностями для программирования систем реального-времени. ==== Oberon-07 ==== На основе опыта разработки Oberon-SA в 2007 году Н. Вирт уточнил исходное определение языка Оберон. Новая версия языка получила название Oberon-07 (Revised Oberon). Для языка Oberon-07 австралийская фирма CFB Software выпустила компилятор Astrobe для микропроцессоров ARM. ==== Oberon v5 2013 ==== В 2013 году вышла новая версия языка вместе с проектом Project Oberon (New Edition 2013). https://www.inf.ethz.ch/personal/wirth/ProjectOberon/index.html http://www.projectoberon.com https://www.inf.ethz.ch/personal/wirth/Oberon/Oberon07.Report.pdf Для этого варианта языка был обновлен компилятор Astrobe, а также был разработан новый [[ob:o7|компилятор O7]] для микроконтроллеров с архитектурой ARMv{6,7E}-M: https://github.com/aixp/O7 ==== Active Oberon 2019 ==== Репозиторий Active Object System (AOS aka A2) git repository (from 9.12.2022) https://gitlab.inf.ethz.ch/felixf/oberon/-/tree/main **Описание языка Активный Оберон 2019 на английском** ETH Oberon (2019) Language Report Felix Friedrich, Florian Negele, October 31, 2019 https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/docu/OberonLanguageReport.pdf **Описание языка Активный Оберон 2019 на русском** Феликс Фридрих, Флориан Негель, 31 октября 2019 Перевод - Николай Кондрин, Денис Будяк, 2020 [[https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/docu/OberonLanguageReport%20(Russian%20translation).md]]