Stefan Monnier wrote (2019-07-10 22:36): > What's the "standard" way to perform arithmetic operations on `int` > with overflow checking (e.g. returning an `Option` or signaling an > exception on overflow)? I don’t know whether there is a “standard” for integers specifically, but the rationale for option vs. exception is the following: exceptions are used for behaviours that are not meant to happen, (ie. program errors), whereas options are used for the normal course of a program. For instance, depending on your application, the fact that an element is unbound in a hash table may be an expected fact that should be dealt with. In this case, I would advocate for exceptions, because an overflow is clearly a failure of the program: the bounds on native integers are only related to the internals of the OCaml runtime, thus it is very unlikely to have any meaning in your application. It is also likely that you may not work around an overflow, except by running the same computation with zarith. If you expect overflows with int, maybe you should use zarith. Throwing an exception allows you to interrupt your program and track precisely where the overflow occurred (with the stack trace), either by wrapping your whole computation in a single exception handler, or by letting the runtime handle the exception. With options, by contrast, either you would write an option handler around each problematic operation, or you would propagate the option, which implies (1) rewriting your whole computation in a monadic style and (2) losing the provenance of a None. And you would pay a penalty for boxing your integers. > Currently I do the checks by hand but it occurred to me that maybe I'm > not the first one to want that. You’re not indeed. For my own needs, I wrote carefully overflowing versions of some usual arithmetic functions[1]. But more serious projects may be available, I guess. [1]: https://gitlab.crans.org/mevel/project-euler-lib/blob/master/Arith.mli -- Glen Mével