Exceptions have been part of Nim from day one and since then have been tamed with `.raises` annotations and inference. There is no article justifying the design decision because back then it was state of the art. And it still is btw because the alternatives are worse.
Performance is not the reason why Nim has exceptions but it is true that a specialized language construct can give you some performance benefits because optimization is specialization. > I've found exceptions to be problematic from a spooky-action at a > distance/coupling perspective, but I mostly write short-lived CLAs and server > apps, where perf tuning is a late-stage concern. I've found the alternative solutions that people bring up to be much worse. Except for the "poison value" design pattern but that's currently not en vogue. And I say this as somebody who _hates_ exceptions because they are annoying to implement and to support.