Системные требования
glibc 2.17+ или musl
Apple Silicon или Intel
x86-64; тулчейн MSVC 2022
Clang 17+ или MSVC 2022
Установка
Скачать скрипт установки
Скрипт загружает готовый бинарный файл, проверяет контрольную сумму и помещает nova в ~/.local/bin.
curl -fsSL https://nv-lang.org/install.sh | sh
Или скачайте архив релиза и распакуйте вручную.
Добавить в PATH
Если ~/.local/bin ещё не в PATH, добавьте его в профиль оболочки:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Для Zsh используйте ~/.zshrc.
Проверка
nova --version
Ожидаемый вывод
nova 0.1.0-bootstrap (2026-05-18)
Установить через Homebrew
brew tap nv-lang/nova
brew install nova
Или используйте скрипт установки:
curl -fsSL https://nv-lang.org/install.sh | sh
Проверка
nova --version
Ожидаемый вывод
nova 0.1.0-bootstrap (2026-05-18)
Установить через winget
winget install NvLang.Nova
Или скачайте установщик .msi со страницы релизов GitHub.
Проверка (PowerShell)
nova --version
Ожидаемый вывод
nova 0.1.0-bootstrap (2026-05-18)
Предварительные требования
Установите Rust (stable, 1.78+) и Clang 17+ (или MSVC 2022 на Windows).
rustup update stable
Клонировать и собрать
git clone https://github.com/nv-lang/nova
cd nova/compiler-codegen
cargo build --release
Бинарный файл компилятора будет в target/release/nova-codegen. Добавьте его в PATH или создайте симлинк с именем nova.
Запустить тесты (опционально)
cargo test --lib
Ожидается прохождение ~300 тестов. Один известный неудачный тест (fn_static_method) — незавершённая работа.
Первая программа на Nova
Создайте файл hello.nv:
module hello
fn main() {
println("Hello, Nova!")
}
Скомпилируйте и запустите:
nova run hello.nv
Вывод
Hello, Nova!
Эффекты за 30 секунд
Nova требует объявлять каждый побочный эффект в сигнатуре функции. Компилятор проверяет, что никаких необъявленных эффектов не выполняется — на этапе компиляции, а не в рантайме.
// Эффекты стоят между параметрами и типом возврата.
// Io означает, что функция может выполнять ввод-вывод.
// Компилятор отклоняет вызовы Io-функций из не-Io контекстов.
fn greet(name str) Io -> () {
println("Hello, ${name}!")
}
fn main() {
greet("Nova")
}
Эффекты стоят между параметрами и типом возврата. Компилятор статически проверяет, что каждый эффект объявлен — никакого скрытого ввода-вывода, никаких неожиданных сбоев.