Bootstrap · pre-alpha

Язык, который
говорит прямо

Nova — язык системного уровня на основе алгебраических эффектов, статических контрактов и M:N рантайма. Каждый побочный эффект объявлен в сигнатуре. Каждый инвариант проверяется компилятором.

fetch_user.nv
// Алгебраические эффекты в сигнатурах
fn fetch_user(id u64) Db Log -> Result[User, NotFound]
    requires id > 0
{
    log("fetching", {id: id.to_str()})
    match db.find_user(id) {
        Some(u) -> Ok(u)
        None    -> Err(NotFound)
    }
}
Bootstrap-стадия. Nova в активной ранней разработке — компилятор работает, стандартная библиотека частична, breaking changes происходят регулярно. Не для продакшена.

Зачем Nova

Создан для следующего десятилетия

Три примитива на уровне языка, меняющих способ рассуждений о программах.

Алгебраические эффекты

Сеть, ввод-вывод, случайность, время и мутация появляются прямо в типе функции — между параметрами и стрелкой возврата. Никакого скрытого control flow. Никаких неожиданных await. Вызывающий всегда знает, что делает функция.

Статические контракты

Клаузы requires, ensures и invariant проверяются SMT-решателем на этапе компиляции, при необходимости верифицируются в runtime в debug-режиме и стираются с нулевой стоимостью в release.

M:N Рантайм

Go-style файберы поверх OS-потоков с work-stealing планировщиком. Managed-память по умолчанию (Boehm GC сейчас, concurrent GC в планах). Для latency-sensitive путей — realtime nogc.

Все зависимости видны с первого взгляда

Сигнатура HTTP-сервера сообщает, что он работает с сетью (Net), говорит на HTTP (Http) и пишет логи (Log). Ничего неявного. Система эффектов и есть документация.

Читать спецификацию
server.nv
// HTTP-сервер — эффекты видны в сигнатуре
fn serve_api() Net Http Log -> ()
{
    let router = Router.new()
        .route(Get,  "/users/:id", get_user)
        .route(Post, "/users",    create_user)

    serve("0.0.0.0:8080", router.dispatch())
}

Попробовать Nova

Установить компилятор одной командой. Работает на Linux и macOS.

$ curl -sSf https://nv-lang.org/install.sh | sh

Или скачать релиз · собрать из исходников

Присоединиться

Nova — открытый проект, разрабатываемый публично. Следите за дизайном языка, сообщайте об ошибках, вносите код или просто наблюдайте за ростом компилятора.

nv-lang/nova на GitHub hello@nv-lang.org