all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Paul Eggert <eggert@cs.ucla.edu>
To: Stefan Monnier <monnier@IRO.UMontreal.CA>,
	Richard Stallman <rms@gnu.org>
Cc: Tom Tromey <tom@tromey.com>, emacs-devel@gnu.org
Subject: Re: Using the GNU GMP Library for Bignums in Emacs
Date: Wed, 18 Jul 2018 03:20:40 -0700	[thread overview]
Message-ID: <765767b2-d2e5-a9a6-f724-d58ecf4847bb@cs.ucla.edu> (raw)
In-Reply-To: <jwvzhysa6ot.fsf-monnier+emacs@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 939 bytes --]

Stefan Monnier wrote:
> I recently posted a patch which makes EQ behave like `eql` attached.
> I just tried to see its impact on the ELisp compilation time
> (i.e. I did `rm **/*.elc; make`).

I tried to reproduce this on my machine, and ran into some trouble (the code had 
warnings that caused compilation to fail). Although your patch is evidently 
intended only as a quick benchmark and not as an actual change, I worry that the 
benchmark isn't realistic enough, as some usage of EQ in C code will need to 
change to Feql or equivalent. Also, the C code will need to change how hashing 
works since XHASH etc. must be consistent with eq.

Looking into this a bit more, I discovered that eql currently operates 
incorrectly on NaNs, as it's inconsistent with how hash tables work. I installed 
the attached patch into master to fix that.

I'll try to look into doing a benchmark like yours with all the above in mind.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-bug-with-eql-etc.-on-NaNs.patch --]
[-- Type: text/x-patch; name="0001-Fix-bug-with-eql-etc.-on-NaNs.patch", Size: 7709 bytes --]

From c70d22f70b77b053d01c7380122d166ecb728610 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Wed, 18 Jul 2018 03:16:54 -0700
Subject: [PATCH] Fix bug with eql etc. on NaNs

Fix a bug where eql, sxhash-eql, memql, and make-hash-table
were not consistent on NaNs.  Likewise for equal,
sxhash-equal, member, and make-hash-table.  Some of these
functions ignored NaN significands, whereas others treated
them as significant.  It's more logical to treat significands
as significant, and this typically makes eql a bit more
efficient on floats, with just one integer comparison instead
of one to three floating-point comparisons.
* doc/lispref/numbers.texi (Float Basics): Document that
NaNs are never numerically equal, but might be eql.
* src/fns.c (WORDS_PER_DOUBLE): Move to top level of this file.
(union double_and_words): Now named, and at the top level of this file.
(same_float): New function.
(Fmemql, Feql, internal_equal, cmpfn_eql): Use it, so that
the corresponding functions treat NaNs consistently.
(sxhash_float): Simplify based on above-mentioned changes.

* test/src/fns-tests.el (fns-tests-equality-nan): New test.
---
 doc/lispref/numbers.texi |  9 +++++--
 src/fns.c                | 68 +++++++++++++++++++++++++-----------------------
 test/src/fns-tests.el    | 11 ++++++++
 3 files changed, 53 insertions(+), 35 deletions(-)

diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi
index 2fed2b6..6c51b84 100644
--- a/doc/lispref/numbers.texi
+++ b/doc/lispref/numbers.texi
@@ -232,13 +232,18 @@ Float Basics
 @cindex negative infinity
 @cindex infinity
 @cindex NaN
+@findex eql
+@findex sxhash-eql
   The @acronym{IEEE} floating-point standard supports positive
 infinity and negative infinity as floating-point values.  It also
 provides for a class of values called NaN, or ``not a number'';
 numerical functions return such values in cases where there is no
 correct answer.  For example, @code{(/ 0.0 0.0)} returns a NaN@.
-Although NaN values carry a sign, for practical purposes there is no other
-significant difference between different NaN values in Emacs Lisp.
+A NaN is never numerically equal to any value, not even to itself.
+NaNs carry a sign and a significand, and non-numeric functions like
+@code{eql} and @code{sxhash-eql} treat two NaNs as equal when their
+signs and significands agree.  Significands of NaNs are
+machine-dependent and are not directly visible to Emacs Lisp.
 
 Here are read syntaxes for these special floating-point values:
 
diff --git a/src/fns.c b/src/fns.c
index c171784..10997da 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1419,6 +1419,29 @@ DEFUN ("elt", Felt, Selt, 2, 2, 0,
   return Faref (sequence, n);
 }
 
+enum { WORDS_PER_DOUBLE = (sizeof (double) / sizeof (EMACS_UINT)
+                          + (sizeof (double) % sizeof (EMACS_UINT) != 0)) };
+union double_and_words
+{
+  double val;
+  EMACS_UINT word[WORDS_PER_DOUBLE];
+};
+
+/* Return true if X and Y are the same floating-point value.
+   This looks at X's and Y's representation, since (unlike '==')
+   it returns true if X and Y are the same NaN.  */
+static bool
+same_float (Lisp_Object x, Lisp_Object y)
+{
+  union double_and_words
+    xu = { .val = XFLOAT_DATA (x) },
+    yu = { .val = XFLOAT_DATA (y) };
+  EMACS_UINT neql = 0;
+  for (int i = 0; i < WORDS_PER_DOUBLE; i++)
+    neql |= xu.word[i] ^ yu.word[i];
+  return !neql;
+}
+
 DEFUN ("member", Fmember, Smember, 2, 2, 0,
        doc: /* Return non-nil if ELT is an element of LIST.  Comparison done with `equal'.
 The value is actually the tail of LIST whose car is ELT.  */)
@@ -1457,7 +1480,7 @@ The value is actually the tail of LIST whose car is ELT.  */)
   FOR_EACH_TAIL (tail)
     {
       Lisp_Object tem = XCAR (tail);
-      if (FLOATP (tem) && equal_no_quit (elt, tem))
+      if (FLOATP (tem) && same_float (elt, tem))
 	return tail;
     }
   CHECK_LIST_END (tail, list);
@@ -2175,7 +2198,7 @@ Floating-point numbers of equal value are `eql', but they may not be `eq'.  */)
   (Lisp_Object obj1, Lisp_Object obj2)
 {
   if (FLOATP (obj1))
-    return equal_no_quit (obj1, obj2) ? Qt : Qnil;
+    return FLOATP (obj2) && same_float (obj1, obj2) ? Qt : Qnil;
   else
     return EQ (obj1, obj2) ? Qt : Qnil;
 }
@@ -2266,13 +2289,7 @@ internal_equal (Lisp_Object o1, Lisp_Object o2, enum equal_kind equal_kind,
   switch (XTYPE (o1))
     {
     case Lisp_Float:
-      {
-	double d1 = XFLOAT_DATA (o1);
-	double d2 = XFLOAT_DATA (o2);
-	/* If d is a NaN, then d != d. Two NaNs should be `equal' even
-	   though they are not =.  */
-	return d1 == d2 || (d1 != d1 && d2 != d2);
-      }
+      return same_float (o1, o2);
 
     case Lisp_Cons:
       if (equal_kind == EQUAL_NO_QUIT)
@@ -3706,24 +3723,20 @@ HASH_INDEX (struct Lisp_Hash_Table *h, ptrdiff_t idx)
   return XINT (AREF (h->index, idx));
 }
 
-/* Compare KEY1 which has hash code HASH1 and KEY2 with hash code
-   HASH2 in hash table H using `eql'.  Value is true if KEY1 and
-   KEY2 are the same.  */
+/* Compare KEY1 and KEY2 in hash table HT using `eql'.  Value is true
+   if KEY1 and KEY2 are the same.  KEY1 and KEY2 must not be eq.  */
 
 static bool
 cmpfn_eql (struct hash_table_test *ht,
 	   Lisp_Object key1,
 	   Lisp_Object key2)
 {
-  return (FLOATP (key1)
-	  && FLOATP (key2)
-	  && XFLOAT_DATA (key1) == XFLOAT_DATA (key2));
+  return FLOATP (key1) && FLOATP (key2) && same_float (key1, key2);
 }
 
 
-/* Compare KEY1 which has hash code HASH1 and KEY2 with hash code
-   HASH2 in hash table H using `equal'.  Value is true if KEY1 and
-   KEY2 are the same.  */
+/* Compare KEY1 and KEY2 in hash table HT using `equal'.  Value is
+   true if KEY1 and KEY2 are the same.  */
 
 static bool
 cmpfn_equal (struct hash_table_test *ht,
@@ -3734,9 +3747,8 @@ cmpfn_equal (struct hash_table_test *ht,
 }
 
 
-/* Compare KEY1 which has hash code HASH1, and KEY2 with hash code
-   HASH2 in hash table H using H->user_cmp_function.  Value is true
-   if KEY1 and KEY2 are the same.  */
+/* Compare KEY1 and KEY2 in hash table HT using HT->user_cmp_function.
+   Value is true if KEY1 and KEY2 are the same.  */
 
 static bool
 cmpfn_user_defined (struct hash_table_test *ht,
@@ -4328,18 +4340,8 @@ static EMACS_UINT
 sxhash_float (double val)
 {
   EMACS_UINT hash = 0;
-  enum {
-    WORDS_PER_DOUBLE = (sizeof val / sizeof hash
-			+ (sizeof val % sizeof hash != 0))
-  };
-  union {
-    double val;
-    EMACS_UINT word[WORDS_PER_DOUBLE];
-  } u;
-  int i;
-  u.val = val;
-  memset (&u.val + 1, 0, sizeof u - sizeof u.val);
-  for (i = 0; i < WORDS_PER_DOUBLE; i++)
+  union double_and_words u = { .val = val };
+  for (int i = 0; i < WORDS_PER_DOUBLE; i++)
     hash = sxhash_combine (hash, u.word[i]);
   return SXHASH_REDUCE (hash);
 }
diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el
index d9cca55..e4b9cbe 100644
--- a/test/src/fns-tests.el
+++ b/test/src/fns-tests.el
@@ -23,6 +23,17 @@
 
 (require 'cl-lib)
 
+;; Test that equality predicates work correctly on NaNs when combined
+;; with hash tables based on those predicates.  This was not the case
+;; for eql in Emacs 26.
+(ert-deftest fns-tests-equality-nan ()
+  (dolist (test (list #'eq #'eql #'equal))
+    (let* ((h (make-hash-table :test test))
+           (nan 0.0e+NaN)
+           (-nan (- nan)))
+      (puthash nan t h)
+      (should (eq (funcall test nan -nan) (gethash -nan h))))))
+
 (ert-deftest fns-tests-reverse ()
   (should-error (reverse))
   (should-error (reverse 1))
-- 
2.7.4


  reply	other threads:[~2018-07-18 10:20 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  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-24  2:54               ` 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 [this message]
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
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=765767b2-d2e5-a9a6-f724-d58ecf4847bb@cs.ucla.edu \
    --to=eggert@cs.ucla.edu \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@IRO.UMontreal.CA \
    --cc=rms@gnu.org \
    --cc=tom@tromey.com \
    /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.