mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
894c8f9cd8
### 💥 BREAKING CHANGES -a31567aallocator: [**BREAKING**] Make `Allocator::cursor_ptr` and `data_end_ptr` private (#26081) (overlookmotel) ### 🚀 Features -784e9faminifier: Invert `!0` and `!1` in place for boolean context to `1` and `0` (#26050) (Armano) -1e902ccminifier: Expand fold leading assignments into the var decl (#26142) (Armano) -3ed4f6aminifier: Expand de morgan's optimization to allow move of `!` (#25930) (Armano) -5672585parser: Attach all comments to nodes (#25944) (camc314) ### 🐛 Bug Fixes -4adfb4csemantic: Validate chained continue labels (#26157) (camc314) -b874f48ecmascript: `Math.round` only exact half ties (#26150) (camc314) -a625378minifier: Coerce omitted `indexOf` search argument (#26149) (camc314) -dc7398becmascript: Trim trailing whitespace in string to number (#26148) (camc314) -243b685transformer/object-rest: Lower multiple declarators correctly (#26147) (camc314) -dc09a3aparser: Avoid panic on escaped string export names (#26146) (camc314) -e412cf2linter: Clamp invalid JS plugin locations (#26144) (camc314) -c3dedc9semantic: Skip function body bindings in parameters (#26099) (Dunqing) -e74de61transform-react: Match Babel diagnostic reporting (#26128) (Boshen) -d5163d0parser: Correctly classify unapplied pure annotations (#26084) (camc314) -8531b9blinter/plugins: Alter method for obtaining mutable `Program` when sending AST to JS plugins (#26077) (overlookmotel) -9b51658regular_expression: Allow oversized decimal escape for Annex B (#26070) (leaysgur) -c8de4dfregular_expression: Reject oversized backreferences (#26055) (camc314) ### ⚡ Performance -ac4785adiagnostics: Use fixed ANSI styles (#26130) (Boshen) -07a0793packages/codegen: Flatten output in chunks (#26109) (overlookmotel) -487427apackages/codegen: Faster string flattening (#26108) (overlookmotel) -7785583packages/codegen: Ensure indent strings are flattened (#26107) (overlookmotel) -0dd4db3packages/codegen: Store mapping positions in an `Int32Array` (#26085) (overlookmotel)
Oxc Allocator
A high-performance memory allocator using bump-based arena allocation for fast AST node creation.
Overview
Oxc uses a bump-based memory arena for faster AST allocations. This crate provides an [Allocator] that manages memory efficiently by allocating objects in a single contiguous memory region, avoiding the overhead of individual heap allocations.
Key Features
- Bump allocation: Fast allocation by simply incrementing a pointer
- Arena-based memory management: All allocations live for the same lifetime
- Zero-copy data structures: Efficient
Box,Vec,String, andHashMapimplementations - Optimal for AST operations: Perfect for parse-transform-emit workflows
Architecture
The allocator is designed specifically for AST processing workflows where:
- A large number of nodes are allocated during parsing
- All nodes have the same lifetime (tied to the AST)
- Memory is released all at once when the AST is dropped
This approach is significantly faster than using the system allocator for AST operations.
Features
serialize- Enables serialization support forBoxandVecwithserdeandoxc_estree.pool- EnablesAllocatorPool.bitset- EnablesBitSet.from_raw_parts- Adds unsafefrom_raw_partsmethod (not recommended for general use).fixed_size- MakesAllocatorPoolcreate large fixed-size allocators, instead of flexibly-sized ones. Only supported on 64-bit little-endian platforms at present. Usage of this feature is not advisable, and it will be removed as soon as we're able to.track_allocations- Count allocations and reallocations. For internal use only. The APIs provided by this feature are sketchy at best, and possibly undefined behavior. Do not enable this feature under any circumstances in production code.disable_track_allocations- Disablestrack_allocationsfeature. Purpose is to prevent--all-featuresenabling allocation tracking.