v0.4.2
Features
- fuzz: the AOT differential over generated programs
- fuzz: a type-directed generator, and the false-positive oracle it unlocks
- fuzz: the tier-1 JIT differential over generated programs
- fuzz: a leak/RC oracle over generated programs
- fuzz: the runtime-rejection census, and a gate so it cannot grow in silence
- fuzz: an execution oracle — what the checker promises vs what running does
Fixes
- loader: α-rename every binder a merged module holds
- loader: a merged module's bindings carry its identity
- loader: merged module statements run in their own module's order
- fmt: a
?on a?keeps its parentheses, and the precedence table gets a matrix - check: an enum variant takes the fields it declares
- check: a scalar
matchwith no catch-all is provably non-exhaustive - check:
asserttakes a bool and at most a message - check: a container is indexed by its key type, and
forneeds something iterable - check: a non-callable value is not callable, and a module has the functions it has
- check: a condition must be a bool, and a literal pattern must be able to match
- check:
&&and||take bools - check:
noneis anOption, not a value of whatever type is expected - check: an ordering needs one type; a function value and a tuple are closed
- check: two declarations of one name in one file collide (E0020)
- check: a
for (a, b)pattern needs a tuple element with a position per name - check: a declared type is not callable
- check: the hoisted-globals fallback licenses a deferred reference, not an early one
- bundle: cap the inflate so a payload cannot expand without bound
- fmt: comments inside
${…}holes survive, and stay in their branch - fmt: a trailing comment belongs to its region, not just its line
- fmt: a spread list is not the same as one concatenated with something
- fmt: the placement oracle counts only statement
else if - fmt: two comment relocations, both from an unwalked region
- fmt: the placement oracle measures AST blocks, not braces
- fmt: a resugared conditional is not brace-delimited either
- fmt: an arrow closure is not self-delimiting
Documentation
- contributing: the census, the leak oracle, and the tier-1 differential
- fuzz: name the real check-vs-run surfaces instead of a placeholder link
- contributing: structured fuzzing joins the testing architecture
Refactoring
- fmt: the formatter's invariants become a shared oracle
CI & build
- release: a release tells the para repos to bump their toolchain pin
Housekeeping
- release: bump workspace version to 0.4.2
- loader: two dependency packages may each bind the same name
- fuzz: ungrouped hex digits in the jit seed
- rustfmt the new checker gates and the run oracle
- fuzz: the
.noebcontainer, and what the compiler assumes - fuzz: the formatter's oracle runs over generated programs in the gate
- fuzz: a structured generator of valid Noeta programs
Full changelog: v0.4.1...v0.4.2