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

Roadmap

Features under consideration. No timelines — items land if a real use case shows up; otherwise they sit here. The point of this page is to make explicit what’s not in the language and why, without sprinkling those notes throughout the reference.

Likely

  • @deprecated(message?) attribute. Marks a constant as deprecated; generators emit a target-language deprecation marker (Rust #[deprecated], JSDoc @deprecated, etc.). Cut from v1 because it adds surface without solving a problem most projects hit; will revisit if real demand shows up.
  • use a::b::C as D rename imports. Rust-style; useful for resolving collisions between same-named imports. Lands when the collision case becomes painful in real projects.
  • Configurable formatter column budget. Currently fixed at 100. Easy to add via primate.toml if anyone wants a different number.
  • /regex/flags regex literal syntax. Considered and deferred in RFC 0004 in favor of the same string-with-(?i) form that Rust and Python use. If inline-flag ergonomics become a recurring papercut, revisit.

Maybe

  • newtype for nominal types. type Port = u32 is structural: Port and u32 are interchangeable. A newtype Port = u32 would make them distinct, catching “I passed a Count where I meant a Port” in target-language code. The Rust story is clean (pub struct Port(pub u32);); the TypeScript story (branded types) is awkward; the Python story (NewType) is type-checker-only. Lands if a real project needs the discipline.
  • Other unit-suffix categories. Today only byte-size suffixes are recognized on integer literals. % (percent), Hz (frequency), m/cm/km (length), currency codes — each could exist as a parsing affordance. Picking one without a principled criterion is arbitrary, so we don’t.

Probably not

  • Glob imports (use a::*). Mass-import is a name-shadowing hazard; explicit use lines make collisions and provenance clear.
  • Block comments (/* */). One line, one doc, one file-doc.
  • Significant whitespace. Newlines terminate; indentation is cosmetic.
  • Sigils on names ($X, @X). Plain identifiers.

Out of scope

  • Expressions and arithmetic. primate is a constants language. If you need to compute a value, do it in your build script and paste the result.
  • String interpolation. Constants only; low value.
  • Statement-terminating semicolons. Newlines work and there’s no expression context where ASI-style ambiguity could appear.