From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: Using the GNU GMP Library for Bignums in Emacs Date: Thu, 3 May 2018 11:26:31 -0700 Organization: UCLA Computer Science Department Message-ID: <85ec3668-6b66-e47a-c10a-ffb3fc8be5d5@cs.ucla.edu> References: <29f933ac-a6bf-8742-66a7-0a9d6d3e5a88@disroot.org> <83bmecy6fx.fsf@gnu.org> <0d3175d8-d996-651e-b221-71978bde3a65@cs.ucla.edu> <42cbc5ab-2f02-4aa5-4b19-7b2357f91692@cs.ucla.edu> <1f58acbf-a7d8-bf4e-3d0e-a285515a22e6@cs.ucla.edu> <2549728d-8e40-b46a-009e-07cef0c24208@cs.ucla.edu> <63fdd138-77d3-89b9-aa69-490300f588a9@cs.ucla.edu> <838t90pr2l.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1525371987 11727 195.159.176.226 (3 May 2018 18:26:27 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 3 May 2018 18:26:27 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 Cc: rms@gnu.org, emacs-devel@gnu.org To: Eli Zaretskii , Helmut Eller Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu May 03 20:26:23 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fEIvu-0002xd-TE for ged-emacs-devel@m.gmane.org; Thu, 03 May 2018 20:26:23 +0200 Original-Received: from localhost ([::1]:58221 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fEIy1-0000xS-Un for ged-emacs-devel@m.gmane.org; Thu, 03 May 2018 14:28:33 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55756) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fEIwE-00081W-Dl for emacs-devel@gnu.org; Thu, 03 May 2018 14:26:43 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fEIwD-00032D-GE for emacs-devel@gnu.org; Thu, 03 May 2018 14:26:42 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:57182) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fEIw7-0002rc-L5; Thu, 03 May 2018 14:26:35 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 066AE1601A2; Thu, 3 May 2018 11:26:33 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id bQElykOn-8Q6; Thu, 3 May 2018 11:26:32 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 42E991601B1; Thu, 3 May 2018 11:26:32 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id J9vwIvBgnkJd; Thu, 3 May 2018 11:26:32 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 26D7E1601A2; Thu, 3 May 2018 11:26:32 -0700 (PDT) In-Reply-To: <838t90pr2l.fsf@gnu.org> Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 131.179.128.68 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:225053 Archived-At: On 05/03/2018 10:49 AM, Eli Zaretskii wrote: >> (format "%016x" (lognot 257)) => "3ffffffffffffefe" >> >> but the 16-hex-digit string should be "fffffffffffffefe". > But a 16-hex-digit fffffffffffffefe is not a fixnum, right? Exactly right. If we have bignums, this will be straightforward; it'll work like Common Lisp, Python, etc. and it'll be obvious what to do. The problems mentioned in this thread mainly come from the fact that Emacs does not have bignums now and that some code may depend on fixnum overflow wrapping around. Here's another way to think about it. (format "%016x" (lognot 257)) is already nonportable, as it yields "000000003ffffefe" on 32-bit platforms and "3ffffffffffffefe" on 64-bit platforms. Once we add bignums, the same expression should yield "-000000000000102" on all platforms. Code intended to be portable between old and new regimes already needs to worry about nonportability in this area, and it shouldn't be hard to adjust (if it needs adjusting at all). Code intended to run only under the new regime will be able to safely assume the expression yields "-000000000000102" on all platforms, regardless of whether the underlying platform is 32- or 64- or some other number of bits, and in the long run this will reduce the number of portability issues in Elisp code.