From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTP id 1D91C5D5 for ; Wed, 10 Jul 2019 23:05:31 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.63,476,1557180000"; d="asc'?scan'208";a="391326735" Received: from sympa.inria.fr ([193.51.193.213]) by mail2-relais-roc.national.inria.fr with ESMTP; 11 Jul 2019 01:05:29 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id A3ED2826E3; Thu, 11 Jul 2019 01:05:29 +0200 (CEST) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 8B0E57ED69 for ; Thu, 11 Jul 2019 01:05:13 +0200 (CEST) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=glen.mevel@crans.org; spf=Pass smtp.mailfrom=glen.mevel@crans.org; spf=None smtp.helo=postmaster@redisdead.crans.org IronPort-PHdr: =?us-ascii?q?9a23=3AykdRyhxrnJkMTNrXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?2+4UIJqq85mqBkHD//Il1AaPAdyBra4bwLOI+4nbGkU4qa6bt34DdJEeHzQksu?= =?us-ascii?q?4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPERvjKwV1?= =?us-ascii?q?Ov71GonPhMiryuy+4ZLebxhWiDanbr5/Lhq6oRjQu8ILnYZsN6E9xwfTrHBVYe?= =?us-ascii?q?pW32RoJVySnxb4+Mi9+YNo/jpTtfw86cNOSL32cKskQ7NWCjQmKH0169bwtRbf?= =?us-ascii?q?VwuP52ATXXsQnxFVHgXK9hD6XpP2sivnqupw3TSRMMPqQbwoXzmp8rxmQwH0hi?= =?us-ascii?q?gZKzE58XnXis1ug6JdvBKhvAF0z4rNbI2IKPZyYqbRcNUHTmRDQ8lRTTRMDJ6i?= =?us-ascii?q?YYsBD+QPPuhWoIfyqFQMsRSzHgasCP/1xzFPmnP706833uI8Gg/GxgwgGNcOvW?= =?us-ascii?q?zVotXxKqgSV/i6wq7SyjXdcfxW3Sr25Y/HchAlv/6MW6h8cc/PxkkxCQzFik6d?= =?us-ascii?q?ppD/PzyP0OQNqHKX7+16VeKgkmMqrRx6rDaoxscpkIbJh4QVx0jY+iVj2ok1I8?= =?us-ascii?q?a4RFR8Yd6+H5tdsTyROYhuQs46Xm1ltiU3xqcYtZO1YSQG0okryhDeZvCdfYWF?= =?us-ascii?q?5grvWPiLLjtkmH1ofbCyiwqu/UWl1uHxU9e43EtPoydLj9XBtmwC2hnN5cebUf?= =?us-ascii?q?Ry4EKs1DeS2AzP5OFJJEM5mrHfJpMjxLM7i4Advl7ZHiDsnUX7lK+WeVsg+uiv?= =?us-ascii?q?8+nneKvpqYKdN49vlw7xLL4hldGlDeskKAgBRW6b+f+m2L3k5035T61Gjvwwkq?= =?us-ascii?q?bHrJDXPdkXq6C6DgNPzIou5QuzAy273NkWnHQLNlxIdRafg4jsIV7OIfT4Dfml?= =?us-ascii?q?g1SrlTdm3//GPrn/DZXLNHTDlanufahj5E5Y0wc80cpf6IhSCrEaOv7zXVXxtN?= =?us-ascii?q?PAAh8jLwO02/rnCMl61o4GRW2AGKqZMKfLvV+M5+IvOPWMaZQOuDf9Lvgl/+Th?= =?us-ascii?q?gWU4mV8bZ6mp3IEYZGq2HvR8cA2lZi/ni9IFVGMLpRYWTerwiVTEXyQASWy1Wv?= =?us-ascii?q?cT4jw9P6cnE4rHDtSihLGHmiK2AJBSTmtcA1aXV3DyeNPXCL83dCuOL5o5wXQ/?= =?us-ascii?q?Xr+7RtpkjEn27VKo+/9cNuPRvxYgm9fj2dxyvbSBjxw+9Cd4As2RlWqXRmdv2G?= =?us-ascii?q?QSSG1uhfEtkQlG0l6GlJNArbldHN1X6elOV15jZ5XGxuphTdfoVVCYJ4vbeBOd?= =?us-ascii?q?WtyjRAoJYJcp2dZXOhR2AdyklVbExSX4W7I=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0B2AABgbiZdfSeI54plHgEGBwaBVgYLA?= =?us-ascii?q?YFDgT1SMiiEHJRqFINOlw8JAQMBBwUjCgIBAYRAAoJOGwcBBDMGDgEDAQEEAQE?= =?us-ascii?q?CAQIDARMBAQsUCIVsDII6KQGCZwEEASMdAQE3AQQLC0ICAlcTCAEBgx4BgXsPA?= =?us-ascii?q?QQKrEZxgTKCeQEBBYYofwcDBoE0gVGKDoIWgTiCaz6FEYI9gliMHJ4+BwKCG4M?= =?us-ascii?q?rgh+BDY0qBhuYApRykCiBZoF6fUOCbIJBCxiIYoVBPTMBgSiOeAEB?= X-IPAS-Result: =?us-ascii?q?A0B2AABgbiZdfSeI54plHgEGBwaBVgYLAYFDgT1SMiiEHJR?= =?us-ascii?q?qFINOlw8JAQMBBwUjCgIBAYRAAoJOGwcBBDMGDgEDAQEEAQECAQIDARMBAQsUC?= =?us-ascii?q?IVsDII6KQGCZwEEASMdAQE3AQQLC0ICAlcTCAEBgx4BgXsPAQQKrEZxgTKCeQE?= =?us-ascii?q?BBYYofwcDBoE0gVGKDoIWgTiCaz6FEYI9gliMHJ4+BwKCG4Mrgh+BDY0qBhuYA?= =?us-ascii?q?pRykCiBZoF6fUOCbIJBCxiIYoVBPTMBgSiOeAEB?= X-IronPort-AV: E=Sophos;i="5.63,476,1557180000"; d="asc'?scan'208";a="391326653" X-MGA-submission: =?us-ascii?q?MDEpziQvX+ej0QmmJbWY+uID0CBUS8Ag1rlUEo?= =?us-ascii?q?v+dvK3M4SdCd1n1CZ7xg8zVHxPXNbw792ZQDBvxLa5aMwprjpSPYKZTS?= =?us-ascii?q?nIJmWRcm104xxdSYTVjZiFDL7aVYFP6I/9P7NiI/JdNWBGgDaHFu+eG1?= =?us-ascii?q?ub/DYh21lo9PP763BFuBFb4w=3D=3D?= Received: from redisdead.crans.org ([138.231.136.39]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jul 2019 01:05:12 +0200 Received: from [IPv6:2a0c:700:0:21:315c:ecbe:6d0f:8b97] (unknown [IPv6:2a0c:700:0:21:315c:ecbe:6d0f:8b97]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by redisdead.crans.org (Postfix) with ESMTPSA id BD4F9165; Thu, 11 Jul 2019 01:05:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=crans.org; s=mail; t=1562799912; bh=16ZrbStHn0JWJCeVRa09w7kUgfvL84D+N5PY44CdpuI=; h=Subject:To:References:From:Cc:Date:In-Reply-To:From; b=gZzE18/OYYUweWNbk/xfpTCRl7XqkTDJDuNpsr/ah+hyiNyV4uhlIZWcyEuo5xqmy ttiur2BRg3ID4kELMYl3Ax54aShuOtQrhJ3Z96XIjfWHKRId3drWkM7onpl+JZpABU aVLcRkNTPbQ320lPFqcBO/2gJJW6H40soLU8iViw1KC5arhN7wzdhL7eiCxMJ64upL d+oDVS90ygUEHvVpPlD/9jiJJN7Um5gs0s8qiGFTlQVRJnG4gCpp0LzqkYG017+xW+ uoKNxOnYdCoDQEb7OYnkMk6Rj/QCN6t1Z3HCLwTHWowCl2x1bOB1wHsHvKnhYHlNJp v2eaIfTmPqrx9H6KnowI4UcOKosV/jhgSgKEKaGNHnMMaDJL44VnvSKE2mIwf9EnxT 9Z69vs3e9f/F66L0wOIZX0Swts/vas9JUETU5CvEJfMvQTlDc/pl96QvDwl8tNHhBR O0HZOWP3vM+iE8+1jZjanf7+nedbysPXskk1qmbSBuvRVCIQP1Iy1GeCiWKkdQ5Ov+ qx6420fFf5FZG497RJs3Pin0uwc2zOzP3P1+Ht9isR+kwCZ8zexAG1VyAWHlJ9cZOr yhXKVgJAN+aNIJ7sKUPlca70kom+l3wOKMaq/yUCm2/KF6dzvUi88sc2XzdELRIDTM dHi8LB0FavVN/PNVDQqL90aM= To: caml-list@inria.fr References: From: =?UTF-8?Q?Glen_M=c3=a9vel?= Openpgp: preference=signencrypt Autocrypt: addr=glen.mevel@crans.org; prefer-encrypt=mutual; keydata= mQENBFV3JKEBCAC14VQHQkS2D3avUr7OyY7zOuvXKGxbkxjiw/75TN0UvLPqcda7OAyEKHs0 b94Me/X8D9kGDKMBwVxudZQPwX4J5sIB8mJa8HpjW9vwpjsiy9oh3iWxye1KWIFZ75Ddom42 17yPiX53jkKl194ckdnOd1M/0m+wQ2qmICNn6RNkr1AbWGt5E5CYRvolQcRqJYeEgDy/8dkM 5MHy1H7AVfjx7Pma15Ovh51nPd4m/1bmhvh6cwDAVaK9RDUMvxSn1nwBa4CbqzZM5AfyaZvH nUHnxire+uglg0jSxPQxTy0LrvPewM+wHa4oBYrupm6QmYx0zjFxCNQOET54ACGmCo4bABEB AAG0Ik3DqXZlbCBHbGVuIDxnbGVuLm1ldmVsQGNyYW5zLm9yZz6JATcEEwEIACEFAlV3NsIC GwMFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AACgkQtxRLvmT1s7eCuggAlINfcaOrGf4e3T8e dLFNZL8orVQmp5Y6d7BAlxSX0nYmwkssIVqPjRdd0ZVpVy1QGKHkWpDn6zHGHqWKEYI9ylOL xlSrV7iWg6V59CovVngXVTy0Ux6czzrgNwRi6wO2R/Tv9/bh/fKn5GqM4AgwGiKVOPlIY1xX T0m4/STsili+eTNQWXpBEdQyRbRmFlCTeZYEMF/Wv8F76oIvR/Cwi6UgmG8phvBIovvlP20H QRypvxjq/RjGDy4n+Cv2kpuH/RopUohBA2k/ye9HwXgONvNhK1IrCcHoPZdku+jeJdHs9Mmf qKv0Q27P7brK/rnHOXX+k7IbANxf8aPxqX78y7kBDQRVdyShAQgAuCIAkacj0SYd0G2+5JSv L/FdOq463vZ8EMo/rXGnBqPe3lrql8m1DZqN9cyTYWlIwAQ5s/1MDwU3KEJeT733WhBbVXKp IIWo+dPd4QgY5lNJ8omQH+/tM0Tkrs3tNEddan0xz0hOOXhO8kl/p+hKWs9HqqoyPRwbYtDk BvyOSux/+m9GasGdpPnaDFMo26lgKsbYULC41T2PuMWAWuCLWjRQY8XIrEcpdkzYuvMR+fV5 jbpQUuMaCXjkeodAZRUt3j09a4TNAlXyacP+AwCeGRj4o3OheN2ONZIPnrGGc6ClmmMyEJGw S+d30xcNWwQgXK3krUw8wIP5RmUA7zlxMQARAQABiQEfBBgBCAAJBQJVdyShAhsMAAoJELcU S75k9bO3J1EH/1E+6LhQ/z3krGoeTbSjjZqF2BG4FtYm6ytU6mmkkx+17LUAb1iNF4CMQ2gn B0r7Yk6camjxWcVi6XVKflK0vUg9psP3+2ELK53kdiEOFqc8RGTEGgAD8ORQuuz8iHhTHE8X XIvNsLbqoWrGaJOZUDZsSmXSuy8CRvBkA3nR9fV6OLsN9U+UR7xOOCMMRL0cnUm8MXgu8oIT s78E4hpbW4QxstbTuE8rjWDhsPMSR4oX7oh44r+xy9eyoFDErpnRruplP2njI9j2T6wi2XI+ UdS/rcR6e/d/f+fdpTQhmqaHhIBB/SFus+2sdpVxnNNGG2NeXLE/cCwrDeXaGZVPPHs= Cc: Stefan Monnier Message-ID: <10c67553-1e80-6dea-9ef8-13486746672d@crans.org> Date: Thu, 11 Jul 2019 01:05:04 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="8TTvd0jeZnXVMzQympsmhgPyBdFq6xKZh" Subject: Re: [Caml-list] overflow checks on `int` operations Reply-To: =?UTF-8?Q?Glen_M=c3=a9vel?= X-Loop: caml-list@inria.fr X-Sequence: 17680 Errors-to: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --8TTvd0jeZnXVMzQympsmhgPyBdFq6xKZh Content-Type: multipart/mixed; boundary="9FlaVSqPW4xE0h5lRa6pqnwZlmJxR7Ft8"; protected-headers="v1" From: =?UTF-8?Q?Glen_M=c3=a9vel?= To: caml-list@inria.fr Cc: Stefan Monnier Message-ID: <10c67553-1e80-6dea-9ef8-13486746672d@crans.org> Subject: Re: [Caml-list] overflow checks on `int` operations References: In-Reply-To: --9FlaVSqPW4xE0h5lRa6pqnwZlmJxR7Ft8 Content-Type: text/plain; charset=utf-8 Content-Language: en-US-large Content-Transfer-Encoding: quoted-printable 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=E2=80=99t know whether there is a =E2=80=9Cstandard=E2=80=9D for in= tegers 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= =2E 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=E2=80=99re not indeed. For my own needs, I wrote carefully overflowin= g 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.m= li --=20 Glen M=C3=A9vel --9FlaVSqPW4xE0h5lRa6pqnwZlmJxR7Ft8-- --8TTvd0jeZnXVMzQympsmhgPyBdFq6xKZh Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEEJX9V4xhORFbdAA1utxRLvmT1s7cFAl0mbyAACgkQtxRLvmT1 s7flpwf+I5/K5kHSC5QE/RQe/P0veCOGm3YxxO9XLnmTs7yMWCJQFrSe0mYOAbrh cNTX0+w/iWlZHmmFWsibJ/mnkVxE2mYk3JD/8ZQ7cSHQxoME85N05Hri0EIogKIJ I5xCkIKc+RnNPXIY6eVdhxuIkqdwNfIF5X20Y+7TwXukZeXUx7JNM94EnC4YO/k7 7j1T5ZV/n1Fy0PnIkXxiQvAVFCQV7CAiO30WJrLyD1KLGmqD3nLxD7u2YZFr90E0 UCO9kkwag28atYyQllmoXOr8xmCOn6nMTHVOz62VhyKO0oQAx7OQpCwYjJjKwZUk x3XU0qnrMkCtAWK5mo0aDoCNXZZGJQ== =CR7R -----END PGP SIGNATURE----- --8TTvd0jeZnXVMzQympsmhgPyBdFq6xKZh--