Milestones Liza
Текущий рубеж — 0.0.20: нативные программы для Linux x86-64, macOS ARM64 и Windows x86-64, обновление составных значений, консольный вывод, файловые ресурсы с владением и проверяемые эффекты.
Milestone означает работающую возможность с определённой семантикой и проверками. Это не обещание стабильного API или готовности к production. Даты будущих этапов не назначены: переход определяется критериями готовности. Подробный порядок работ — в roadmap.
18 октября 2026 — основание Liza
Исходная цель: отделить смысл вычисления от физического размещения данных, сохранить определённую семантику и дать контроль над стоимостью операций. Эта цель остаётся основой решений о типах, владении и эффектах.
Достигнутые рубежи
| Версия / этап | Что стало возможным | Проверяемый результат |
|---|---|---|
| Первый прототип | Исходник → AST → Semantic IR → LLVM IR → машинный код; функции, затем bool и ветвления |
Нативная программа вычисляет результат; неисполняемая ветвь не вызывает trap |
| 0.0.5 · Числовая модель | Целые фиксированных ширин, checked/wrapping/saturating, деление, сдвиги и явные преобразования | Граничные значения и обязательные traps сохраняются при O0/O2 |
| 0.0.6 · Изменяемые привязки | var, присваивание и области видимости |
Новые значения и слияния ветвей выражены через SSA/phi |
| 0.0.7 · Структурированные циклы | while, break, continue, вложенные циклы |
Корректная передача значений между итерациями, ранние возвраты и сохранение незавершения |
| 0.0.8 · Copy и move | Независимые значения, явное перемещение, восстановление var |
Use-after-move отклоняется на ветвлениях и обратных рёбрах циклов |
| 0.0.9 · Структуры-значения | Поля, вложенные структуры, аргументы и результаты функций | Составные значения проходят через SSA/phi без адресуемых полей в семантике языка |
| 0.0.10 · Массивы и views | Фиксированные массивы, проверка границ, readonly View<T> |
Ограниченный доступ к пакету без копирования массива в проверенном RTP-тракте |
| 0.0.11 · Ожидаемые ошибки | enum, исчерпывающий match, Option, Result |
RTP-парсер возвращает Result<RtpHeader,ParseError> для корректных и некорректных входов |
| 0.0.12 · Hello, Liza! | Text, консоль, проверяемые pure/io |
Вывод, порядок эффектов и ошибки проверяются при O0/O2 |
| 0.0.12 · Три платформы | Linux, macOS и Windows runtime, сборка нативных исполняемых файлов | ELF на Linux x86-64, Mach-O на macOS ARM64, PE .exe на Windows x86-64 |
| 0.0.13 · Файл → RTP | Ограниченное чтение, FileBuffer, FileFailure |
Настоящий бинарный файл → readonly view → парсер → консоль |
| 0.0.14 · Ресурсы | Move-only File, открытие, чтение чанками и закрытие |
Владение проверяется на нормальных выходах и переходах CFG |
| 0.0.15 · Обновления | Поля и элементы у var, вложенные пути |
Независимость копий, лексические заимствования, порядок вычислений и bounds traps |
| 0.0.16 · Таблица соединений | ID с поколениями, get/add/edit/del на самой Liza |
Обновление уникального владельца без полной копии таблицы в проверенном цикле; независимые снимки сохраняются |
| 0.0.17 · Модули | import, pub, приватные поля и номинальные типы |
Ромбовидный импорт сохраняет идентичность; модульная таблица сохраняет выбранный тракт без полной копии |
| 0.0.18 · Generics | Параметры типов и вместимости, вывод аргументов и мономорфизация | Одна generic-таблица сохраняет владение и проверенный тракт обновлений без полной копии |
| 0.0.19 · Регионы | Bounded storage, move-only буферы, отдельный анализ зависимостей и alloc |
Запрет преждевременного закрытия, атомарный отказ выделения, чтение и обновление без аллокаций |
| 0.0.20 · Bounded Vec | Линейные результаты и изменяемый инициализированный префикс | Возврат владения при ошибке, readonly views, без аллокаций и полной копии хранилища в проверенном цикле |
Текущий результат: нативная программа
fn main() -> u32 : io {
match console.println("Hello, Liza!") {
Ok(written) => { return 0 }
Err(error) => { return 1 }
}
}
Один исходник собирается на каждой из трёх поддержанных host-платформ. Компилятор написан на Python, но готовой программе Python не нужен. Язык понижается в LLVM IR напрямую; C используется для платформенной runtime консоли. Кросс-компиляция пока не реализована.
Этот рубеж включает обработку частичного вывода, закрытого stdout и pipe, UTF-8 текст, вывод чисел и сохранение обязательных traps. Windows дополнительно проверяется на Unicode-вывод в консоль и полный 32-битный код завершения. Объём платформенных проверок различается: POSIX signal-тесты и Windows handle-тесты проверяют соответствующие реализации одного API.
Собрать Hello World · Контракт I/O.
0.0.13 — первый файловый инструмент
Реализовано: file.read, буфер 2 КиБ, ошибки через Result, пример rtp_file.liza.
Контракт, ограничения и запуск.
Бинарный файл → буфер ограниченной вместимости → View<u8> → чистый
RTP-парсер → консольный результат.
Контракт этапа:
- Чтение не увеличивает буфер скрыто; превышение вместимости обнаруживается.
- Доступен только диапазон инициализированных байтов; владение при заполнении определено.
- Ошибки файлового ввода, формата RTP и вывода остаются разными значениями.
- Закрытие вызывается на успешном и ошибочном пути; приоритет ошибок определён.
- Передача заполненного буфера парсеру не копирует весь пакет в выбранном тракте.
0.0.14 — файловые ресурсы с владением
Реализовано: File, file.open, чтение чанками и file.close(move file).
Компилятор запрещает копирование, повторное использование и пропущенное
закрытие на нормальном выходе. Пример file_stream.liza обрабатывает файлы
больше 2 КиБ, сохраняя фиксированную вместимость одного чанка.
Контракт ресурсов.
0.0.15 — обновление составных значений
Реализовано: var позволяет обновлять поля структур и элементы массивов,
включая вложенные пути и динамические индексы. Копии независимы, readonly views
блокируют запись, проверки границ сохраняют trap. Индексы и их проверки
предшествуют правой части; ветвления и циклы объединяют целые значения.
Частичных перемещений и mutable views нет.
Пример: value_updates.liza. Полный контракт.
0.0.16 — таблица соединений и стоимость обновления
Функциональный срез: 64/4096 слотов, ID с поколением, get/add/edit/del,
вывод слота из обращения при исчерпании поколений, независимые копии.
Новых конструкций языка нет. Чтение не материализует всю таблицу.
В проверенном тракте единственного владельца edit не копирует таблицу,
включая обратное ребро цикла. Проверка стоимости охватывает 64/4096/16384 слота;
живые снимки сохраняют независимость.
Контракт и результаты.
0.0.17 — пользовательские модули
Явные импорты разрешаются от корня проекта. Объявления и поля приватны по умолчанию; публичные типы могут скрывать внутреннее представление. Все модули компилируются в общий IR. Таблица соединений имеет два потребителя, а выбранный межмодульный цикл обновлений сохраняет отсутствие полных копий. Контракт модулей.
0.0.18 — generics
Generic-функции, структуры и параметры N: u32 позволяют переиспользовать
алгоритмы для разных типов и вместимостей. Проверки специализаций сохраняют
владение, приватность и traps. Контракт и примеры.
0.0.19 — регионы и буферы
Логическое владение буфером отделено от владения хранилищем. Result и функции
сохраняют зависимость от региона; release завершает её, close освобождает память.
Контракт.
0.0.20 — линейные результаты и bounded Vec
(next, item) = vec.pop(move current) потребляет результат целиком и переносит
обязанности каждому компоненту. Вектор хранит только инициализированный префикс;
Full и OutOfBounds возвращают прежнего владельца. Фиксированная вместимость,
лексические views и явный release сохраняют модель регионов.
Контракт и пример.
Дальнейшие рубежи
Явный рост коллекций и полноценные строки UTF-8; затем расширенная модель эффектов, FFI, задачи и сеть. Таблица соединений и автомат узла кластера будут проверять модель на эталонных задачах.
Контролируемая стоимость, переносимость семантики и возможность self-hosting остаются направлениями развития. Они требуют отдельных подтверждений по мере роста языка.