diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2024-05-27 21:01:09 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-28 09:31:09 +0530 |
commit | 53606de6344fca63c40fde37056910b72a3c4f8d (patch) | |
tree | c2d31a7bded8ad5402ad8582d2e4c8df1a100bda /ext/ffi/lib.rs | |
parent | d99c6c1ea4f5711c3f48c5617d7224852fb294d2 (diff) |
BREAKING(ffi/unstable): always return u64 as bigint (#23981)
The mixed `number | bigint` representation was useful optimization for
pointers. Now, pointers are represented as V8 externals. As part of the
FFI stabilization effort we want to make `bigint` the only
representation for `u64` and `i64`.
BigInt representation performance is almost on par with mixed
representation with the added benefit that its less confusing and users
don't need manual checks and conversions for doing operations on the
value.
```
cpu: AMD Ryzen 5 7530U with Radeon Graphics
runtime: deno 1.43.6+92a8d09 (x86_64-unknown-linux-gnu)
file:///home/divy/gh/ffi/main.ts
benchmark time (avg) iter/s (min … max) p75 p99 p995
-------------------------------------------------------------------------- -----------------------------
nop 4.01 ns/iter 249,533,690.5 (3.97 ns … 10.8 ns) 3.97 ns 4.36 ns 9.03 ns
ret bigint 7.74 ns/iter 129,127,186.8 (7.72 ns … 10.46 ns) 7.72 ns 8.11 ns 8.82 ns
ret i32 7.81 ns/iter 128,087,100.5 (7.77 ns … 12.72 ns) 7.78 ns 8.57 ns 9.75 ns
ret bigint (add op) 15.02 ns/iter 66,588,253.2 (14.64 ns … 24.99 ns) 14.76 ns 19.13 ns 19.44 ns
ret i32 (add op) 12.02 ns/iter 83,209,131.8 (11.95 ns … 18.18 ns) 11.98 ns 13.11 ns 14.5 ns
```
Diffstat (limited to 'ext/ffi/lib.rs')
-rw-r--r-- | ext/ffi/lib.rs | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/ext/ffi/lib.rs b/ext/ffi/lib.rs index c678a10b5..4e8129240 100644 --- a/ext/ffi/lib.rs +++ b/ext/ffi/lib.rs @@ -39,9 +39,6 @@ const _: () = { assert!(size_of::<*const ()>() == 8); }; -pub(crate) const MAX_SAFE_INTEGER: isize = 9007199254740991; -pub(crate) const MIN_SAFE_INTEGER: isize = -9007199254740991; - pub const UNSTABLE_FEATURE_NAME: &str = "ffi"; fn check_unstable(state: &OpState, api_name: &str) { |