This is called the "result pattern". I would not call this a novel concept. In C# we use this: https://github.com/ardalis/Result
> The most common approach is the traditional try/catch method.
Exceptions, complete with try-catch-finally, were developed in the 60s & 70s, and languages such as Lisp and COBOL both adopted them.
So I'm not sure what you're calling "much later" as they fully predate C89, which is about as far back as most people consider when talking about programming languages.