mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
60fa13878c
### 💥 BREAKING CHANGES -66744f0parser: [**BREAKING**] Rename `panicked` to `fatal_error` in `ParserReturn` (#26382) (overlookmotel) -2c9a947parser: [**BREAKING**] Reduce `MAX_LEN` to 256 bytes below `u32::MAX` (#26352) (overlookmotel) ### 🚀 Features -32bdc5ballocator: Construct `ArenaHashSet` with any `Default` hasher (#26372) (Dunqing) -a17de58minifier: Process of return/throw in non last position and fix async * inlining (#26214) (Armano) -bfb4c57parser: Distinguish unapplied no-side-effects comments (#26120) (碳苯 Carbon) -1d9b9d3ast: Add `GetNodeId` trait (#26145) (camc314) ### 🐛 Bug Fixes -b156333codegen: Order accessibility before abstract on accessors (#26392) (camc314) -116c8b8transformer/class-properties: Keep private methods in class-expression scope (#26308) (Changsu Seong) -1400a0fparser: Require a string source after `export ... from` (#26389) (camc314) -2da73b7codegen: Print matching quoted import names as identifiers (#26386) (camc314) -0a81d29codegen: Preserve private-in left operand precedence (#26383) (camc314) -9a02337parser: Correctly round large nondecimal literals (#26379) (camc314) -3d95477transformer: Gate async-only rewrites by owning transform (#26326) (Dunqing) -f45a9eetransformer: Limit arguments capture to lowered async functions (#26317) (Dunqing) -789969ftransformer: Gate this capture by owning async transform (#26227) (Dunqing) -affeb14minifier: Mangle class private members in Node API (#26118) (碳苯 Carbon) -8b35abdsemantic: Detect duplicate private class elements (#26361) (camc314) -457ed57semantic: Reject await and yield in rest parameter defaults (#26359) (camc314) -4b89c7bsemantic: Reject jumps across arrow functions (#26357) (camc314) -c966acaparser: Do not omit `<` token opening type argument list (#26328) (overlookmotel) -f07dca5ast_visit: Add the trimmed prefix length to translation table offsets (#26173) (Bharadwaj Pendyala) -3ab9bd1parser: Do not re-lex template substitution tail after fatal error (#26230) (overlookmotel) -07851b9parser: Fix debug assert failure when lexer error with tokens enabled (#26229) (overlookmotel) -00dea7aallocator: Gate `Allocator::data_end_ptr` behind fixed_size feature (#26248) (camc314) -853ffabecmascript: Avoid `charAt` panic on 32-bit (#26244) (camc314) -34feccbruntime: Remove stale regenerator exports (#26243) (camc314) ### ⚡ Performance -34a242eminifier: Use `Ident` for property mangler (#26334) (sapphi-red) -5303f5cminifier: Unify merging of last expression into target sequence (#26264) (Armano) -2ca7d29minifier: Consume nodes in minimize_statements in reverse order (#26258) (Armano) -d2354b4mangler: Use `Ident` for variable names to keep (#26333) (sapphi-red) -5b3e335minifier: Use `Ident` instead of `Str` in `KeepVar` (#26332) (sapphi-red) -51366fbminifier: Use `IdentHashSet` in `PrivateMemberUsageStack` (#26331) (sapphi-red) -d19c42aminifier: Merge nested if stmt in place instead of creating dummies (#26351) (Armano) -356def6parser: Shrink annotation comment ranges (#26356) (overlookmotel) -a5be474parser: Shave instruction off `parse_jsx_element_name` (#26355) (overlookmotel) -9780663parser: Remove fatal error guard from `parse_jsx_element_name` (#26354) (overlookmotel) -766e12fparser: Remove `token` field from `LexerCheckpoint` (#26350) (overlookmotel) ### 📚 Documentation -d4b4e61transformer: Document ES2015 target floor (#26378) (Dunqing) -67dd054ast_visit: Correct out-of-date comments on `Utf8ToUtf16` converter (#26285) (overlookmotel) -a8ed2a7minifier: Fix stale validation instructions (#26251) (camc314)
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.