]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-45569: Change PYLONG_BITS_IN_DIGIT default to 30 (GH-30497)
authorMark Dickinson <mdickinson@enthought.com>
Fri, 14 Jan 2022 18:54:56 +0000 (18:54 +0000)
committerGitHub <noreply@github.com>
Fri, 14 Jan 2022 18:54:56 +0000 (18:54 +0000)
Doc/using/configure.rst
Doc/whatsnew/3.11.rst
Include/pyport.h
Misc/NEWS.d/next/Build/2022-01-09-11-24-54.bpo-45569.zCIENy.rst [new file with mode: 0644]
configure
configure.ac

index 771ad3cf18d97b1b4c38cfaf8f4ef52ff3197f86..f1c156c042353acc8132d3c2b4d522332ac0a274 100644 (file)
@@ -35,8 +35,7 @@ General Options
 
    Define the size in bits of Python :class:`int` digits: 15 or 30 bits.
 
-   By default, the number of bits is selected depending on ``sizeof(void*)``:
-   30 bits if ``void*`` size is 64-bit or larger, 15 bits otherwise.
+   By default, the digit size is 30.
 
    Define the ``PYLONG_BITS_IN_DIGIT`` to ``15`` or ``30``.
 
index 6a6c22c9077c996f775fa00e4fc6290b713f9f5f..96d6e26709342c0c488b19a42226f57b545682a3 100644 (file)
@@ -622,6 +622,16 @@ Build Changes
   like Pyodide.
   (Contributed by Christian Heimes and Ethan Smith in :issue:`40280`.)
 
+* CPython will now use 30-bit digits by default for the Python :class:`int`
+  implementation. Previously, the default was to use 30-bit digits on platforms
+  with ``SIZEOF_VOID_P >= 8``, and 15-bit digits otherwise. It's still possible
+  to explicitly request use of 15-bit digits via either the
+  ``--enable-big-digits`` option to the configure script or (for Windows) the
+  ``PYLONG_BITS_IN_DIGIT`` variable in ``PC/pyconfig.h``, but this option may
+  be removed at some point in the future. (Contributed by Mark Dickinson in
+  :issue:`45569`.)
+
+
 C API Changes
 =============
 
index 81b1bde841e08308cb4f780e52bf28b0144691be..d27b3dde11659b267d6b50532b7bfb016a982f5a 100644 (file)
@@ -85,20 +85,12 @@ Used in:  Py_SAFE_DOWNCAST
 #define PY_INT32_T int32_t
 #define PY_INT64_T int64_t
 
-/* If PYLONG_BITS_IN_DIGIT is not defined then we'll use 30-bit digits if all
-   the necessary integer types are available, and we're on a 64-bit platform
-   (as determined by SIZEOF_VOID_P); otherwise we use 15-bit digits.
-
-   From pyodide: WASM has 32 bit pointers but has native 64 bit arithmetic
-   so it is more efficient to use 30 bit digits.
+/* PYLONG_BITS_IN_DIGIT describes the number of bits per "digit" (limb) in the
+ * PyLongObject implementation (longintrepr.h). It's currently either 30 or 15,
+ * defaulting to 30. The 15-bit digit option may be removed in the future.
  */
-
 #ifndef PYLONG_BITS_IN_DIGIT
-#if SIZEOF_VOID_P >= 8 || defined(__wasm__)
-#  define PYLONG_BITS_IN_DIGIT 30
-#else
-#  define PYLONG_BITS_IN_DIGIT 15
-#endif
+#define PYLONG_BITS_IN_DIGIT 30
 #endif
 
 /* uintptr_t is the C9X name for an unsigned integral type such that a
diff --git a/Misc/NEWS.d/next/Build/2022-01-09-11-24-54.bpo-45569.zCIENy.rst b/Misc/NEWS.d/next/Build/2022-01-09-11-24-54.bpo-45569.zCIENy.rst
new file mode 100644 (file)
index 0000000..69716cd
--- /dev/null
@@ -0,0 +1,5 @@
+The build now defaults to using 30-bit digits for Python integers. Previously
+either 15-bit or 30-bit digits would be selected, depending on the platform.
+15-bit digits may still be selected using the ``--enable-big-digits=15`` option
+to the ``configure`` script, or by defining ``PYLONG_BITS_IN_DIGIT`` in
+``pyconfig.h``.
index b5a6e0c51bd524ce306bf340704dcd7bf6377825..1dee645c387eb669c59a7fe7c49892eeb62d2426 100755 (executable)
--- a/configure
+++ b/configure
@@ -1730,7 +1730,7 @@ Optional Features:
                           Doc/library/socket.rst (default is yes if supported)
   --enable-big-digits[=15|30]
                           use big digits (30 or 15 bits) for Python longs
-                          (default is system-dependent)]
+                          (default is 30)]
   --disable-test-modules  don't build nor install test modules
 
 Optional Packages:
index 300d793ad7dfa4a6ff2d3650bb108836e2c6fb31..7b084a264d411e1efe26f4ff02a907392bbdf5fc 100644 (file)
@@ -5084,7 +5084,7 @@ AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTL
 # determine what size digit to use for Python's longs
 AC_MSG_CHECKING([digit size for Python's longs])
 AC_ARG_ENABLE(big-digits,
-AS_HELP_STRING([--enable-big-digits@<:@=15|30@:>@],[use big digits (30 or 15 bits) for Python longs (default is system-dependent)]]),
+AS_HELP_STRING([--enable-big-digits@<:@=15|30@:>@],[use big digits (30 or 15 bits) for Python longs (default is 30)]]),
 [case $enable_big_digits in
 yes)
   enable_big_digits=30 ;;