Exception-free error handling
In NOIR project, C++ exception is not prohibited strictly, but its usage is limited to really exceptional cases, not for branching code. Instead, noir::Result<T, E>
is used for error handling, which is analogous to std::result::Result<T, E>
in Rust language.