Wolf is a compiled systems language. Memory lives in regions the compiler infers, so a program carries no lifetime annotations. Allocation goes through arenas by default. A region moves between tasks instead of being shared, which is what keeps concurrent access safe, and the aliasing that falls out of that is information the optimizer gets to use. Arithmetic is checked in every profile, including release.
Wolf is pre-alpha. The surface still moves.
v0.1.0 is tagged, under the codename wolfgang. The codenames go on like that.
It ships the debug tier: wolf build and wolf run compile .lu source to
native machine code through the compiler's own backend, with no LLVM in the
loop. wolf build --release goes through LLVM instead. That tier compiles and
runs, and both tiers agree on every corpus program that runs. The optimizer
behind it is campaign c09 and that work is not finished.
cargo build --release -p wolf_driver
./target/release/wolf run corpus/hello.luhello, wolfdocs/release/NOTES-v0.1.0.md says what the
release does and what it does not do, feature by feature.
| path | what |
|---|---|
spec/ |
the normative language specification: grammar, memory model, concurrency, ABI, conformance |
corpus/ |
the conformance corpus. Every program states its own expected outcome in a //! header, and CI checks the claim |
crates/ |
the compiler, the runtime (wolf_rt), and the driver |
docs/ |
the diagnostic catalog, the lint triage ledger, the release notes |
The reference interpreter is a separate implementation in wolf-interp. The two share no code, only the spec and the corpus, and each is tested against the other.
CONTRIBUTING.md has the gates and the commit conventions.
Licensed under GPL-3.0-or-later. The runtime library
(wolf_rt) carries the wolf Runtime Library Exception:
programs you compile with wolf are yours, under any license you choose.