Один язык вместо трёх инструментов

На GitHub появился Wyzer — экспериментальный язык программирования, который пытается решить то, что Rust намеренно оставил за бортом: безопасность распределённых систем. Wyzer — статически типизированный, компилируемый, ресурсно-ориентированный язык с интегрированной распределённой безопасностью через хореографическое программирование и модель памяти Perceus. Авторы позиционируют его как попытку объединить управление памятью, потоками и сетью под одним правилом владения.


Что не так с Rust

Rust — признанный стандарт безопасной системной разработки. Но у него есть принципиальное ограничение: он гарантирует безопасность внутри одного процесса и не решает проблем распределённых дедлоков, несовместимости протоколов и корректности межсервисного взаимодействия.

«Одно правило владения для памяти, потоков и сетей. Никакого сборщика мусора, никакого сложного borrow-checker’а и никаких сетевых ошибок.»

Именно эту нишу и занимает Wyzer.


Choreographic Programming: суть идеи

Хореографии — это планы координации для конкурентных и распределённых систем, определяющие роли участников и правила их взаимодействия. В парадигме хореографического программирования (CP) хореографии являются программами, которые компилируются в исполняемые реализации.

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

ℹ Что такое хореографическое программирование
Математика хореографического программирования работает, но применяется преимущественно в академических исследованиях, а не в реальных языках. Wyzer хочет перенести эту концепцию в язык общего назначения.

Perceus: память без сборщика и без lifetime

Для управления памятью Wyzer использует модель Perceus — алгоритм подсчёта ссылок, заимствованный из языков Koka и Lean 4. Perceus рассматривает дизайн языка программирования, дающий строгие гарантии на этапе компиляции, чтобы обеспечить эффективный подсчёт ссылок во время выполнения, опираясь на пионерские разработки в области подсчёта ссылок из системы Lean.

Алгоритм Perceus — это потокобезопасный подсчёт ссылок на основе владения с несколькими оптимизациями: повторное использование кучи при конструировании и деструктуризации структур данных, специализация повторного использования кучи (обновления структур данных на месте), неатомарные или атомарные операции с ослабленным упорядочиванием памяти для блоков, не разделяемых несколькими потоками, и вывод заимствований для сокращения операций подсчёта ссылок.

Perceus реализован на производственном уровне в Koka и Lean 4, где конкурирует с написанным вручную кодом C на реальных задачах.


Синтаксис: просто и явно

Wyzer намеренно делает код читаемым и предсказуемым. Переменные по умолчанию неизменяемы, все типы явные.

fn main() {
    const MAX: u32 = 100;  // Константа времени компиляции
    let x: u32 = 10;       // Нельзя изменить
    var y: u32 = 20;       // Можно изменить

    y = y + x;
    std::io::println(y);
}

Обработка ошибок строится через тип Result<T, E> и выражение match — никаких скрытых исключений:

fn main() {
    let result: Result<u32, str> = Ok(42);

    match (result) {
        Ok(value) => std::io::println(value),
        Err(err_msg) => std::io::println(0)
    };
}
💡 Ключевое отличие от Rust
В Wyzer нет сложного borrow-checker’а с аннотациями времени жизни (lifetime). Вместо этого используется Perceus — те же гарантии безопасности памяти, но значительно более пологая кривая обучения.

Сравнение подходов

ХарактеристикаRustGo / Java / PythonWyzer
Управление памятьюBorrow-checker + lifetimesСборщик мусораPerceus (подсчёт ссылок)
Сетевая безопасностьНетНетХореографическое программирование
Безопасность потоковДа (в процессе)ЧастичноЕдиное правило владения
Кривая обученияКрутаяПологаяПланируется пологой
СтатусProductionProductionРанний исследовательский

Как всё соединяется


graph TD
    A[Единое правило владения] --> B[Память\nPerceus RC]
    A --> C[Потоки\nBezопасность потоков]
    A --> D[Сеть\nХореографии]
    B --> E[Нет GC\nНет lifetime]
    C --> E
    D --> F[Нет дедлоков\nНет protocol mismatch]
    E --> G[Wyzer]
    F --> G


Честность об ограничениях

⚠ Статус проекта
Авторы честно признают: это ранний исследовательский проект. Ряд крупных проблем пока не решён. Язык не готов к использованию в продакшне.

Авторы также открыто указывают на использование AI-инструментов: для генерации commit-сообщений, исследования хореографического программирования и модели Perceus, а также для дизайна логотипа.


Значение для отрасли

Wyzer пока остаётся исследовательским проектом одного энтузиаста — Atiksh Sharma. Тем не менее, сама постановка задачи заслуживает внимания: Wyzer пытается выяснить, может ли одно единственное правило решить вопросы памяти, потоков и сетей одновременно.

Ряд исследований показал, что хореографическое программирование можно адаптировать для работы в синергии с основными парадигмами — объектно-ориентированной и функциональной. Это подтверждает интерес растущего сообщества исследователей и практиков к развитию CP как зрелой парадигмы.

Если Wyzer сможет довести эту идею до рабочего компилятора, он займёт интересную нишу между Rust (слишком сложен) и Go (слишком медленен для системного программирования). Пока же проект открыт для контрибьюторов — исходники доступны на GitHub, а сообщество собирается в Discord.