Системные требования
glibc 2.17+ или musl
Apple Silicon или Intel
x86-64; тулчейн MSVC 2022
Clang, MSVC или GCC
Установка
Nova — pre-alpha, готовых пакетов пока нет. Соберите компилятор из исходников; шаги ниже одинаковы для Linux, macOS и Windows.
Предварительные требования
Установите стабильный Rust (1.85+). Для компиляции программ на Nova также нужен C-тулчейн — Clang, MSVC или GCC (определяется автоматически).
Больше ничего ставить не нужно: C-зависимости рантайма (libuv и сборщик мусора Boehm) поставляются сабмодулями и собираются один раз автоматически при первом nova build.
rustup update stable
Клонировать и собрать
git clone --recursive https://github.com/nv-lang/nova
cd nova/nova-cli
cargo build --release
Флаг --recursive подтягивает libuv — git-сабмодуль, нужный рантайму. Уже склонировали без него? Выполните git submodule update --init внутри репозитория.
Бинарник CLI будет в nova-cli/target/release/nova (nova.exe на Windows). Добавьте этот каталог в PATH.
Запустить тесты (опционально)
cd ..
nova-cli/target/release/nova test spec_tests/conformance
Компилирует и прогоняет конформанс-набор языка через только что собранный компилятор. Полный прогон занимает десятки минут — его можно пропустить; быстрее проверить тулчейн сборкой hello-world ниже.
Первая программа на Nova
Создайте файл hello.nv в корне клонированного репозитория — nova build ищет nova.toml workspace вверх по дереву каталогов:
module hello
fn main() {
println("Hello, Nova!")
}
Скомпилируйте в native binary и запустите его:
nova build hello.nv -o hello
./hello
Вывод
Hello, Nova!
Эффекты за 30 секунд
Nova требует объявлять каждый побочный эффект в сигнатуре функции. Компилятор проверяет, что никаких необъявленных эффектов не выполняется — на этапе компиляции, а не в рантайме.
// Эффекты стоят между параметрами и типом возврата.
// Io означает, что функция может выполнять ввод-вывод.
// Компилятор отклоняет вызовы Io-функций из не-Io контекстов.
fn greet(name str) Io -> () {
println("Hello, ${name}!")
}
fn main() {
greet("Nova")
}
Эффекты стоят между параметрами и типом возврата. Компилятор статически проверяет, что каждый эффект объявлен — никакого скрытого ввода-вывода, никаких неожиданных сбоев.