Skip to main content

oxilean_runtime/
lib.rs

1//! # OxiLean Runtime -- Memory Management, Closures, I/O, and Scheduling
2//!
3//! This crate implements the runtime system for OxiLean.
4//! It provides:
5//!
6//! - Tagged pointer object system (object) - Core runtime value representation
7//! - Reference counting (rc) - Non-atomic and atomic RC with elision hints
8//! - Arena allocators (arena) - Bump allocation and region-based memory
9//! - Closure representation (closure) - Flat closures and partial application
10//! - I/O operations (io_runtime) - File, console, and string I/O
11//! - Task scheduler (scheduler) - Work-stealing parallel evaluation
12//! - Lazy evaluation with memoization (lazy_eval) - Call-by-need thunks and memo caches
13//! - Tail call optimization (tco) - Trampoline loop and TCO analysis
14//! - Rich evaluation errors (eval_error) - Structured errors with source spans and hints
15
16#![allow(dead_code)]
17#![allow(unused_imports)]
18#![allow(unused_mut)]
19#![allow(clippy::should_implement_trait)]
20#![allow(clippy::collapsible_if)]
21#![allow(clippy::collapsible_match)]
22#![allow(clippy::single_match)]
23#![allow(clippy::field_reassign_with_default)]
24#![allow(clippy::approx_constant)]
25#![allow(clippy::useless_format)]
26#![allow(clippy::type_complexity)]
27#![allow(clippy::ptr_arg)]
28#![allow(clippy::module_inception)]
29#![allow(clippy::unnecessary_map_on_constructor)]
30#![allow(clippy::derivable_impls)]
31#![allow(clippy::result_large_err)]
32#![allow(clippy::write_with_newline)]
33#![allow(clippy::unnecessary_map_or)]
34
35pub mod actor_model;
36pub mod arena;
37pub mod bytecode_interp;
38pub mod closure;
39pub mod distributed_rpc;
40pub mod eval_error;
41pub mod gc_strategies;
42pub mod io_runtime;
43pub mod lazy_eval;
44pub mod memory_pool;
45pub mod object;
46pub mod profiler;
47pub mod rc;
48pub mod region_alloc;
49pub mod scheduler;
50pub mod string_pool;
51pub mod task_scheduler;
52pub mod tco;
53pub mod wasm_runtime;
54
55// Re-exports for convenience
56pub use arena::{
57    ArenaIdx, ArenaOffset, ArenaPool, BumpArena, GenIdx, GenerationalArena, Region, RegionManager,
58    TypedArena,
59};
60pub use closure::{
61    CallConvention, CallStack, Closure, ClosureBuilder, FnPtr, FunctionEntry, FunctionTable,
62    MutualRecGroup, Pap, PapResult, StackFrame,
63};
64pub use eval_error::{
65    EvalError, EvalErrorBuilder, EvalErrorKind, EvalFrame, RuntimeError, SourceSpan,
66};
67pub use io_runtime::{
68    ConsoleOps, FileOps, IoError, IoErrorKind, IoExecutor, IoResult, IoRuntime, IoValue,
69    StringFormatter,
70};
71pub use lazy_eval::{LazyList, MemoFn, SharedThunk, Thunk, ThunkCache};
72pub use object::{
73    ArrayOps, BoxInto, FieldAccess, HeapObject, ObjectHeader, ObjectStore, ObjectTable, RtArith,
74    RtObject, StringOps, ThunkOps, TypeInfo, TypeRegistry, TypeTag, UnboxFrom,
75};
76pub use rc::{
77    ArcWeak, BorrowFlag, BorrowState, CowBox, Rc, RcElisionAnalysis, RcElisionHint, RcManager,
78    RcPolicy, RcStats, RtArc, Weak,
79};
80pub use region_alloc::{
81    align_up, AllocStats, RegionAllocator, RegionConfig, RegionHandle, RegionId,
82};
83pub use scheduler::{
84    LoadBalanceStrategy, LoadBalancer, ParallelEval, Scheduler, SchedulerConfig, SharedState, Task,
85    TaskId, TaskPriority, TaskState, WorkStealingDeque, Worker,
86};
87// Note: region_alloc::Region is available as region_alloc::Region (arena::Region takes precedence at crate root)
88pub use task_scheduler::{
89    imbalance_ratio, suggest_worker_count, AdaptiveScheduler, LoadBalancePolicy, SchedulerMetrics,
90};
91// Note: task_scheduler types TaskId/TaskPriority/TaskState/Task/WorkerStats are accessible via task_scheduler::
92pub use tco::{
93    run_tco_interpreter, trampoline, trampoline_instrumented, RecursiveStep, StepResult, TailCall,
94    TailCallCounter, TailCallDetector, TailPosition,
95};