Nice article. Missed one thing about PL1 that I think it got first and that you see nowadays in most languages (other than low-level languages like go and C) and most large programs -- a hierarchy of error types, blocks of code to catch errors (exceptions) according to type, and the ability to replace one error-handler with another temporarily within a narrower scope. Not to say that this is good, but it is what we've got.