Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Reserved keywords

Lexer-level reserved words cannot be used as identifiers. The table below is the complete set, generated from the grammar’s keyword table; a keyword carrying a clarifying note shows it inline.

KeywordNote
abstractRFD 0027 D6 — substrate-neutral declaration modifier: no direct instances. Legal on metatype declarations (every introduced type is abstract) and per-type on concept declarations (pub abstract type Vehicle). Instantiability for the OE1327 coverage gate is NOT-abstract — the compiler reads this flag, never a user axis name.
across
acyclic
all_shortest
always
ambiguous
any
as
as_ofBitemporal time-travel query clause. pub query foo() -> T as_of <expr> filters events by transaction time at query execution. Wire-encoded as an Option<CborValue> on QueryDeclBody.
asc
assert
async
at
await
both
box
box_minus
box_plus
bridge
by
check
const
delete
derive
desc
detach
diamond
diamond_minus
diamond_plus
do
during
else
emit
enum
ever
except
exists
expect
fact
false
fixedRFD 0027 D6 — substrate-neutral declaration modifier: classification decided at construction. Metatype-level only (pub fixed metatype kind = { … };). insert iof / delete iof against a type introduced by a fixed metatype refuses (OE0234); construction is unaffected. Dynamic classification is the default; fixed is the opt-in restriction.
fixture
fn
for
forall
forget
from
group
having
if
iff
impl
in
insert
intersect
into
iof
is
k_shortest
let
limit
logic
macro
mapping
match
meta
metarel
metatype
metaxis
mod
mut
mutate
not
not_factRFD 0010 — strong (classical) negation of facts. Distinct from not (NAF in rule bodies, no wire trace) — pub not_fact P(x) is a declaration that lowers to an IofRefutation / RelationTupleRefutation axiom event.
offset
on
optional
or
path
pub
query
require
return
select
Self
self
set
shortest
simple
since
sink
specializes
standpoint
struct
test
timeout
trail
trait
true
union
unknown
unsafe
until
update
upsert
use
walk
where
with

Reserved for future use (parse but currently unimplemented): async, await, do, or.

Plus type-level constants and primordial types (always in scope, see the standard library): Top, , Bot, , Nat, Int, Real, Decimal, Money, Bool, String, Date, Time, DateTime, Duration.

Formerly reserved. mode and ordered are no longer keywords (RFD 0031 D7): both were vestigial reservations with no parser rule consuming them, and mode blocked a common vocabulary word (pub metatype mode). The documented graph-traversal mode clause (mode-spec, the rule atom) is recognized contextually in the role-step position when that surface lands, never as a reserved word. The Allen interval relations (before, meets, met_by, overlaps, overlapped_by, contains, starts, started_by, finishes, finished_by) are no longer keywords; Allen interval algebra ships as std::allen library vocabulary (RFD 0024), freeing those words for modelers. during remains reserved — it is the temporal-qualifier keyword (at | during | since), not an Allen operator.

Not reserved at lexer level — introducer names are ordinary identifiers: type, rel, and any vocabulary-introduced metatype or metarel name (UFO’s kind, subkind, role, phase, category, relator, mixin, mediation, material, BFO’s class, …). These are contextual identifiers resolved per name resolution against the pub metatype / pub metarel declarations visible in scope — names come from vocabulary packages, declared in the using package or imported from an external one; an unresolved introducer is OE0605 / OE0606. type and rel are not ambient: they are declared in std::core (see the standard library) and brought into scope by use std::core::{type, rel} or a [package].prelude entry (RFD 0038), exactly like any vocabulary. No vocabulary — not even the std::core baseline — ships ambient.

Compiler-known attribute names (reserved against macro shadowing, but not lexer keywords) live in a separate list — see annotations.