EOLANG и концепция чистейшего ООП без типов, классов и циклов

26 июл 2026
1,415
244
36
1 неделя

Что если убрать из вашего любимого языка программирования классы, наследование, статические методы и типы? А вместе с ними выбросить null, операторы, приведение типов и управляющие конструкции вроде if или for. Звучит дико, но именно так выглядит EOLANG (или просто EO) — экспериментальный язык, созданный командой Objectionary под руководством Егора Бугаенко.

Создатели проекта уверены, что популярные языки вроде Java, C++, Python и C# на самом деле никакие не объектно-ориентированные. Это гибриды, где процедурный код спрятался за классами и утилитарными методами. Даже Smalltalk или Self, по мнению авторов EO, недостаточно чисты.

Чтобы исправить ситуацию, разработчики решили спроектировать язык с нуля, оперевшись на формальную математическую модель — $\phi$-исчисление (phi-calculus).

Что внутри? Только объекты и декорация

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

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

Реклама

Вот как выглядит простой скрипт, печатающий приветствие:

[args] > app stdout > @ "Hello, world!\n"

Здесь app — абстрактный объект. Он декорирует объект stdout, передавая ему аргумент "Hello, world!\n". Синтаксис опирается на отступы в два пробела, чем-то напоминая Python, хотя доступна и горизонтальная запись через скобки: stdout "Hello, world!".

А как писать циклы без while или for? В EO циклы конструируются как обычные объекты. Посмотрите на пример с выводом таблицы квадратов:

malloc.empty > [args] > app seq * > [x] >> x.put 2 while x.as-number.lt 6 > [i] >> seq * > [i] >> stdout "%d x %1$d = %d\n".printf * x x.as-number.times x x.put x.as-number.plus 1 true

Выглядит непривычно. Код комбинирует объекты seq (последовательность), while и выражения вроде x.as-number.plus 1. Здесь нет арифметических операторов + или * — вместо них вызываются методы соответствующих объектов.

Архитектурный панк: XML и XSLT 2.0 под капотом

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

Большинство компиляторов строят абстрактное синтаксическое дерево (AST) в памяти и обходят его визиторами на Java или C++. Разработчики EO пошли другим путём. Парсер превращает код в XMIR — промежуточное представление на базе XML.

Дальше начинается магия XSLT. Все трансформации синтаксиса, проверки и трансляция в целевой код выполнены в виде набора XSLT 2.0 таблиц. В README проекта даже выведен бенчмарк: сколько миллисекунд занимает работа каждого .xsl файла при сборке модулей. Например, больше 30% времени уходит на to-java.xsl.

Пайплайн сборки встроен прямо в Apache Maven через eo-maven-plugin. Модули и сторонние библиотеки не качаются в виде готовых JAR-файлов из Maven Central. Вместо этого инструмент MjPull тянет исходники на EO из Git-репозитория Objectionary и компилирует их вместе с вашим проектом.

Как пощупать язык самостоятельно?

Для работы понадобятся Java SE и npm. Утилита CLI устанавливается одной командой:

npm install -g eolang@0.36.0

После этого можно скомпилировать и запустить простой файл:

eoc --easy link
eoc --easy --alone dataize app

Есть ли у этого практическая польза?

Писать продакшен-сервисы на EOLANG прямо сейчас вряд ли кто-то станет. Язык остаётся исследовательским экспериментом. В нём нет привычных оптимизаций, а цепочка компиляции через XSLT работает медленнее традиционных решений.

Зато EO служит классным тренажёром для ума. Он заставляет пересмотреть привычки, сформированные годами работы с Java, C# или Python. Когда у вас забирают null, мутабельность и типы, приходится заново учиться проектировать связность компонентов и использовать декораторы.

Если вам интересны теория языков программирования, формальные модели вроде $\phi$-исчисления или необычные архитектуры компиляторов — репозиторий objectionary/eo точно заслуживает внимания.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.