Proposal: shorthand syntax for initializing arbitrary-precision ("bigint") numbers?
| From: | tyson andre | Date: | Sat, 08 Aug 2020 00:50:46 +0000 |
| Subject: | Proposal: shorthand syntax for initializing arbitrary-precision ("bigint") numbers? | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-111372@lists.php.net to get a copy of this message | ||
Hi internals,
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
was a similar approach another dynamically typed language recently took to
support convenient arbitrary precision.
What are your thoughts on making
123_456_000_000_000_000_000_000n a shorthand for
gmp_init('123456000000000000000000') (or a call with equivalent results)
(similar to existing backtick string syntax is a shorthand for shell_exec())
GMP objects already overrides numeric operators. (but having number-like syntax would make code
using those more readable)
Supporting bigints as anything other than explicitly different objects in PHP's type system
seemed from a discussion thread 5 years ago to have several drawbacks - https://externals.io/message/77863 :
- Native bigints by default as a result of integer operations would cause a B.C. break for
extensions for
php user code relying on float behavior. The way that division would be handled would change, for
example.
- Decrease in performance was seen during a patch being worked on 5 years ago to automatically
convert overflowing integer operations to big integers
- Requirement to update opcache's inferences to support big integers
A prototype implementation is available at https://github.com/php/php-src/pull/5930
which goes into more details about implementation concerns, licensing of GMP, and other drawbacks of
representing them as a GMP/BigInt class instance instead of something separate from regular objects.
- Tyson