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).
miniblog.
Related Posts
One interesting property of both stdin/stdout based REPLs and RPC based REPLs is that they need to support asynchronous events.
In both these programs, I don't need to wait until the function is done to see the output printed. It's not sufficient to read-eval-wait-print-loop.
There's something of a tradition of REPLs having personalities in lisp. I've seen Common Lisp tools (e.g. slime/sly) and Clojure (e.g. cider) say encouraging things, but Fennel is almost judgemental :)
Programming in the debugger: https://willcrichton.net/notes/programming-in-the-debugger/
Discusses how notebooks enable incremental program writing, and contrasts with REPLs.
Makes some interesting points regarding persistence, although resumable exceptions have similar upsides too.


