This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
40
unikernel/duniverse/optint/README.md
Normal file
40
unikernel/duniverse/optint/README.md
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
Optint - Efficient integer types on 64-bit architectures
|
||||
========================================================
|
||||
|
||||
This library provides two new integer types, `Optint.t` and `Int63.t`, which
|
||||
guarantee efficient representation on 64-bit architectures and provide a
|
||||
best-effort boxed representation on 32-bit architectures.
|
||||
|
||||
## Goal
|
||||
|
||||
The standard `Int32.t` and `Int64.t` types provided by the standard library have
|
||||
the same heap-allocated representation on all architectures. This consistent
|
||||
representation has costs in both memory and run-time performance.
|
||||
|
||||
On 64-bit architectures, it's often more efficient to use the native `int`
|
||||
directly.
|
||||
This library provides types to do exactly this:
|
||||
|
||||
- `Optint.t`: an integer containing _at least_ 32 bits. On 64-bit, this is an
|
||||
immediate integer; on 32-bit, it is a boxed 32-bit value. The overflow
|
||||
behaviour is platform-dependent.
|
||||
|
||||
- `Int63.t`: an integer containing _exactly_ 63 bits. On 64-bit, this is an
|
||||
immediate integer; on 32-bit, it is a boxed 64-bit integer that is wrapped to
|
||||
provide 63-bit two's complement semantics. The two implementations are
|
||||
observationally equivalent, modulo use of `Marshal` and `Obj`.
|
||||
|
||||
In summary:
|
||||
|
||||
| Integer type | 32-bit representation | 64-bit representation | Semantics |
|
||||
| -- | -- | -- | -- |
|
||||
| `Stdlib.Int.t` | 31-bit immediate ✅ | 63-bit immediate ✅ | Always immediate |
|
||||
| `Stdlib.Nativeint.t` | 32-bit boxed ❌ | 64-bit boxed ❌ | Exactly word size |
|
||||
| `Stdlib.Int32.t` | 32-bit boxed ❌ | 32-bit boxed ❌ | Exactly 32 bits |
|
||||
| `Stdlib.Int64.t` | 64-bit boxed ❌ | 64-bit boxed ❌ | Exactly 64 bits |
|
||||
| `Optint.t` (_new_) | 32-bit boxed ❌ | 63-bit immediate ✅ | _At least_ 32 bits |
|
||||
| `Int63.t` (_new_) | 64-bit boxed ❌ | 63-bit immediate ✅ | Exactly 63 bits |
|
||||
|
||||
These new types are safe and well-tested, but their architecture-dependent
|
||||
implementation makes them unsuitable for use with the `Marshal` module. Use the
|
||||
provided encode and decode functions instead.
|
||||
Loading…
Add table
Add a link
Reference in a new issue