Skip to content

v1.6.0

Choose a tag to compare

@wolfy-j wolfy-j released this 29 Sep 14:03
a4de467

V1 type checker release (#55).

Highlights

  • Soundness: structural and coinductive recursive subtyping (#47 is fixed). Value/error correlation now requires proof on every return path. Metatables keep nil alternatives. Loop refinements follow the bound iterator, not the name ipairs. Callee field-write guarantees are tracked, and narrowing is deterministic.
  • Strict mode: Options.Strict, where any is not accepted as evidence.
  • Typed host APIs: the TypeValueOf return transform types json.decode(str, T)-style APIs (#54). Supporting checker changes for typed contracts.
  • False positives: zero known false positives on a 123-target application lint corpus, in both gradual and strict mode, with no non-convergence.
  • Type metadata: metadata survives rewrite, substitution, resolution and serialization. The type encoding is v14; v13 manifests still decode.
  • Performance: about 2x faster than v1.5.x on the fixture corpus, with 1.27x less lint CPU from the final round. Exponential finality walks and quadratic condition normalization are removed.
  • CI: the benchmark job fails when benchmarks fail. Fuzzers run in isolation, race fixtures are sharded, and fixture time budgets come from measurement.

Compatibility

  • Serialized type manifests are written as v14. Readers of v1.6.0 accept v13 and v14; older readers cannot read v14.
  • Body-less (T?, string?) declarations no longer imply value/error correlation. Declare an explicit ErrorReturn effect for host APIs.