Полный исходный код спецификации находится по адресу github.com/nv-lang/nova/tree/main/spec. Ниже — обзор разделов с прямыми ссылками.
Разделы
-
§1
Введение и цели дизайна
Мотивация для Nova, сравнение с родственными языками и основная философия дизайна: явные эффекты, машинно-проверяемые контракты, отсутствие скрытого управления потоком выполнения.
-
§2
Лексическая структура
Кодировка исходника (UTF-8), токены, ключевые слова, операторы, строковые литералы (raw, интерполированные, байтовые), числовые литералы и комментарии.
-
§3
Типы
Примитивные типы, структуры, перечисления (типы-суммы), кортежи, массивы, срезы, типы функций, дженерик-параметры, ограничения трейтов и встроенные
Option[T]иResult[T, E]. Правила номинальной и структурной типизации. -
§4
Эффекты
Система алгебраических эффектов: встроенные эффекты, пользовательские интерфейсы эффектов, обработчики эффектов, полиморфизм эффектов и клауза
usesв сигнатурах функций. Правила вывода и проверки эффектов. -
§5
Контракты
Клаузы
requires,ensuresиinvariant: синтаксис, семантика и три режима проверки (статический через SMT, динамическое проверочное утверждение в рантайме, стёртый). Наследование контрактов, специализация и взаимодействие с дженериками. -
§6
Выражения и операторы
Приоритет операторов, сопоставление с образцом,
if/else/when, циклы, привязкиlet, замыкания, оператор?и управление потоком на основе выражений. -
§7
Функции и методы
Объявления функций, ассоциированные функции (методы), реализации трейтов, правила перегрузки, вариадические функции и аннотации inline/extern.
-
§8
Модули и пакеты
Система модулей, видимость (
pub,pub(pkg), приватная), объявление импортаuse, соглашения о расположении пакетов и формат манифеста пакетного менеджераnv. -
§9
Конкурентность и рантайм
Модель M:N файберов, work-stealing планировщик,
spawn, каналы, области структурированной конкурентности и аннотацияrealtime nogc. Жизненный цикл файбера и отмена. -
§10
Модель памяти
Управляемая память, интерфейс GC, регионы
realtime nogc, типы только для стека и правила разделения данных между файберами. Предполагаемый путь к управлению памятью на основе владения. -
§11
Обработка ошибок
Result[T, E]как основной механизм ошибок, оператор распространения?, приведение ошибок через трейтFrom, семантика паники и различие между восстановимыми и невосстановимыми ошибками. -
§12
FFI и совместимость
Вызов C из Nova (
extern "C"), вызов Nova из C, стабильность ABI, небезопасные блоки и аннотации разметки@repr. -
§13
Грамматика
Полная грамматика EBNF для языка Nova, машинночитаемая и используемая для генерации парсера. Обновляется автоматически при каждом изменении языка.
Проектные решения (D-блоки)
Каждый нетривиальный выбор в дизайне языка фиксируется в пронумерованном документе D-блока в spec/. D-блоки фиксируют вопрос, рассмотренные варианты, принятое решение и обоснование. Это делает спецификацию читаемой историей языка, а не просто справочником.
Текущий диапазон D-блоков: D1—D120. Выбранные ключевые решения:
- D1 — Почему алгебраические эффекты вместо монад или async/await
- D7 — Режимы проверки контрактов и интеграция SMT-решателя
- D15 — M:N рантайм vs. async executor vs. OS-потоки
- D33 — Наследование контрактов и правила специализации трейтов
- D45 — Инструменты документирования и формат
nv doc - D52 — Спецификация избыточных полей в литералах структур
- D63 — Схема манифеста пакетного менеджера