Системные требования
C-тулчейн и заголовки Boehm GC
C-тулчейн, например Visual Studio Build Tools
C-компилятор всё ещё нужен
Установка
Скачайте архив Oracle для своей платформы со страницы релизов.
Проверьте его по SHA256SUMS того же выпуска и распакуйте.
В архив входят CLI, nova-lsp, стандартная библиотека и C-рантайм.
Следуйте README-INSTALL.md внутри своего архива.
Windows x86_64
Распакуйте nova-oracle-0.1.0-windows-x86_64.zip. Нужен C-компилятор, например Visual Studio Build Tools с поддержкой C++. Библиотека Boehm GC и её заголовки входят в архив.
В PowerShell из каталога с nova.exe подключите скрипт через точку. Начальная точка сохраняет настройки окружения в текущей сессии:
. .\setup-env.ps1
nova --version
Linux x86_64
Распакуйте nova-oracle-0.1.0-linux-x86_64.tar.gz. Для Debian/Ubuntu установите C-тулчейн и заголовки Boehm GC:
sudo apt-get install clang cmake make libgc-dev build-essential
В Bash из корня распакованного дистрибутива:
source ./setup-env.sh
nova --version
Исходники и Carina
На странице релизов есть также снимки исходников с субмодулями. Для сборки Oracle из исходников используйте инструкцию сборки на Linux и требования вашей платформы.
Carina 0.2.0 — компилятор, написанный на Nova. Его опубликованный бинарник — только для Windows x86_64; принятая ступень доказывает самосборку, а не готовность всей Oracle CLI или экосистемы пакетов. Инструкция для Carina находится в её отдельном архиве.
Первая программа на Nova
Создайте отдельную папку проекта. Сначала добавьте nova.toml: компилятор ищет этот манифест пакета вверх по дереву каталогов.
[package]
name = "hello"
version = "0.1.0"
В той же папке создайте hello.nv. Имя модуля соответствует имени пакета:
module hello
fn main() {
println("Hello, Nova!")
}
Из папки проекта, в сессии после подключения setup-скрипта, соберите и запустите программу. PowerShell на Windows:
nova build hello.nv
.\hello.exe
Bash на Linux:
nova build hello.nv
./hello
Вывод
Hello, Nova!
Эффекты за 30 секунд
Nova требует объявлять каждый побочный эффект в сигнатуре функции. Компилятор проверяет, что никаких необъявленных эффектов не выполняется — на этапе компиляции, а не в рантайме.
// Эффекты стоят между параметрами и типом возврата.
// Io означает, что функция может выполнять ввод-вывод.
// Компилятор отклоняет вызовы Io-функций из не-Io контекстов.
fn greet(name str) Io -> () {
println("Hello, ${name}!")
}
fn main() {
greet("Nova")
}
Эффекты стоят между параметрами и типом возврата. Компилятор статически проверяет, что каждый эффект объявлен — никакого скрытого ввода-вывода, никаких неожиданных сбоев.