The parser emits deterministic diagnostics for invalid relation forms:
Codes beginning with D-REL identify relation diagnostics.
Table 1. Relation diagnostics.
| Code | Cause | Message |
|---|---|---|
D-REL-001 |
Kind keyword before role keyword | D-REL-001: relation role keyword (input/output) must precede the kind keyword |
D-REL-002 |
More than one role keyword | D-REL-002: at most one role keyword (input, output) is permitted |
D-REL-003 |
More than one kind keyword | D-REL-003: at most one kind keyword (relation, stream, multiset) is permitted |
D-REL-004 |
Bracket body with a primary-key clause | D-REL-004: bracket-form relations cannot declare a primary key clause |
D-REL-005 |
Empty bracket body | D-REL-005: bracket-form relations require a single element type between '[' and ']' |
D-REL-006 |
Primary-key clause on a non-input relation |
D-REL-006: primary key clauses are only valid on input relations |
D-REL-007 |
Stray or malformed primary key clause |
D-REL-007: unexpected or malformed primary key clause |
D-REL-008 |
Bracket-wrapped primary-key clause | D-REL-008: bracket-wrapped primary key clauses are not supported; remove the surrounding '['/']' |
Build standard
Development builds (make test, make lint, make typecheck and the debug
build) use the parallel rustc frontend (-Zthreads=8) and, on Linux, the
mold linker. Install mold before building on Linux: the configuration names
it, so a build without it fails at link time (on Debian or Ubuntu,
sudo apt-get install mold). macOS keeps its platform linker, because mold
ships for Linux only.
The flags live in .cargo/config.toml, but Cargo applies exactly one
rustflags source and an assigned RUSTFLAGS replaces every configuration
source. The Makefile therefore restates the flags in each recipe and keeps any
RUSTFLAGS you set, appending the standard flags after yours. Two builds are
held out on purpose: the coverage build assigns its own flags, because a
measurement should not depend on the fast flags, and the release build.
make release keeps your RUSTFLAGS and names neither fast flag, so a shipped
artefact links with the platform linker. A bare cargo build --release is
different: it takes the configuration's flags unless you assign RUSTFLAGS
yourself, for example RUSTFLAGS="" cargo build --release.
Cranelift is not adopted; the developers' guide records the measurement and the reason. See ADR 003 for the reasoning.