:= everywhere inside; an explicit type where the outside world comes in — input, extern, struct fields, public functions. That is the third pillar used as meant.
Good practice
How Nerve is meant to be written: the practices its rules make easy. They’re advice, not rules — the compiler enforces none of them.
A quoted name may be anything, and no style for it is recommended.
Types and values
'text' := std::input.line[] otherwise "";
'n' := to.int32[1, 99]['text'] otherwise 1;Everything downstream is then proven, with no guard at each use.
mut by habitPlain is the standard, and change already marks every change. Keep !mut / !$ for values whose fixedness matters to the reader: a rate, a limit.
Safety
checkA guard if in front of the site, and check on the ones that matter, so the compiler says whether the guard is enough. !check is for what no guard can prove, mostly C.
!check onceAs std does: one small function holds the !check C call, and everything else calls that safe wrapper. The build's !check list stays short enough to review.
NO_FUCKING_CHECKS only after measuringNever a first resort.
#strict for public Limbs, plain files for programsA library's safety should not depend on who calls it, and #strict makes sure it does not.
Ownership and failures
lend by default, give when the receiver should own it, copy rarelyEvery copy is a visible allocation; many of them mean the design is off.
otherwise with one arm per reason close to the source, otherwise fail to pass it up. Careful with otherwise 0 on input: it can turn "bad input" into a zero that looks real.
and.then for guardsif 'i' </== list.length[lend 'xs'] and.then 'xs'['i'] == 5 { … }. A plain and runs both sides.
Loops and output
for; Precog parallelisesseq only when order matters, para only after measuring, simd only when the plain loop did not vectorise, !cheat only for timing code.
print.useful for people, print for debugging numbers, print.format for shaped output(columns, hex, places).
precedence.low_first for a Limb's operator levels(owner, 2026-10-03: "low_first is good practice"): level 1 binds loosest, as a precedence table is read top to bottom. precedence.high_first is there for whoever thinks the other way.