Moving from CL to Racket: https://fare.livejournal.com/188429.html (base language evolution, module system, a good mix of typed and untyped tooling)
miniblog.
Related Posts
What software designs require clean slate 'revolution' implementations, rather than evolution?
I can think of: borrow checking in a PL (existing code is unsafe), microkernels (architecture is too different from monokernels), and full REPLs (can't add type redefinition later).
From simple IP blocks to probabilistic deep packet inspection: the evolution of web censorship technology: https://news.ycombinator.com/item?id=22659534
The evolution of Rust compiler error messages, the approach taken by the core team, and even some sample code from the Rust lexer and parser!