From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: [PATCH 2/2] Add module functions to convert from and to big integers. Date: Tue, 23 Apr 2019 08:48:06 -0700 Organization: UCLA Computer Science Department Message-ID: References: <20190423131742.65814-1-phst@google.com> <20190423131742.65814-2-phst@google.com> <102dc3dc-554c-a55e-ae7c-cc7357ee60f5@cs.ucla.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="150771"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Cc: Philipp Stephani , Emacs developers To: Philipp Stephani Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Apr 23 17:48:26 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hIxej-000d4t-AD for ged-emacs-devel@m.gmane.org; Tue, 23 Apr 2019 17:48:25 +0200 Original-Received: from localhost ([127.0.0.1]:55681 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hIxei-0008Id-2s for ged-emacs-devel@m.gmane.org; Tue, 23 Apr 2019 11:48:24 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:38180) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hIxeV-0008Gx-3V for emacs-devel@gnu.org; Tue, 23 Apr 2019 11:48:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hIxeU-00037d-1y for emacs-devel@gnu.org; Tue, 23 Apr 2019 11:48:11 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:37620) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hIxeT-00034t-Ps for emacs-devel@gnu.org; Tue, 23 Apr 2019 11:48:09 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 15CB0161842; Tue, 23 Apr 2019 08:48:08 -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 qfXcpqiKLQOM; Tue, 23 Apr 2019 08:48:07 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 37BEE161843; Tue, 23 Apr 2019 08:48:07 -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 bzYv0b9XHEGs; Tue, 23 Apr 2019 08:48:07 -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 1B0E416183C; Tue, 23 Apr 2019 08:48:07 -0700 (PDT) Openpgp: preference=signencrypt Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= xsFNBEyAcmQBEADAAyH2xoTu7ppG5D3a8FMZEon74dCvc4+q1XA2J2tBy2pwaTqfhpxxdGA9 Jj50UJ3PD4bSUEgN8tLZ0san47l5XTAFLi2456ciSl5m8sKaHlGdt9XmAAtmXqeZVIYX/UFS 96fDzf4xhEmm/y7LbYEPQdUdxu47xA5KhTYp5bltF3WYDz1Ygd7gx07Auwp7iw7eNvnoDTAl KAl8KYDZzbDNCQGEbpY3efZIvPdeI+FWQN4W+kghy+P6au6PrIIhYraeua7XDdb2LS1en3Ss mE3QjqfRqI/A2ue8JMwsvXe/WK38Ezs6x74iTaqI3AFH6ilAhDqpMnd/msSESNFt76DiO1ZK QMr9amVPknjfPmJISqdhgB1DlEdw34sROf6V8mZw0xfqT6PKE46LcFefzs0kbg4GORf8vjG2 Sf1tk5eU8MBiyN/bZ03bKNjNYMpODDQQwuP84kYLkX2wBxxMAhBxwbDVZudzxDZJ1C2VXujC OJVxq2kljBM9ETYuUGqd75AW2LXrLw6+MuIsHFAYAgRr7+KcwDgBAfwhPBYX34nSSiHlmLC+ KaHLeCLF5ZI2vKm3HEeCTtlOg7xZEONgwzL+fdKo+D6SoC8RRxJKs8a3sVfI4t6CnrQzvJbB n6gxdgCu5i29J1QCYrCYvql2UyFPAK+do99/1jOXT4m2836j1wARAQABzSBQYXVsIEVnZ2Vy dCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PsLBfgQTAQIAKAUCTIByZAIbAwUJEswDAAYLCQgHAwIG FQgCCQoLBBYCAwECH In-Reply-To: Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x 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:235826 Archived-At: On 4/23/19 8:12 AM, Philipp Stephani wrote: > I considered using GMP. However, it has quite a few downsides: > - It would require making emacs-module.h dependent on GMP, even for > users that don't use big integers. Right now it only depends on > standard C, and I'd like to keep it that way. > - It's unclear how well GMP is supported in other languages. mpz_t is > a weird and unusual type, and other languages might not support it > well in their C interface. > - Other languages tend to have their own bigint support, so I don't > think the advantages of using GMP directly are that big. All true, though Emacs requires GMP anyway (one way or another) and it's typically faster than the non-GMP approaches used in Python (and I assume elsewhere). Some of this depends on the importance of performance and convenience when communicating between Emacs Lisp and GMP-using modules. If these are unimportant then the current approach is OK. However, I'm thinking that at least some users will view them as being important. Could emacs-module.h expose to the user a GMP-style interface only if the macro __GNU_MP_VERSION is defined? (Or we can choose our own macro name if we don't want to require the user to include gmp.h before emacs-module.h.) That way, users that don't use big integers won't need to worry about GMP at all. It might also be good (independently of having a GMP-style interface) to expose just mp_limb_t to module code - we could give it another name and put it into emacs-module.h as "typedef XXX bignum_limb_t;" where XXX is either unsigned int, unsigned long int, or unsigned long long int, as computed by 'configure'. This could avoid much of the overhead of converting between GMP's representation and the unsigned char representation.