all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Pip Cet <pipcet@gmail.com>
To: andrewjmoreton@gmail.com
Cc: emacs-devel@gnu.org
Subject: Re: Making 'eq' == 'eql' in bignum branch
Date: Mon, 20 Aug 2018 19:50:00 +0000	[thread overview]
Message-ID: <CAOqdjBcjSe3SN=q6Q3eda0LGfzTgckBnRH00hUu=txrXwMVuFw@mail.gmail.com> (raw)
In-Reply-To: <vz1in45at31.fsf@gmail.com>

On Mon, Aug 20, 2018 at 4:43 PM Andy Moreton <andrewjmoreton@gmail.com> wrote:
> On Mon 20 Aug 2018, Paul Eggert wrote:
>
> > Andy Moreton wrote:
> >
> >> There will always be a performance diffrence between fixnum and bignum
> >> values, and it may be useful for performance tuning to have a simple way
> >> to discover where that boundary lies.
> >
> > Performance nerds can use 'most-positive-fixnum' and 'most-negative-fixnum'
> > for that sort of thing. These constants have been there for some time and are
> > not going away. My objection is to 'bignump' and 'fixnump', which are no more
> > necessary as primitives than 'negativep' would be.
>
> Pip Cet was advocating removal of most-positive-fixnum, and that is what
> I was objecting to as being too severe. We do not need negativep as we
> already have other prmitives for testing that property.

I'm sorry for the sloppy wording. `most-positive-fixnum' should stay:
it's an important implementation detail. All the references to it in
lisp/, though, look to me like they should be removed.

The references in test/ should stay, for example, and I think a good
case can be made that the fixnum range should be included in Emacs bug
reports, which would be a legitimate use in the lisp/ directory.

> >> These are used in the tests to ensure that implementation is correct,
> >> and that values in fixnum range are always represented as fixnums, not
> >> bignums. How do you propose to test that without these predicates ?
> >
> > Tests can use 'most-positive-fixnum' and 'most-negative-fixnum', constants
> > that tests need to use anyway in order to generate values like (1+
> > most-positive-fixnum). So they can survive quite well without 'bignump' and
> > 'fixnump' as primitives.
>
> You have avoided the question.
>
> The current codebase assumes that lisp bignum objects only exist for
> values outside fixnum range. Without fixnump how can tests check that
> values within fixnum range actually have a fixnum representation ? How
> can test check that no bignum object is created for a fixnum value ?

I think keeping a Lisp function around for the sole purpose of testing
C code from Lisp is wrong. The right thing to do in this case is to
test the C code from C; I believe GCC does so extensively, and it
would be easy enough to add a test function that eassert()s that
FIXNUMP(Fsub1(Fadd1(MOST_POSITIVE_FIXNUM))), for example.

Again, I think important implementation details, like what a good
range for fast integer arithmetic is ([most-negative-fixnum,
most-positive-fixnum]) and how floats are encoded and whether IEEE
rules are being followed (IEEE_FLOATING_POINT), should be exposed to
Lisp. (For example, I'm playing around with big rational numbers, and
one possible implementation is for them to replace floats, but that
almost naturally requires a ratio-to-nearby-simple-ratio function to
avoid building up huge representations; whether to use such a function
and what it does would be an implementation detail, but one that code
might want to optimize for...)

Does bignump serve a purpose other than testing C code? My impression
is that it doesn't in the current implementation, and the symbol
should be left unbound, but considered reserved. While there is
hypothetical code that wants to know whether a number is currently
encoded as a bignum (I'm thinking of benchmarking code that's run in a
future Emacs with contrarily bignum-encoded fixnum-range integers), I
think it's exotic enough that it can just test (if (fboundp 'fixnump)
(fixnump x) (<= most-negative-fixnum x most-positive-fixnum)). Leaving
bignump in will lead to people thinking it's synonymous to "is this
number outside the fixnum range", and such code will then break if
it's suddenly possible for (bignump 0) to be false.

Perhaps a good analogy is that (bignump x) is on a level with "what C
address is x stored at": it's a question only very curious Lisp
programs would ask, and the answer is subject to change and dangerous
to rely on.



  parent reply	other threads:[~2018-08-20 19:50 UTC|newest]

Thread overview: 281+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-21 14:15 Using the GNU GMP Library for Bignums in Emacs Siraphob (Ben) Phipathananunth
2018-04-21 14:34 ` Eli Zaretskii
2018-04-21 15:01   ` Siraphob (Ben) Phipathananunth
2018-04-21 15:23     ` Paul Eggert
2018-04-21 15:36       ` Eli Zaretskii
2018-04-21 15:40       ` Siraphob (Ben) Phipathananunth
2018-04-21 15:54         ` Eli Zaretskii
2018-04-21 16:08         ` Paul Eggert
2018-04-26  3:17           ` Tom Tromey
2018-04-26  3:33             ` Stefan Monnier
2018-04-27 15:56               ` Richard Stallman
2018-04-27 16:08                 ` Stefan Monnier
2018-04-21 22:42         ` Richard Stallman
2018-04-22  2:48           ` dancol
2018-04-22 13:00             ` Philipp Stephani
2018-04-22 17:43               ` Paul Eggert
2018-04-22 18:04                 ` Daniel Colascione
2018-04-22 18:34                   ` Clément Pit-Claudel
2018-04-23  3:39               ` Richard Stallman
2018-04-22  8:00           ` Siraphob (Ben) Phipathananunth
2018-04-22  9:06             ` Paul Eggert
2018-04-23  5:19               ` Helmut Eller
2018-04-23  8:39                 ` Andreas Schwab
2018-04-23 14:36                   ` Paul Eggert
2018-04-23 19:22                     ` Helmut Eller
2018-04-23 20:26                       ` Paul Eggert
2018-04-23  3:36             ` Richard Stallman
2018-04-22 12:43       ` Helmut Eller
2018-04-22 17:47         ` Paul Eggert
2018-04-23  3:39           ` Richard Stallman
2018-04-23  4:41             ` Paul Eggert
2018-04-24  2:54               ` Richard Stallman
2018-04-24  2:54               ` Richard Stallman
2018-04-24  4:35                 ` Paul Eggert
2018-04-24  5:45                   ` Helmut Eller
2018-06-03 23:44                     ` Jefferson Carpenter
2018-04-25  1:05                   ` Richard Stallman
2018-04-25  1:19                     ` Paul Eggert
2018-04-25 22:40                       ` Richard Stallman
2018-04-25 23:29                         ` Paul Eggert
2018-04-30  3:07                           ` Richard Stallman
2018-04-30  5:00                             ` Michael Welsh Duggan
2018-04-30 12:34                               ` Stefan Monnier
2018-05-01  3:01                               ` Richard Stallman
2018-04-30  7:04                             ` Paul Eggert
2018-05-01  3:01                               ` Richard Stallman
2018-05-01 21:45                                 ` Paul Eggert
2018-05-03  3:34                                   ` Richard Stallman
2018-05-03  5:53                                     ` Paul Eggert
2018-05-03  6:26                                       ` Helmut Eller
2018-05-03 17:49                                         ` Eli Zaretskii
2018-05-03 18:26                                           ` Paul Eggert
2018-05-04  4:26                                             ` Richard Stallman
2018-05-05  5:03                                               ` Ken Raeburn
2018-05-06  3:12                                                 ` Richard Stallman
2018-05-07 17:24                                                   ` Ken Raeburn
2018-05-08  1:55                                                     ` Richard Stallman
2018-05-07 18:40                                               ` Andreas Schwab
2018-05-03 18:51                                           ` Helmut Eller
     [not found]                                             ` <83sh78o6af.fsf@gnu.org>
2018-05-03 20:30                                               ` Helmut Eller
2018-05-03 21:48                                                 ` Paul Eggert
2018-05-04  4:22                                       ` Richard Stallman
2018-04-23  3:03         ` Stefan Monnier
2018-07-05 21:29           ` Tom Tromey
2018-07-05 21:53             ` John Wiegley
2018-07-06 20:43             ` Tom Tromey
2018-07-06 21:00             ` Paul Eggert
2018-07-07  4:27               ` Tom Tromey
2018-07-07  4:53                 ` Paul Eggert
2018-07-07  6:20                   ` Tom Tromey
2018-07-07  6:38                     ` Paul Eggert
2018-07-09  5:37                       ` Tom Tromey
2018-07-09 16:22                         ` Paul Eggert
2018-07-09 22:56                           ` Tom Tromey
2018-07-09 23:02                             ` Paul Eggert
2018-07-09 23:13                               ` Tom Tromey
2018-07-10  4:01                             ` Tom Tromey
2018-07-10 13:46                             ` Tom Tromey
2018-07-08 15:59                   ` Tom Tromey
2018-07-09  5:43                     ` Tom Tromey
2018-07-10  4:10                 ` Stefan Monnier
2018-07-07 23:43               ` Richard Stallman
2018-07-08  4:58                 ` Paul Eggert
2018-07-08 22:55                   ` Richard Stallman
2018-07-08  5:01                 ` Tom Tromey
2018-07-08 22:55                   ` Richard Stallman
2018-07-09  5:39                     ` Tom Tromey
2018-07-09 20:15               ` Stefan Monnier
2018-07-09 23:25                 ` Paul Eggert
2018-07-10  3:41                   ` Stefan Monnier
2018-07-10  5:32                     ` Helmut Eller
2018-07-10 13:54                       ` Stefan Monnier
2018-07-10 16:01                     ` Paul Eggert
2018-07-10 16:48                       ` Helmut Eller
2018-07-10 17:45                         ` Paul Eggert
2018-07-10 19:14                           ` Helmut Eller
2018-07-11  1:31                             ` Stefan Monnier
2018-07-11  5:59                               ` Helmut Eller
2018-07-11 14:23                                 ` Stefan Monnier
2018-07-11  2:04                             ` Tom Tromey
2018-07-11  2:36                               ` Paul Eggert
2018-07-10 20:33                       ` Stefan Monnier
2018-07-11  1:52                         ` Tom Tromey
2018-07-11  2:35                           ` Paul Eggert
2018-07-11  3:16                             ` Stefan Monnier
2018-07-11  3:30                               ` Paul Eggert
2018-07-11  3:42                                 ` Stefan Monnier
2018-07-11 22:48                           ` Richard Stallman
2018-07-12  4:51                             ` Tom Tromey
2018-07-12 23:35                               ` Richard Stallman
2018-07-15 15:02                                 ` Stefan Monnier
2018-07-18 10:20                                   ` Paul Eggert
2018-07-18 13:17                                     ` Stefan Monnier
2018-07-27 21:14                                       ` Making 'eq' == 'eql' in bignum branch Paul Eggert
2018-07-28 14:26                                         ` Stefan Monnier
2018-07-29  3:34                                           ` Paul Eggert
2018-07-29  4:09                                             ` Stefan Monnier
2018-07-29 14:35                                             ` Eli Zaretskii
2018-07-30 17:07                                               ` Stefan Monnier
2018-07-30 18:49                                                 ` Eli Zaretskii
2018-07-30 20:10                                                   ` Stefan Monnier
2018-07-30 21:58                                                   ` Paul Eggert
2018-07-31  2:38                                                     ` Eli Zaretskii
2018-07-31  7:10                                                       ` Paul Eggert
2018-07-31 16:12                                                         ` Eli Zaretskii
2018-07-31 22:44                                                           ` Paul Eggert
2018-08-01  5:51                                                             ` Eli Zaretskii
2018-08-01  6:43                                                               ` Paul Eggert
2018-08-01  8:53                                                                 ` Eli Zaretskii
2018-08-03  7:40                                                                   ` Paul Eggert
2018-08-03  7:55                                                                     ` Eli Zaretskii
2018-08-10 11:12                                                                     ` Pip Cet
2018-08-10 15:15                                                                       ` Stefan Monnier
2018-08-10 15:43                                                                         ` Pip Cet
2018-08-10 15:55                                                                           ` Stefan Monnier
2018-08-10 16:52                                                                           ` John Yates
2018-08-10 19:45                                                                             ` Eli Zaretskii
2018-08-10 20:48                                                                       ` Paul Eggert
2018-08-10  7:05                                                             ` Elias Mårtenson
2018-08-10  8:02                                                               ` Paul Eggert
     [not found]                                                     ` <<83d0v4p1si.fsf@gnu.org>
2018-07-31 15:08                                                       ` Drew Adams
2018-07-31 16:24                                                         ` Eli Zaretskii
2018-07-31 22:21                                                         ` Paul Eggert
2018-08-20  0:04                                             ` Stefan Monnier
2018-08-20  1:33                                               ` Paul Eggert
2018-08-20 15:20                                                 ` Stefan Monnier
2018-08-20  6:35                                               ` Pip Cet
2018-08-20  7:05                                                 ` Paul Eggert
2018-08-20  7:19                                                   ` Pip Cet
2018-08-20  7:27                                                     ` Paul Eggert
2018-08-20  8:49                                                       ` Andy Moreton
2018-08-20 16:03                                                         ` Paul Eggert
2018-08-20 16:41                                                           ` Andy Moreton
2018-08-20 16:51                                                             ` Paul Eggert
2018-08-20 16:58                                                               ` Andy Moreton
2018-08-20 19:50                                                             ` Pip Cet [this message]
2018-08-20 21:54                                                               ` Andy Moreton
2018-08-21  3:38                                                               ` Richard Stallman
2018-08-20 17:23                                                           ` Eli Zaretskii
2018-08-20 17:35                                                             ` Paul Eggert
2018-08-20 15:13                                                       ` Eli Zaretskii
2018-08-20 15:26                                                         ` Stefan Monnier
2018-08-20 16:19                                                           ` Eli Zaretskii
2018-08-21 15:01                                                           ` Robert Pluim
2018-08-21 19:09                                                             ` Robert Pluim
2018-08-21 19:35                                                               ` Paul Eggert
2018-08-22  8:26                                                                 ` Lars Ingebrigtsen
2018-08-22 13:22                                                                   ` Herring, Davis
2018-08-22 13:28                                                                     ` Lars Ingebrigtsen
2018-08-22 13:55                                                                     ` Paul Eggert
2018-08-22 20:01                                                             ` Stefan Monnier
2018-08-23  8:13                                                               ` Robert Pluim
2018-08-23 13:45                                                                 ` Eli Zaretskii
2018-08-23 14:48                                                                   ` Robert Pluim
2018-08-23 18:43                                                                 ` Stefan Monnier
2018-08-24  9:51                                                                   ` Robert Pluim
2018-08-25 17:59                                                                     ` Stefan Monnier
2018-08-20 16:01                                                         ` Paul Eggert
2018-08-20 16:26                                                           ` Eli Zaretskii
2018-08-21  3:37                                                       ` Richard Stallman
2018-08-20 15:12                                                     ` Eli Zaretskii
2018-08-20 15:26                                                       ` Lars Ingebrigtsen
2018-08-20 16:18                                                         ` Eli Zaretskii
2018-08-22 19:59                                                           ` Stefan Monnier
2018-08-21  3:38                                                         ` Richard Stallman
2018-08-25 23:27                                                           ` Paul Eggert
2018-08-26 12:45                                                             ` Tramp and fixnum (was: Making 'eq' == 'eql' in bignum branch) Michael Albinus
2018-08-26 15:34                                                               ` Paul Eggert
2018-08-26 16:06                                                                 ` Eli Zaretskii
2018-08-26 16:44                                                                   ` Tramp and fixnum Michael Albinus
2018-08-28  4:47                                                                   ` Tramp and fixnum (was: Making 'eq' == 'eql' in bignum branch) Paul Eggert
2018-08-26 16:49                                                                 ` Tramp and fixnum Michael Albinus
2018-08-28  4:48                                                                   ` Paul Eggert
2018-08-28 11:50                                                                     ` Michael Albinus
2018-08-28 14:33                                                                       ` Michael Albinus
2018-08-28 15:18                                                                         ` Paul Eggert
2018-08-29  8:09                                                                           ` Michael Albinus
2018-08-26 16:34                                                             ` Making 'eq' == 'eql' in bignum branch Tom Tromey
2018-08-26 16:59                                                               ` Stefan Monnier
2018-08-26 20:19                                                             ` Alan Mackenzie
2018-08-26 20:31                                                               ` Stefan Monnier
2018-08-27  2:31                                                               ` Eli Zaretskii
2018-08-27  4:45                                                                 ` Stefan Monnier
2018-08-27  5:10                                                                   ` Paul Eggert
2018-08-27 14:59                                                                   ` Eli Zaretskii
2018-08-27 15:18                                                                     ` Stefan Monnier
2018-08-27 15:37                                                                       ` Eli Zaretskii
2018-08-27 15:47                                                                         ` Stefan Monnier
2018-08-27 18:57                                                                           ` Paul Eggert
2018-08-26 20:45                                                             ` Richard Stallman
2018-08-26 22:10                                                               ` Clément Pit-Claudel
2018-08-27  0:23                                                                 ` Paul Eggert
2018-08-27 22:50                                                                 ` Richard Stallman
2018-08-28  1:44                                                                   ` Paul Eggert
2018-08-28 14:12                                                                   ` Tom Tromey
2018-08-28 21:30                                                                     ` Richard Stallman
2018-08-28 22:03                                                                       ` Clément Pit-Claudel
2018-08-29 22:10                                                                         ` Richard Stallman
2018-08-28 18:03                                                                   ` Clément Pit-Claudel
2018-08-29  3:53                                                                     ` Stefan Monnier
2018-08-29 18:49                                                                       ` Clément Pit-Claudel
2018-08-28  1:33                                                                 ` Lars Ingebrigtsen
2018-08-28  2:25                                                                   ` Pip Cet
2018-08-28  3:45                                                                     ` Paul Eggert
2018-08-28  7:34                                                                     ` Ken Raeburn
2018-08-28  9:11                                                                       ` Helmut Eller
2018-08-28 12:15                                                                       ` Stefan Monnier
2018-08-28 18:00                                                                         ` Clément Pit-Claudel
2018-08-28 22:57                                                                           ` Pip Cet
2018-08-29  3:42                                                                             ` Herring, Davis
2018-08-29  5:40                                                                               ` Helmut Eller
2018-08-29 13:15                                                                               ` Pip Cet
2018-08-31 19:59                                                                               ` Alan Mackenzie
2018-08-31 20:30                                                                                 ` Clément Pit-Claudel
2018-08-31 21:58                                                                                   ` Alan Mackenzie
2018-09-01  1:26                                                                                   ` Herring, Davis
2018-08-31 21:15                                                                                 ` Stefan Monnier
2018-09-01  1:05                                                                                 ` Herring, Davis
2018-09-02 10:57                                                                                   ` Alan Mackenzie
2018-09-04  6:14                                                                                     ` Herring, Davis
2018-09-01  4:47                                                                                 ` Clément Pit-Claudel
2018-08-29  3:22                                                                           ` Elias Mårtenson
2018-08-29 18:56                                                                             ` Clément Pit-Claudel
2018-08-29 19:30                                                                               ` Stefan Monnier
2018-08-31  0:09                                                                                 ` Stefan Monnier
2018-09-01  2:32                                                                                   ` Richard Stallman
2018-08-31 16:41                                                                                 ` Paul Eggert
2018-08-28 21:25                                                                     ` Richard Stallman
2018-08-30 19:13                                                                 ` Johan Bockgård
2018-08-30 21:14                                                                   ` Clément Pit-Claudel
2018-08-30 21:35                                                                     ` Tom Tromey
2018-08-30 21:56                                                                       ` Clément Pit-Claudel
2018-08-20 15:37                                                       ` Stefan Monnier
2018-08-20 16:23                                                         ` Eli Zaretskii
2018-08-20 16:12                                                       ` Paul Eggert
2018-08-20 17:21                                                         ` Helmut Eller
2018-08-20 14:02                                                 ` Stefan Monnier
2018-07-18 15:55                                     ` Using the GNU GMP Library for Bignums in Emacs Eli Zaretskii
2018-07-18 21:42                                       ` Paul Eggert
2018-07-22 12:06                                     ` Ken Raeburn
2018-07-22 16:44                                       ` Paul Eggert
2018-08-01  7:57                                         ` Paul Eggert
2018-08-01 11:59                                           ` Eli Zaretskii
2018-08-02  2:06                                             ` Paul Eggert
2018-08-02 13:49                                               ` Eli Zaretskii
2018-07-22 19:57                                       ` Achim Gratz
2018-04-21 16:46 ` Markus Triska
2018-04-21 17:09   ` Eli Zaretskii
2018-04-21 17:27     ` Markus Triska
2018-04-21 18:37   ` Paul Eggert
2018-04-21 22:42     ` Richard Stallman
2018-04-22  2:43       ` Eli Zaretskii
2018-04-23  3:34         ` Richard Stallman
2018-04-23  4:21           ` Paul Eggert
2018-04-23 13:13             ` Stefan Monnier
2018-04-24  2:54             ` Richard Stallman
2018-04-24  4:34               ` Paul Eggert
2018-04-25  1:05                 ` Richard Stallman
2018-04-23 15:18           ` Eli Zaretskii
2018-04-24 18:56 ` Emanuele Santoro
2018-04-26 15:52 ` Glenn Morris

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAOqdjBcjSe3SN=q6Q3eda0LGfzTgckBnRH00hUu=txrXwMVuFw@mail.gmail.com' \
    --to=pipcet@gmail.com \
    --cc=andrewjmoreton@gmail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.