Not a great article, very little depth, only a shallow mostly syntax-level overview. Notably doesn't at all explore the consequences of those choices in how they relate to convenience, (type) safety, composability, interaction with generics, ... beyond merely mentioning the failure of java's checked exceptions.<p>It's also severely missing in breadth e.g. Swift and Zig use an exception-type <i>syntax</i>, but result-type <i>semantics</i>, it does not cover <i>conditions and restarts</i>, or takes like Common Lisp's MRV, where the ancillary return values are treated as secondary and interacted with through special functions.