nova-runtime 0.3.1

The Nova language's runtime: garbage collector and async executor (internal to the nova toolchain)
Documentation
[package]
name = "nova-runtime"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
description = "The Nova language's runtime: garbage collector and async executor (internal to the nova toolchain)"
readme = "../README.md"
# `links` lets this crate's build script hand metadata to the crates that
# depend on it: nova-cli's build script reads DEP_NOVA_RUNTIME_MANIFEST_DIR
# to find this source and build the staticlib it embeds
# (docs/adr/0027-runtime-and-std-in-an-installed-nova.md).
links = "nova_runtime"

[lib]
# Not a benchmark target: `cargo bench` would otherwise build this under
# libtest's harness, which rejects criterion's `--output-format`. The
# workspace's only benchmark is `nova-lexer/benches/lex.rs`.
bench = false
# rlib: linked into the nova CLI for the JIT path (`nova run`).
# staticlib: linked into standalone executables by `nova build`.
crate-type = ["rlib", "staticlib"]

[dependencies]
nova-diagnostics = { workspace = true }
anyhow = { workspace = true }
tracing = { workspace = true }

# `http.rs`'s request-head parser. This is hyper's own HTTP/1 parser, taken
# on its own: standalone, zero-copy, no async and no runtime, so it parks no
# task and registers no waker. The design spec's section 2 records why hyper
# itself cannot drive this project's server and why its parsing internals can
# still be used. `httparse` has no dependencies of its own.
httparse = "1.10"

# The Phase 2 build order names `ring` for `std/crypto`
# (`nova-spec/00-MASTER-SPEC.md` section 3). Chosen over the RustCrypto
# family because it is what the spec names, needs one dependency argument
# rather than four, and adds fewer new lockfile entries: `ring`, `untrusted`,
# `wasi` and `getrandom` 0.2.x, where the alternative adds roughly a dozen.
# Its own MSRV is 1.66, under this workspace's 1.78 floor.
ring = "0.17"

# `poll.rs`'s platform shim: `select`'s `fd_set` has a different bit-mask
# layout on Linux (glibc, 64-bit words) than on macOS (Darwin, 32-bit words),
# and hand-rolling both correctly with no way to run the macOS arm locally
# would be exactly the "reasoned, not measured" risk this crate's poller
# exists to close. `libc` already ships in this workspace's dependency graph
# (via `rustix`, `errno`, and others), so pulling it in directly adds no new
# supply-chain surface.
[target.'cfg(unix)'.dependencies]
libc = "0.2"

# `WSAPoll`'s `WSAPOLLFD` layout (a `usize`-sized `SOCKET` handle followed by
# two `i16` fields) is simple enough to hand-write, but `windows-sys` gets the
# `#[link(name = "ws2_32")]` pragma and the exact constant values right for
# free, and -- like `libc` above -- is already in this workspace's dependency
# graph via other crates.
[target.'cfg(windows)'.dependencies]
# `Win32_System_Console` is `signal.rs`'s `SetConsoleCtrlHandler`. Until now it
# was reachable only through another dependency's feature unification.
windows-sys = { version = "0.61", features = ["Win32_Networking_WinSock", "Win32_System_Console"] }

[build-dependencies]
cc = { workspace = true }