Rust 1.40 adds a feature that stops consumers matching on structs or enums exhaustively, so extending them is not a breaking change!
There's a cute todo!() macro too.
miniblog.
Related Posts
It's really satisfying fixing crashes in rust-analyzer. You can start from a panic message and dig until you've got a tiny Rust program that triggers the problem.
(It's usually an issue with incomplete source files breaking invariants.)
I really like the MELPA model of packaging directly from git. It solves the problem of forgetting to release something -- just merge a PR and you're done.
It also makes version number bumps much less important.
You could go even further in a statically typed language and also figure out when breaking changes occur.
Superb discussion of Go semantics for `for` loop variables, the challenges of breaking changes, and the tradeoffs of static analysis: