Глагол
«Глаголом жги сердца людей». — А. С. Пушкин, «Пророк»
Глагол — кириллический язык программирования на основе русского языка для JVM. Не «Python русскими словами», а попытка задействовать само богатство русского языка как выразительное средство программирования: падеж как роль, вид глагола как модель вычисления, согласование как защиту от ошибок.
Проект в стадии проектирования. Это — учредительный манифест и дизайн-документ. Кода интерпретатора пока нет; см. дорожную карту.
Миссия
Сделать жизнь лучше — через развитие русской культуры и того богатства, что хранится внутри русского языка. Конкретнее:
- Дать программистам новые возможности, которых нет в языках на основе английского.
- Работать обратным насосом против англицизмов в речи программистов: дать русские корни там, где сейчас говорят «закоммитить», «смёржить», «зафорсить».
- Оживить утраченные формы русской грамматики — дать им настоящую работу в коде.
Честные границы миссии
Мы держимся принципа: миссия сильнее, когда каждый её кирпич — правда.
- Мы не утверждаем, что язык программирования «развернёт деградацию» живого русского языка — язык меняют миллионы носителей и фонетика, а не предметный DSL. Это было бы overclaim.
- Достижимая версия той же мечты: создать новый обогащённый регистр, где утраченные формы делают настоящую работу, и — через использование ИИ — заново попадают в оборот.
- Мы не утверждаем, что русский «делает умнее» (сильная гипотеза Сепира–Уорфа наукой не подтверждена). Мы утверждаем скромное и защитимое: язык, который требует явно помечать роль и завершённость, приучает к аналитической ясности.
Почему «Глагол»
Грамматическое значение слова «глагол» — verb — позднее и суженное. Исходно глаголати = говорить, а глагол = слово, речь, изречение, глас. Поэтому имя держит оба смысла сразу:
- сакральный, древний слой — Слово, изречение, глас Божий;
- технический слой — глагол как часть речи действия (а язык глаголо-центричен: вызов есть действие, вид глагола несёт модель вычисления).
«Глагол» в высоком регистре русской словесности:
- Пушкин, «Пророк»: «Глаголом жги сердца людей».
- Пушкин, «Поэт»: «Но лишь божественный глагол / До слуха чуткого коснётся, / Душа поэта встрепенется, / Как пробудившийся орёл».
- Фет: «Твой светлый ангел шепчет мне / Неизреченные глаголы».
- Ап. Павел (2 Кор 12:4): слышал в раю «неизреченные глаголы» — ту самую формулу, что поднимает Фет.
- Евангелие (Мф 4:4): «…всяким глаголом, исходящим из уст Божиих».
Логос и Слово остаются понятиями-спутниками, но не именем. Логос — это не только «слово», но и разум, мера, соотношение, порядок (корень «логики» и всякой «-логии»); он на стороне разума, а не красноречия — и потому уместен для языка как формализованного разума. «Слово» же — существительное покоя, изречение в состоянии покоя. А язык программирования — про действие. «Глагол» тайно соединяет обе грани: сакральное Слово и действие-операцию. Богатейшее из трёх — оттого и выбрано.
Идея: русский как ресурс
Не переводить ключевые слова, а эксплуатировать морфологию. Русский флективен: роль, завершённость, класс — помечаются на самих словах, а не позицией. Это редкое для языков программирования богатство.
| Механизм русского | Роль в языке | Родство |
|---|---|---|
| Падеж | семантическая роль аргумента → свободный порядок слов | — |
| Вид глагола | ленивость / строгость, процесс vs результат | Haskell |
| Склонение | класс типов (typeclass) | Haskell |
| Согласование (избыточность) | отказоустойчивый парсинг (forward error correction) | теория информации |
| Утраченные формы | пустые родные слоты: дуалис→пара, звательный→диспетчеризация, супин→намерение | — |
| Из Haskell | АДТ, паттерн-матчинг, вывод типов, чистота, неизменяемость | семантический этаж |
Один конфликт, решённый по слоям. Эстетика Haskell — сжатие (point-free); русская морфология — избыточность. Это противоположные полюса, и мы их не смешиваем: Haskell владеет семантикой (типы, чистота, АДТ), русский владеет поверхностью (падеж-роль, избыточность, свободный порядок).
Примеры
Синтаксис — эскиз, не финал. Он показывает механику, а не окончательную форму.
1. Падеж = роль, порядок свободен
зашифруй строку ключом
зашифруй ключом строку # ← то же самое: роль лежит на слове
строк‑у (винительный) = что шифруем; ключ‑ом (творительный) = чем. Переставляй как хочешь. Сравни: encrypt(string, key) — роль в позиции, перепутал — сломал.
2. Вид глагола = ленивость vs строгость
поток = порождать простые # несов. вид → ленивый бесконечный поток
первые = взять 10 из потока # «из потока» (род.) = источник
результат = собрать первые # сов. вид → форсируем в готовый список
3. Воскрешённые формы делают работу
Точка = две координаты # двойственное число → тип-пара
принтере, напечатай строку! # звательный падеж → обращение/диспетчеризация
намерение: сортировать # супин → декларация цели (слой для ИИ)
4. Избыточность чинит ошибку (FEC вживую)
зашифруй длинную строкой ключом
# ^вин. ^твор. — рассогласование падежа
# ⚠ «строкой» → «строку» (винительный, объект). Понято, продолжаю.
Одно окончание сбоит — соседнее его чинит. Ни один англоязычный язык так не умеет: избыточность в них вырезана.
Язык, родной для ИИ
«Родной для ИИ» (англ. AI-Native) здесь — не лозунг, а три конкретных, проверяемых свойства:
- Локальная маркировка роли снижает дальние зависимости. Падеж кладёт роль аргумента на само слово, а не в удалённую позицию. Языковой модели (LLM) так легче: роль видна на месте, меньше связей на расстоянии. Флективный язык может быть проще для порождения текста, а не сложнее.
- Избыточность делает ошибки модели восстановимыми. Тот же принцип упреждающей коррекции (FEC): модель ошиблась в окончании — разбор чинит его по согласованию. Промахи ИИ становятся исправимыми самим устройством языка.
- Супин — формальный слой намерения. Агент объявляет цель (
намерение: сортировать), а не только шаги. Это настоящая опора для ИИ-агентов, а не украшение.
Обратная связь с миссией: если на «Глаголе» пишут и его читают ИИ в масштабе, воскрешённые формы заново попадают в обучающие тексты и на глаза людям — язык обогащается не только семантически, но и морфологически.
Маленькая добродетель. Локальная роль и восстановимость ошибок — это меньше переспросов и лишних токенов, когда код порождает ИИ. А каждый токен — это энергия и вода центров обработки данных. На один диалог эффект крошечный, но системно не нулевой: небольшой честный вклад в бережность к среде — созвучный верхней миссии «сделать жизнь на Земле лучше».
Фундамент
Дух проекта — быстрый старт. Отсюда решения:
- Рантайм: интерпретатор по дереву (tree-walking) — секундный цикл «правка→запуск».
- Язык реализации: Kotlin/JVM — родные
sealed/whenдля AST, вся экосистема JVM, дом для Java-разработчика. - Путь роста: бэкенд в байт-код JVM — сохраняет исходную цель «на JVM».
Дорожная карта
- Проектирование ← мы здесь: манифест, дизайн-документ, эскизы синтаксиса.
- Интерпретатор по дереву на Kotlin: лексер → парсер → AST → вычислитель. Морфология: правила склонения основы (генерация/распознавание форм) — свой небольшой движок, полноценный морфоанализатор не требуется.
- Ядро языка: падеж-роль, вид-как-вычисление, АДТ + паттерн-матчинг, вывод типов.
- Отказоустойчивый парсер на согласовании (FEC).
- Бэкенд в байт-код JVM.
- Российские процессоры — Байкал и Эльбрус; см. отдельный раздел ниже.
Российские процессоры: Байкал и Эльбрус
Отдельная цель дорожной карты — нативная поддержка российских процессоров. Это и практично, и созвучно миссии: русский язык, живущий на русском железе.
Выбор JVM оказывается кратчайшим путём к обеим архитектурам:
- Байкал — по сути уже решён. Это ARM (ARMv8) и MIPS — широко распространённые архитектуры, под которые есть и обычный OpenJDK, и LLVM/GCC. JVM на Байкале работает из коробки.
- Эльбрус (e2k) — VLIW-архитектура МЦСТ, непохожая на x86/ARM: свой компилятор
lcc, двоичный транслятор x86→e2k. Магистральный LLVM в e2k не умеет — но существует порт OpenJDK, поэтому «Глагол» пойдёт на Эльбрус почти даром, как только начнёт порождать байт-код JVM. Нативная компиляция прямо в e2k — дальняя исследовательская вершина, требующая проприетарного набора инструментов МЦСТ.
Так дорожная карта смыкается в одну линию:
интерпретатор → байт-код JVM → Байкал (ARM64-JVM) и Эльбрус (OpenJDK) → нативный e2k
Последняя ступень — вместе со специалистами по низкоуровневому программированию под Эльбрус.
Статус и участие
Стадия — проектирование. Кода интерпретатора ещё нет; обсуждается дизайн. Полный дизайн-документ: docs/superpowers/specs/2026-07-08-глагол-design.md.
Идеи, критика синтаксиса, примеры «как бы это выглядело» — приветствуются в Issues.
Лицензия
Apache License 2.0 — разрешительная лицензия с явным патентным грантом. См. также NOTICE.