77 releases (45 breaking)
new 0.45.0 | Jan 11, 2025 |
---|---|
0.44.0 | Dec 25, 2024 |
0.43.0 | Dec 21, 2024 |
0.38.0 | Nov 26, 2024 |
0.0.1 | Mar 30, 2023 |
#917 in Programming languages
49,040 downloads per month
Used in 32 crates
(20 directly)
34KB
574 lines
⚓ Oxc Memory Allocator
Oxc uses a bump-based memory arena for faster AST allocations. This crate
contains an Allocator
for creating such arenas, as well as ports of
memory management data types from std
adapted to use this arena.
No Drop
s
Objects allocated into oxc memory arenas are never Dropped
, making
it relatively easy to leak memory if you're not careful. Memory is released
in bulk when the allocator is dropped.
Examples
use oxc_allocator::{Allocator, Box};
struct Foo {
pub a: i32
}
impl std::ops::Drop for Foo {
fn drop(&mut self) {
// Arena boxes are never dropped.
unreachable!();
}
}
let allocator = Allocator::default();
let foo = Box::new_in(Foo { a: 0 }, &allocator);
drop(foo);
Consumers of the oxc
umbrella crate pass
Allocator
references to other tools.
use oxc::{allocator::Allocator, parser::Parser, span::SourceType};
let allocator = Allocator::default()
let parsed = Parser::new(&allocator, "let x = 1;", SourceType::default());
assert!(parsed.errors.is_empty());
Dependencies
~510–750KB
~11K SLoC