Honest gaps in the v1.8.0 public release versus the draft spec. Full list lives on the main branch.
crisp only (self-hosting → v2.0.0)examples/shapes); parametric shape Boxy works (examples/generics_implicit, examples/shapes_generic); method / anonymous shapes still limited (#61)id(x: T)); <> pins and applies. Operators / unique methods on T infer bounds (T: Add, T: Show); typeck E0084 rejects unsatisfied instantiations (#84). Written where, generic trait bounds, dyn Trait, and nested >> (lexed as shift) still limited (#59 / #70 / #71 / #75)|x| … are the same callable; holes / trailing last-arg / .field / .m() sugar (examples/closures, #72 / #87–#89). Operator sections (+ 1) are not shipped. dyn Fn is not a Crisp type yet.extern rust crate { … } (or a src/*.crpi sidecar) for scalar signatures; undeclared is E0089, a rustc mismatch is E0090 (#116). serde_json / ureq stay special-cased (#55). No slices, generics, or ndarray in extern rust.examples/trait_defaults); bounds / dyn Trait still incomplete (#59)match arms are kept (#101). Recursive enums and full exhaustiveness still gapwhile / for / loop work (examples/loops); for is vec-only MVP (no enumerate / labels yet)E0043)crisp-lsp stdio host ships (hover, inlays, diagnostics); install with cargo install --path crates/crisp-lsp (#56)./scripts/package-vsix.sh; Marketplace listing optional (#57)cargo install crisp-lang --locked (#66).Shipped in v1.8.0: chained else if (#117); optional record commas (#111); parse/lex file:line:col (#109); unary - on float (#113); checking-position int→float and as float/as int (#112); Copy records / clone-at-bind (#118); harness args from CIR (#114); implicit vec<T> and xs[i] (#119 / #120, examples/vec_ops); prelude exp/sin/cos/tanh/sqrt (#115); extern rust scalars (#116).
Shipped in v1.7.3: crisp.toml path deps (foo = { path = "…" }, rewritten into target/rust/Cargo.toml, #105, examples/path_dep); crisp run / test cwd is the crate root, not target/rust (CRISP_CRATE_ROOT, #106).
Shipped in v1.7.2: binop grouping (lo + hi) / 2 (#99), nested type use emits crate:: (#100, examples/nested_types), string match arms (#101), crisp test unique names / bool-str assert_eq! / pub trait Show (#102).
Shipped in v1.7.1: nested-module crate:: paths (#93), float ** / powf (#94), interpolation E0035 spans (#95), while/if assignment (#96).
Shipped in v1.7.0: first-class function values and implicit-closure sugar — holes, trailing last-arg, field/method sections (examples/closures, #72 / #87–#89).
Shipped in v1.6.1: inferred bounds on generic T from use (#84) — operators → Add/Sub/Mul/Div; unique methods → T: Show / T: Measure; E0084 on bad instantiations.
Shipped in v1.6.0: implicit generics (preferred), parametric shapes, pub schemes in crisp.lock — on top of v1.5 loops / LSP / shapes and v1.4 interop.