Оберон на Чёрном квадрате
Оберон на Чёрном квадрате

Статью про язык программирования Оберон я не мог начать много раз.

Любое упоминание Оберона в непрофильных, а нередко и в профильных сообществах, приводит к таким «дракам», что камня на камне не остается!

Я видел смерть нескольких сообществ, посвященных Оберону, эпичнейшие сражения в комментариях и прочие атрибуты «религиозных войн». Дошло до того, что когда я упомянул в нашем сообществе «Ворчалки о программировании», что собираюсь писать эту статью, ко мне в личку пришел человек и попросил не писать!

Я долго не мог понять этот феномен, пока однажды не увидел воочию, как происходит обсуждение картины «Чёрный квадрат» Казимира Малевича. И тут пазл сложился.

Явления и события

Мы живем во времени и все, что с нами происходит, расставлено по шкале. Новый год, день рождения, новая версия операционной системы, покупка квартиры. Это все события. У них есть дата, участники, какие‑то другие свойства.

А бывают явления. Это события, которые делят историю на «до» и «после».

Таким явлением, несомненно, стал упомянутый уже «Квадрат». На Хабр есть статьи на эту тему. Упомяну также, что труды ВХУТЕМАС легли в основу того, как выглядят товары ИКЕА и то, каким стал iPhone. Таким же явлением стал и Оберон.

Личность Вирта

Мне не довелось быть знакомым с Никлаусом Виртом, равно как и не удалось попасть на его лекции, но довелось общаться с людьми, знавшими его лично и работавшими с ним.

Это, несомненно, был талантливейший человек. Особо ценным качеством было то, что он был одновременно сильным инженером и прекрасным педагогом. Вирт был скромным человеком в обычной жизни. Он больше 20 лет ездил на машине Toyota Corolla, хотя как профессор с мировым именем, мог позволить себе многое. У него был хороший дом, но без какого‑то особого шика.

При этом в работе и преподавании был чрезвычайно требовательным.

Ученики вспоминали, что он мог заставить заменить хеш‑таблицу на линейный список, если хеш‑таблица была избыточна, даже если использовались готовые модули.

Стремление к упрощению всего, что можно, красной нитью проходит через все работы Вирта.

Отмечу одну, возможно неочевидную со стороны, особенность процесса создания языков программирования. Когда создаешь языки, соблазн (и легкость!) добавления очень велик. Добавить в язык что‑то легко, удалить (или отказаться от добавления) гораздо труднее. Вот и Чарльз Энтони Ричард Хоар не устоял, добавив null в Algol‑W, откуда он перетек много куда. Разгребаем теперь всей индустрией.

Вирт явно или подспудно это знал. Его последователи даже проследили феномен, который так и назвали — «линия Вирта».

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

Триумф минимализма

А.Недоря рассказывал, с каким нетерпением они с коллегами ждали отчета о языке Оберон, надеясь на исправление проблем Модулы-2, с которыми к тому времени уже столкнулись. А получили … это.

Нет ООП, вернее есть, но совсем неожиданное. Управление памятью через сборщик мусора. Нет цикла FOR! Его то за что?

Это был шок. Настолько радикально, что в голове не укладывается…

И тем не менее, на этом написана ОС, причем на железе, специально созданном для этого.

Значит, что‑то в этом все‑таки есть.

А что, собственно, есть?

Оберон был не первый статически типизированный язык программирования, использующий сборку мусора. До него были Симула-67, Алгол-68 и ML, который в 70-х совершил свой прорыв благодаря выводу типов. Но Оберон был первый системный язык, позволяющий запускать ОС на голом железе и делать это со сборкой мусора!

Т.е. Вирт показал тот минимум, на котором можно создать целую вселенную.

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

Почему не взлетело?

Вирта не интересовала коммерческая сторона вопроса. Кроме того, при огромном обилии плюсов, были и очевидные минусы.

Мало языковых фич, сложно разрабатывать, непросто отлаживать. Кооперативная многозадачность. Это, впрочем, было бы преодолимо, но Вирта не особо интересовало, и как такового коммерческого продвижения практически не было. Успех получили производные продукты.

Так, коммерчески успешным можно признать BlackBox Component Builder, написанный на языке Component Pascal, к которому Вирт также приложил руку, пусть и опосредованно.

Эта среда получила награду Best Development Software журнала Byte.

Компания Oberon Microsystems, авторы Component Pascal и BlackBox сделали продукт Jbed — операционную систему и быструю JVM для микроконтроллеров, работающую прямо на «голом железе».

А вообще, ученики ETH, которым руководил Вирт выпустил уже более 660 проектов.

Но мне то что?

А вот что «взлетело», так это колоссальное влияние на индустрию. Многие, очень многие задались вопросом «А что, так можно было?» Использование GC в тяжелых задачах с высокой производительностью стало инженерной реальностью, а не научным изысканием.

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

Про Java доподлинно известно, что руководство Sun купило максимальный лицензионный пакет материалов по Оберон и это существенно повлияло на дизайн рантайма языка. Кроме того, Sun лицензировали Jbed, что повлияло на рантайм языка Java. Клеменс Шиперский много лет работал в Microsoft, что повлияло на дизайн среды CLR.

Что сегодня?

Также, как и «Чёрный квадрат» Малевича (равно как и «Круг» и «Крест»), Оберон сегодня вряд ли применим прямо. Индустрия и наука шагнули далеко вперед и прямое использование не имеет смысла само по себе.

Но с этим языком очень важно познакомиться. Борьба со сложностью, в этом языке воплощенная, — прекрасный образец инженерного мышления, реализующего сразу несколько целей:

  • экономия человеческих ресурсов;

  • решение комплексных задач минимальными средствами;

  • предотвращение разрастания языка.

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

В мире и России есть энтузиасты, которые занимаются Обероном и Компонентным Паскалем и делают на нем великолепные проекты: АСУТП, разработка железа, образовательные продукты. Это люди с определенным складом характера, способные на пересмотр того, какими инструментами они решают задачи и не боящиеся пойти наперекор большинству.

Разумеется, Оберон хорошо показал себя в образовании.

Послесловие

Надо ли вам знакомиться с Обероном? Вопрос открытый. От одного хочу предостеречь. Глядя на «Чёрный квадрат» Малевича, многие говорят «Ну, я так намалевать могу, чё за фигню он тут наляпал? Почему это в галерее, а не на помойке?»

Потому,что эта картина стала явлением и была важна в начале 20-го века, определив, каким будет дизайн обычных вещей на ближайшее столетие. iPhone появился в том числе благодаря этому.

Также и с Обероном. На дизайн языков он точно повлиял. На столетие ли, будут разбираться историки. Но нужно понимать, что любые попытки что‑то изменить в Обероне по сути своей будут похожи на желание нанести мазки на картину (или отковырнуть кусочки краски). Цельная картина разрушится.

Именно поэтому с Обероном стоит познакомиться, но точно не стоит менять (предлагать что‑то добавить/исправить/изменить/убрать).

Вот что точно стоит делать, так это продолжать использовать наследие языка в своих проектах. Борьба со сложностью имеет значение в системах любого масштаба.

Я намеренно обошел стороной вопросы преемственности языков Оберон — Оберон-2 — Оберон-07, оставляя удовольствие от знакомства пытливому читателю.

Перечень материалов по языку:

https://oberon.org/ru (Главный сборник материалов по Оберону)

Краткий путеводитель по языку Оберон

http://oberon2005.oberoncore.ru/

https://blackboxframework.org/index.php?cID=home-ru,ru

ОБНОВЛЕНО:
Пример кода

MODULE HelloFriends;

IMPORT Log;

PROCEDURE Do;
BEGIN
 Log.String("Приветствую, друзья!")
END Do;

BEGIN
 Do
END HelloFriends.

Попробовать: https://online.oberon.org/model/5315

Комментарии (21)


  1. DoctorDream
    06.07.2026 11:26

    Спасиб за статью. Было бы здорово несколько примеров кода увидеть для наглядности


    1. DmitrySolomennikov Автор
      06.07.2026 11:26

      Добавил классический пример


      1. select26
        06.07.2026 11:26

        Чуть не плачу: по настоящему я начал программировать на TopSpeed MODULA-2.
        До сих пор, все что я делаю, так или иначе, растет корнями оттуда.
        Спасибо моему преподавателю!


  1. Siemargl
    06.07.2026 11:26

    Язык создавался для удобства компилятора, а не программиста. Синтаксический сахар отсутствует, полностью диетический.

    Игнорировались новые тенденции в программировании - отсутствие встроенной работы со строками, многопоточность, ООП, методы обработки ошибок, дженерики.

    В таблице не хватает Modula-3, Active Oberon (на котором та самая ОС и написана).

    Еще стоит посмотреть на Oberon+ и Eberon, где пытались некоторые недостатки исправить.


    1. DmitrySolomennikov Автор
      06.07.2026 11:26

      Active Oberon (на котором та самая ОС и написана)

      Oberon и Active Oberon - это разные языки. Последний делала команда под руководством Гуткнехта (который участвовал и в создании оригинального Оберона) на 10 лет позже оригинального языка.


      1. Siemargl
        06.07.2026 11:26

        Конечно разные, но из одного семейства, причем AO более продвинут в некоторых направлениях.

        Операционная система на нем написанная - А2.


  1. NeoCode2
    06.07.2026 11:26

    Меня всегда интересовали языки программирования, фичи, языковой дизайн. Статья интересная с исторической точки зрения, но в ней крайне мало подробностей про сам язык, про его особенности в сравнении с другими языками...


    1. select26
      06.07.2026 11:26

      Ваш вопрос сильно связан с личностью Н.Вирта. О чем в статье немного сказано.
      Во время создания языка Pascal системные ресурсы накладывали значительные ограничения на компиляторы. Так вот, начиная с Паскаля, Вирт придумывал языки, ориентированные на компилятор: возможность быстрой компиляции за один проход.
      Сейчас, в эпоху "а зачем нам дебажить утечку памяти? лучше добавим пару гигов (или вообще: OOM сам рестартует контейнер)", актуальность инженерных подходов значительно ниже. Многие вопросы решают просто деньгами (в эпоху виртуализации вам не нужно вытаскивать тяжеленные сервер из стойки, чтобы проапгрейдиться - просто плати больше). Поэтому сравнивать с современными языками, большинство из которых было создано с единственной целью снизить влияние компетенции разработчика на результат разработки, особого смысла не имеет.
      Нам, людям воспитанным на книгах Н.Вирта, это очень неприятно видеть. Поэтому я ушел из программировния много лет назад. Пишу только для себя. На C. Для MCU с 2K RAM. Это все еще действительно искусство.


  1. redfox0
    06.07.2026 11:26

    Жду похожую статью про Ada.


  1. Denis_Chernyshev
    06.07.2026 11:26

    Оберон очень похож на "Structured Text (ST) — IEC 61131-3".

    Интересно, это параллельное развитие, или один на другой повлиял?


    1. DmitrySolomennikov Автор
      06.07.2026 11:26

      Мне удалось найти только версию стандарта IEC 61131 от 1993 года, так что думаю, все же Оберон повлиял на стандарт, а не наоборот.

      Хотя совпадение любопытное, спасибо за наводку!


    1. select26
      06.07.2026 11:26

      ST был основан на Pascal.


  1. kmatveev
    06.07.2026 11:26

    Слишком лирическая статья получилась.


  1. AlexVRud
    06.07.2026 11:26

    Триптих Казимира Малевича в Государственном Русском музее
    Триптих Казимира Малевича в Государственном Русском музее
    «Чёрный квадрат» на выставке «0,10», 1915 г.
    «Чёрный квадрат» на выставке «0,10», 1915 г.

    Чёрный квадрат - как слова выдернутые из контекста.


  1. ch1971
    06.07.2026 11:26

    Ну FOR цикл это древнейший пример синтаксического сахара. DO-WHILE цикл может заменить его в любых ситуациях. Вообще то что сейчас твориться с языками программирования это какойто ужас. Уже давно ценится не умение кодить а знание кучи мешков синтаксического сахара и здоровенного склада набитого "стандартными типами" которыми, как считается, должен обзавестись каждый уважающий себя язык программирования. Все давно забыли что стандартный тип должен уметь набить на коленке любой, хоть сколько нибудь вменяемый, программист а великое и могучее ООП это по сути простенькие манипуляции с пространствами имён...


    1. DmitrySolomennikov Автор
      06.07.2026 11:26

      Ну справедливости ради FOR в Oberon-2 вернулся. Синтаксический сахар не плох сам по себе, он должен быть уместен и выгода от его введения должна быть выше, чем проблемы, которые он привносит.


  1. yomayo
    06.07.2026 11:26

    Диаграмма, иллюстрирующая эволюцию языков программирования, взята, полагаю, отсюда: https://informatika-21.ru/princypKalashnikova.htm. Исходную диаграмму С. Свердлова переделали и линии языков продолжили во времени. От этого диаграмма увеличилась вправо и вверх. Есть некоторые вопросы, ответы на которые не знаю, где получить.

    1. Для подсчёта лексем С. Свердлов использовал некое приложение, анализирующее правила языков в РБНФ. Новая версия диаграммы построена с использованием того же приложения? Оно вообще где-то есть? Или оно ушло вместе с С. Сверловым и его сайтом?

    2. На диаграмме все невиртовские языки демонстрируют рост числа правил со временем. На их фоне языки Вирта выглядят минималистичными. Однако в этой диаграмме отсутствуют важные языки: Форт и Лисп. В Форте всего 15 правил (https://compiler.su/arifmetika-sintaksisa-3.php#10), а в Лиспе — 20 (https://compiler.su/arifmetika-sintaksisa-3.php#22).

    Если бы эти языки в диаграмме были, то сразу было бы ясно, что языки Вирта отнюдь не самые лаконичные. Чемпион по минимализму — Форт. Вот где триумф минимализма. Более того, соотношение возможности/простота показало бы превосходство Форта и Лиспа над Обероном.


    1. Denis_Chernyshev
      06.07.2026 11:26

      Строго говоря, Форт не вписывается в эти правила, поскольку это не совсем язык, а скриптовая система, которая парсит входной поток и одновременно как компилирует новый код, так и выполняет уже откомпилированный. И правила можно менять на ходу, дополняя синтаксис, поскольку исполняемые слова могут перехватить входной поток прямо во время компиляции и исполнить что угодно. И при желании можно хоть весь С++ насахарить в свой собственный синтаксис.


    1. DmitrySolomennikov Автор
      06.07.2026 11:26

      Вы, возможно, пропустили, но именно Форт и Лисп - языки трилогии про важные языки: https://habr.com/ru/articles/934030/ и https://habr.com/ru/articles/852174/

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

      На диаграмме важно не столько то, что грамматика маленькая, тут чемпионом будут языки BrainFuck и производные, а то, что линия идет вниз.


      1. yomayo
        06.07.2026 11:26

        Вы, возможно, пропустили

        Это не я пропустил. Пропустил автор диаграммы Свердлов, за ним Ткачёв, а потом и Вы. Хотя было бы логично исправить ошибку и отметить на диаграмме Форт и Лисп — они же важные и их нельзя пропустить. Не знаю, специально это было сделано или нет.

        важно не столько то, что грамматика маленькая, тут чемпионом будут языки BrainFuck и производные, а то, что линия идет вниз.

        Да, будь Вирт жив, графики Оберона и BrainFuck когда-нибудь пересеклись бы.


  1. sashagil
    06.07.2026 11:26

    Пардон за оффтопик, тема навеяла. Студентом в конце 80-х в составе студенческого коллектива я работал над реализацией Modula-2 (нашими продуктами были компилятор в байткод + интерпретатор байткода на советском IBM 370, мэйнфрейм EC 1045 - байткод был также бэкендом другого, значительно более сложного компилятора Algol-68). Благодаря мудрому руководству А.Н.Терехова у нас было "машинное время", терминальный доступ к EC 1045 в ("машинном зале") в некоем ящике под названием НИИ Звезда.

    И вот, на адрес НИИ Звезда на имя А.Н.Терехова приходит телеграмма следующего содержания:

    "Встречайте. Готовьте закуску, спирт. Проездом в Союзе - Никлаус Вирт."

    Телеграмму доставили ночью и вахтёр позвонил Терехову, разбудив того. Терехов не оценил шутку, был очень зол, идентифицировал виновника (моего друга) и подверг оного страшному наказанию - лишению доступа в машинный зал.

    Кстати, Вирт действительно приезжал в СССР - в Новосибирск, там реализовали и успешно использовали Модулу в проекте Кронос (но это - другая история).