ares/rust/ibig
Edward Amsden bd27200ef3
NockStack: explicitly catch OOM (#283)
* Dropping sword guard

alloc_would_oom, guarding alloc now

stack push_east/push_west

Fixed cue_pill benchmark

frame_push, preserve, purging unused Result warnings

Test cleanup, tests for stack push and frame push

slot_pointer and alloc in previous frame, not working correctly yet

Slot pointer and slots available checks

test_prev_alloc seems to be fixed now

Updating TODO: comments

Fix stash push in PC

interpreter: convert AllocationError to NonDeterministic(Mote::Meme, _)

delete serf and PMA

Use with_frame() instead of frame_push()/frame_pop() everywhere except interpret()

Fix AllocPreviousFrame case of OOM check and add FlipTopFrame case

Co-authored-by: Edward Amsden <edward@blackriversoft.com>

* sundry fixes to alloc_would_oom_ and nounlist roundtrips

* proper direction in prev_alloc oom check

* delete guard.rs

---------

Co-authored-by: Chris Allen <cma@bitemyapp.com>
2024-11-21 16:53:05 -06:00
..
benches Nounable, Cold state (#276) 2024-10-17 13:51:09 -05:00
dev-tools Ares -> Sword (#12) 2024-08-22 10:46:38 -05:00
examples Ares -> Sword (#12) 2024-08-22 10:46:38 -05:00
src NockStack: explicitly catch OOM (#283) 2024-11-21 16:53:05 -06:00
tests Nounable, Cold state (#276) 2024-10-17 13:51:09 -05:00
.gitignore Ares -> Sword (#12) 2024-08-22 10:46:38 -05:00
Cargo.toml Cue: don't panic! (#262) 2024-10-04 17:17:06 -05:00
CHANGELOG.md Ares -> Sword (#12) 2024-08-22 10:46:38 -05:00
generate_coverage.sh Ares -> Sword (#12) 2024-08-22 10:46:38 -05:00
LICENSE-APACHE Ares -> Sword (#12) 2024-08-22 10:46:38 -05:00
LICENSE-MIT Ares -> Sword (#12) 2024-08-22 10:46:38 -05:00
README.md Ares -> Sword (#12) 2024-08-22 10:46:38 -05:00

This fork

This modifies ibig to accept a custom allocator for some operations. Specifically, any function which ends in _stack will never allocate except by calling the passed-in allocator with trait Stack. This allocator is assumed to not require deallocation, so we leak everything we allocate in that way.

Further, we leak all allocations of multi-word UBigs, even those created by non-_stack functions. This means that this repo must be used exclusively with _stack functions (or others that you know do not allocate). To allow easier integration of future upstream changes, we do not modify existing functions where possible, even though they are no longer safe to use.

It is recommended to use assert-no-alloc to verify that no allocations happen.

ibig

crate docs rustc 1.49+ tests

A big integer library with good performance.

The library implements efficient large integer arithmetic in pure Rust.

The two integer types are UBig (for unsigned integers) and IBig (for signed integers).

Modular arithmetic is supported by the module modular.

Examples

use ibig::{ibig, modular::ModuloRing, ubig, UBig};

let a = ubig!(12345678);
let b = ubig!(0x10ff);
let c = ibig!(-azz base 36);
let d: UBig = "15033211231241234523452345345787".parse()?;
let e = 2 * &b + 1;
let f = a * b.pow(10);

assert_eq!(e, ubig!(0x21ff));
assert_eq!(c.to_string(), "-14255");
assert_eq!(
    f.in_radix(16).to_string(),
    "1589bda8effbfc495d8d73c83d8b27f94954e"
);
assert_eq!(
    format!("hello {:#x}", d % ubig!(0xabcd1234134132451345)),
    "hello 0x1a7e7c487267d2658a93"
);

let ring = ModuloRing::new(&ubig!(10000));
let x = ring.from(12345);
let y = ring.from(55443);
assert_eq!(format!("{}", x - y), "6902 (mod 10000)");

Optional dependencies

  • std (default): for std::error::Error.
  • num-traits (default): integral traits.
  • rand (default): random number generation.
  • serde: serialization and deserialization.

Benchmarks

Benchmarks contains a quick benchmark of Rust big integer libraries.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.