Wyzer: новый язык с хореографическим программированием
Wyzer — статически типизированный компилируемый язык с моделью памяти Perceus и хореографическим программированием для безопасных распределённых систем.
Один язык вместо трёх инструментов
На GitHub появился Wyzer — экспериментальный язык программирования, который пытается решить то, что Rust намеренно оставил за бортом: безопасность распределённых систем. Wyzer — статически типизированный, компилируемый, ресурсно-ориентированный язык с интегрированной распределённой безопасностью через хореографическое программирование и модель памяти Perceus. Авторы позиционируют его как попытку объединить управление памятью, потоками и сетью под одним правилом владения.
Что не так с Rust
Rust — признанный стандарт безопасной системной разработки. Но у него есть принципиальное ограничение: он гарантирует безопасность внутри одного процесса и не решает проблем распределённых дедлоков, несовместимости протоколов и корректности межсервисного взаимодействия.
«Одно правило владения для памяти, потоков и сетей. Никакого сборщика мусора, никакого сложного borrow-checker’а и никаких сетевых ошибок.»
Именно эту нишу и занимает Wyzer.
Choreographic Programming: суть идеи
Хореографии — это планы координации для конкурентных и распределённых систем, определяющие роли участников и правила их взаимодействия. В парадигме хореографического программирования (CP) хореографии являются программами, которые компилируются в исполняемые реализации.
На практике это означает: вы пишете одно описание сетевого взаимодействия, а компилятор сам генерирует код для каждого узла системы и проверяет корректность протокола ещё на этапе компиляции.
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 | Go / Java / Python | Wyzer |
|---|---|---|---|
| Управление памятью | Borrow-checker + lifetimes | Сборщик мусора | Perceus (подсчёт ссылок) |
| Сетевая безопасность | Нет | Нет | Хореографическое программирование |
| Безопасность потоков | Да (в процессе) | Частично | Единое правило владения |
| Кривая обучения | Крутая | Пологая | Планируется пологой |
| Статус | Production | Production | Ранний исследовательский |
Как всё соединяется
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.