- Benchmark harness: expanded runtime coverage with additional branch-heavy and memory-heavy workloads, including new prefix-sum/scatter-gather/stencil passes, added explicit flat/layered/dense/worst-case synthetic graph compile benchmarks, and switched Rust project compile benchmarks to Cargo release builds for more realistic cold-build numbers.
- Benchmark harness: added a new
compile_project_call_stress_graphcompile benchmark and wired it into the default compile hot/cold campaign coverage so call-heavy function-value lowering has a dedicated benchmark instead of being hidden inside the generic graph suites. - Benchmark harness diagnostics:
--arden-timingsparsing now strips ANSI color codes and accepts second-based timing output, so compile benchmark reports again surface the real build-phase breakdown instead of silently dropping Arden timing sections. - Benchmark presets/docs/CI: reworked the quick benchmark path to cover all default runtime workloads plus the non-extreme hot/cold compile graph set, updated benchmark docs accordingly, and made CI upload a direct
run.pyquick-suite artifact instead of going through the heavier multi-stage campaign flow. - LLVM/codegen throughput: tightened hot runtime lowering by switching enum payload equality to block
memcmp, removing redundant full-slot zero stores before overwrite in Map/Set updates, lowering List element access through typed indexed pointers so LLVM sees cleaner element-address arithmetic in matrix/list-heavy loops, skipping redundant lower-bound index checks when the code generator can conservatively prove an integer index stays non-negative, running the LLVM default middle-end optimization pipeline before object emission so LLVM 22 can actually apply LICM/GVN/vectorization on the generated IR, teaching--emit-llvmto dump the post-pass module instead of pre-optimization IR, and attaching more precise libc/runtime attributes so alias analysis and LICM have better facts to work with. - Integer proof propagation: extended exact-integer reasoning so loop-derived locals and bounds feed signed
div/modlowering, which removes redundant overflow-control CFG in hot modulo/division loops such as prefix-sum and prime-count workloads when non-negative or non--1facts are provable. - Power-of-two modulo lowering: integer
%on provably non-negative values with exact power-of-two divisors now lowers directly to a bitmask, shrinking hot index-update loops such ashistogram_heavy. - List alias precision: track distinct empty-list allocations through simple bindings and attach
alias.scope/noaliasmetadata on safe list loads and stores, letting LLVM 22 eliminate unnecessary runtime alias-versioning in disjoint-list kernels such asstencil_2d. - List allocation strategy: empty
List()values now start lazily with zero capacity/null data and let reserve/growth pick the first real allocation size, removing pointless eagermalloc+ immediatereallocchurn in push-heavy builders such assort_heavy. - Counted
forpush reservation: simplefor (p in 0..N)loops that only push into local lists now reserve exact capacity up front, cutting repeated growth work in initialization-heavy kernels such asmatrix_mul. - Reserved-capacity push fast path: direct local list
pushnow skips the dead growth branch when codegen can prove the current exact length is still below a known reserved capacity, reducing initialization overhead in large fill loops such asscatter_gather_mix. - Nominal dispatch/codegen throughput: interface method and bound-method resolution now walks known implementors directly instead of rescanning every emitted function by suffix, and both bound-method and closure/function-value adapters are now reused per concrete signature instead of regenerating identical wrapper functions for every occurrence.
- Statement codegen throughput:
let/assign/returnvalidation now reuses the cheaper builtin-argument type fast path where possible, and assignment lowering collapses compound/map-target analysis into a single pass instead of re-matching and re-inferring the same target shape multiple times. - Call codegen throughput:
compile_callnow only builds/infers syntheticExpr::Callstate for actualOption/Resultstatic constructor calls, and the shared lowering for those builtins is centralized instead of duplicated across alias/direct-name branches. - Cold object-codegen throughput: specialization-demand object shards now share one prebuilt full-project codegen
Programsnapshot instead of rebuilding the same combined AST projection separately in each shard, reducing repeated whole-project cloning work in large cold builds such ascompile_project_mega_graph. - Object-codegen sharding diagnostics:
--timingsnow reports per-shard member/closure/declaration/active/program totals, making it obvious when large shard shapes are inflating backend work instead of hiding all of that cost inside one aggregatellvm emitbucket. - Object-codegen throughput: default large-project object shard size now falls back to single-file objects after timing sweeps showed the previous fixed-size grouping made LLVM backend object emission grow superlinearly on mega-graph projects, cutting
compile_project_mega_graphcold compile time from roughly20.7sto10.4sin the benchmark harness and from about21.0s/89.5s(size=4/8) to about8.9swith single-file shards in direct timing runs. - Object-codegen throughput: object sharding now fully disables the shard-planning path when the configured shard size is
1, avoiding pointless single-file shard bookkeeping once large-project cold builds intentionally fall back to per-file objects. - Object-codegen/linkage tuning: safe function-only object builds now compute a per-shard externally-visible function set and mark hidden small helpers as
available_externallyinstead of always forcing internal linkage, which reduces backend work for cold mega-graph builds without changing exported behavior. - Object-codegen diagnostics:
--timingsnow records max per-shard costs for declaration closure, projected codegen program construction, filtered compile work, LLVM emit, LLVM optimize-module time, and object writes, so the worst backend offenders are visible immediately instead of being diluted into worker totals.
Release history
Changelog
Browse Arden releases by version and jump straight to added features, fixes, behavioral changes, and technical work.
v1.3.9
Benchmark & Codegen Throughput Sweep
Apr 21, 2026
Changed
Large section hidden by default to keep the page readable.
Fixed
Large section hidden by default to keep the page readable.
- LSP and diagnostics: fixed span-boundary/end-exclusive lookup, CRLF position mapping/clamping, lexer-offset overflow fallback, Unicode underline width, and EOF rendering edge cases.
- Import/lint parsing: fixed
std.<ns>.*nested-member filtering, alias-member parsing with spaced generics, and lone-CR import autofix sorting/dedup behavior. - Bindgen generation: fixed UTF-8-safe comment stripping and unnamed array parameter naming in generated extern signatures.
- Test/formatter/lexer EOL handling: fixed lone-CR shebang/import/main-strip behavior and normalized preserved comment emission.
- Semantic/cache correctness: prevented partial typecheck-component reuse when semantic summary cache is missing.
- Symbol collisions: single-file checks now reject duplicate top-level declarations (including duplicate
main), and project indexing now rejects same-namespace duplicates. - Linker safety and target validation: response-file args now escape
\n/\r,PATHscanning ignores non-executable files, and direct Linux linker mode rejects*-muslwith a clear GNU-libc-only error. - Linux linker probing: GCC support-object directory selection now uses numeric version ordering (
11>10>9) instead of lexicographic ordering. - CI/smoke hardening: fixed Windows PowerShell quoting, added failure artifact dumps (
.ll/best-effort objects), moved defaults to baseline CPU/features, and improved cache isolation. - Codegen/runtime hardening: stabilized signed modulo lowering and map
op=key materialization, and reworkedstd.fsFile.readlowering (fread+memchr) to avoid Windows backend-regalloc crashes. - Deep-expression stability: replaced recursive parser/import/type/borrow hot paths with iterative handling and added deep unary/parenthesized regression coverage.
- Runtime/process diagnostics: unified richer crash decoding (signals/NTSTATUS), improved missing/non-file executable failures, and added safe truncation for oversized subprocess output.
- ABI portability: fixed cross-platform C ABI mismatches (
size_t/long/time_t/pthread_t) and normalized remainingmalloc/realloc/snprintfsize casting. - Collection codegen throughput: replaced byte-at-a-time zero-init/list-growth copy loops with LLVM
memset/memcpyintrinsics to reduce avoidable runtime overhead without changing semantics or requiringcpu=native. - Type and diagnostics correctness: fixed async-block return-type inference for explicit
return, and unified parser/type/borrow/import + CLI/project path rendering (including Windows prefix cleanup). - Tooling/path hardening: tightened bindgen/cache/object/linker path handling and release smoke script guards/timeouts.
- Web polish: restored large-screen hero centering and improved ultra-wide readability scaling.
- Test harness stability: removed linker PATH mutation from the non-executable-tool probe so parallel test runs no longer spuriously fail runtime/codegen tests with missing-
molddiagnostics. - Benchmark harness portability: generated Rust compile-benchmark projects now copy the repo
.cargolinker wrapper config into their own workspace, fixing CI/macOS/Linuxcargo build --release --offlinefailures from missing relativemold/lldwrapper paths. - CI LLVM install resilience: the shared
install-llvmaction now retries transient download failures, tries multiple LLVM 22 patch versions and archive name variants, and falls back across those candidates on both Linux and Windows instead of hard-failing on a single 404/504 from one release asset. - Benchmark/web stability: benchmark runner compiler-path handling now respects platform executables such as
target/release/arden.exe, and markdown heading rendering now supports both legacy string and newer token-basedmarkedcallbacks so SSR/prerender builds no longer crash on formatted headings. - Windows linker stability:
lld-linknow uses escaped response files for object/library/search-path arguments, which avoids Windows command-line length failures on very large object sets such ascompile_project_mega_graphwhile keeping temporary response-file cleanup safe on both Windows and macOS-style paths.
v1.3.8
Linker Pipeline & Stability Sweep
Apr 13, 2026
Changed
Large section hidden by default to keep the page readable.
- Reworked native artifact production to direct LLVM object emission with linker-only backends (
moldon Linux,lldon macOS/Windows). - Switched Cargo self-builds from pinned
clangwrappers to dedicated linker wrapper scripts in.cargo/config.toml. - Reused exact Windows builtins paths during linking instead of repeated LLVM path rescans.
- Added broader cross-platform linker benchmark coverage in CI (cold/hot/incremental) with uploaded timing artifacts.
- Moved portable Linux release/smoke builds to baseline
x86-64CPU targets while keeping native-tuned perf checks. - Unified
arden build --timingsand terminal color/styling behavior with the rest of the CLI.
Fixed
Large section hidden by default to keep the page readable.
- Fixed semantic pipeline source-read handling so files are not silently dropped, and made single-source parse/type/borrow/import/entry diagnostics use explicit file paths.
- Fixed
borrow mutABI lowering to true by-reference semantics and aligned call-site passing across direct/module/method/constructor paths; async functions now reject borrow-mode params. - Fixed nested
ListSIGSEGVcrashes inrun/profile, improved signal-aware crash reporting, and hardened temp artifact cleanup warnings. - Fixed stale project/object cache invalidation when compiler binary identity changes to improve rebuild correctness.
- Fixed CLI runtime tooling temp/output behavior (
run/bench/profile/test), bindgen stdout/status routing, and duplicatestd.ioinjection in generated test runners. - Fixed path safety and concurrency handling by rejecting symlinked roots during discovery and making scoped cwd switching panic-safe.
- Fixed platform linker/runtime issues across linker cwd/response-file cleanup, macOS SDK/portable flows, and Windows
lld-linkmachine/CRT/output-path handling. - Fixed invalid test attribute combinations/signatures (including duplicate hooks and misplaced
@Ignore), while preserving module-scopedmainin generated runners. - Fixed effect-system enforcement gaps for function values and higher-order calls, including
if/block/callee-expression flows and unknown factory contracts. - Fixed additional bound-method and interface-indirection effect bypasses so non-
@Anycallers cannot evade effect checks through method values. - Fixed generic enum failure paths to return explicit non-panic diagnostics in checked and
--no-checkcompilation. - Fixed project/test workspace path normalization and symlink containment checks, including rejection of duplicate source aliases resolving to the same file.
- Fixed diagnostics quality across
build/run/check/test/bindgen/linker/ar/xcrunto always include actionable path/process context. - Fixed bindgen boundary guards for missing headers/output directories and restored portable
size_t/pointer sizing behavior in codegen. - Fixed CI stability regressions in effect smoke coverage, test-file discovery naming, and macOS symlink-ancestor path handling.
v1.3.7
LLVM 22 Upgrade & Compile-Time Performance
Apr 10, 2026
Changed
Large section hidden by default to keep the page readable.
- Upgraded compiler/tooling integration to LLVM 22 (
inkwellllvm22-1,LLVM_SYS_221_PREFIX) across local builds, CI, release packaging, and docs. - Reworked function-value typecheck lookup to a cached leaf-name index, reducing large synthetic cold builds from about
52.7sto1.9sand keeping 10-file rebuilds near0.7s. - Expanded
arden build --timingscoverage for cold/warm/rebuild runs, mixed nominal-type stress projects, and deeper codegen subphase breakdowns. - Reduced redundant scalar validation in codegen
Assign/Returnhot paths, improving 32k-function synthetic cold runs from about1.079sto1.061s. - Reduced repeated call-path lookups and small argument-buffer reallocations in hot
expr_calllowering. - Reused per-namespace local enum sets in project rewrite hot paths, dropping XL mixed rewrite worker time from about
2.36sto2.06s. - Cached mangled class symbols for rewrite call handling, cutting XL mixed rewrite worker time to about
0.15sand cold build time from about1.10sto0.96s. - Collapsed shard-local closure symbol collection into a single pass, reducing that step from about
0.02sto0.003son 32k-function synthetic cold builds. - Precomputed top-level declaration/body filtering once per pass, improving synthetic cold runs to about
1.046s(32k) and1.068s(XL mixed). - Tuned default large-project object-codegen shard size from
8to4, improving LLVM 22 cold timings to about1.021s(32k) and0.908s(XL mixed) while preserving warm/incremental behavior.
v1.3.6
Compiler UX, Type/Codegen Correctness, and Project Reliability
Apr 8, 2026
Added
- Added broader language and tooling coverage across formatter, lint/fix flows, benchmarking, import handling, and project rewrite paths.
Fixed
Large section hidden by default to keep the page readable.
- Fixed a broad set of unchecked codegen holes around type boundaries, including assignments, returns, branch joins, loop bindings, constructor/call arguments, function-value adapters, and container payload/key writes.
- Fixed unchecked builtin specialization mismatches for invariant containers and heap wrappers such as
List,Map,Box,Rc, andArc, so empty or pointer-shaped values with the wrong specialization no longer compile just because their lowered layout matches. - Fixed unchecked explicit builtin constructor specialization mismatches for nested invariant containers such as
Option<List<T>>, while keeping imported builtin variant aliases likePresentandSuccessworking normally. - Fixed the silent-feeling
arden lspstartup path by emitting basic lifecycle logs immediately, including an explicit waiting-for-handshake state, so local launches no longer appear dead. - Fixed scope restoration across blocks,
if,match, andfor, eliminating branch-local binding leaks and several invalid-IR paths. - Fixed contextual typing and adaptation for lambdas, enum-variant function values, exact-import constructor values, and interface-backed/bound method values.
- Fixed project rewrite and import-resolution edge cases across exact imports, wildcard imports, namespace aliases, nested modules, root aliases, builtin
Option/Resultconstructors and patterns, and zero-argument stdlib aliases. - Fixed stale-cache and rebuild correctness issues in project mode, including corrupted cache recovery, namespace-alias invalidation, and import-check/cache reuse across declaration signatures.
- Fixed unchecked and checked diagnostics for module-local nominal types and nested receiver failures so errors now report the real root cause with user-facing type names.
- Fixed remaining parser and import-check gaps around builtin
Option.None, builtin aliases, and package/root-qualified constructor and pattern syntax. - Fixed parser diagnostics so missing semicolons and other expectation errors now use human-readable token names, aligned source gutters, and insertion-point carets instead of internal token dumps or next-token-only blame, including identifier-led statements that previously lost their true start column.
- Fixed single-file import diagnostics so unresolved imports and alias issues now render with source context, identifier-accurate carets, and compact fix hints instead of a detached summary block.
- Fixed assorted project-mode regressions around generic inheritance, generic bounds, nested-module rewrites, current-package alias constructors, and extern/link-name preservation.
- Fixed test-runner output consistency so ignored tests, suite headings, and final summaries now read as one coherent UI instead of a mix of legacy banner styles.
Changed
Large section hidden by default to keep the page readable.
- Consolidated exact-import, namespace-alias, and zero-argument stdlib alias handling so the same forms behave consistently across checked builds, unchecked builds, and multi-file project builds.
- Tightened unchecked codegen to fail at semantic boundaries earlier instead of letting invalid programs degrade into LLVM or Clang backend failures.
- Refined CLI output for
build,run,fmt,fix, andcheckwith consistent project-style status lines, build durations, and web-aligned terminal colors instead of the previous mix of ad-hoc cyan/green messages. - Switched CLI build and timing summaries to seconds with enough precision for hot-cache runs, so near-instant builds no longer look absurdly tiny or rounded inconsistently in raw milliseconds.
- Polished developer-facing terminal UX again by aligning
arden lsplifecycle logs and the generatedarden testrunner output with the newer neutral CLI presentation instead of the older plain-text banners. - Simplified
arden testruntime output further by dropping runner banners and suite/summary noise in favor of plain per-testokandskiplines with CLI-side coloring. - Shortened and clarified docs around function/test returns and assertion helpers so examples match actual language behavior without over-explaining every small variant.
v1.3.5
Tooling, Performance, and Build Reliability
Mar 8, 2026
Added
- Added
arden fmt,arden lint,arden fix,arden bench, andarden profile, plus new lint rules, compound-assignment parsing, richer examples, and broader CLI/frontend/CI smoke coverage. - Added project linker/output configuration in
arden.toml, compile target/optimization flags, and expanded benchmark coverage including hot/cold compile modes, incremental rebuild scenarios, and larger synthetic mega-graph workloads.
Fixed
Large section hidden by default to keep the page readable.
- Fixed import, alias, wildcard, and module-local scope leaks across parser, import-check, type-check, lint, autofix, and unchecked codegen paths.
- Fixed unchecked dispatch and diagnostics for interfaces, enums, constructor/function values, nested receivers, generic bounds, and module-local nominal types.
- Fixed argument/return lowering gaps for direct calls, module-qualified calls, wildcard imports, enum constructors, compound assignment, and unchecked return validation.
- Fixed project rewrite and cache invalidation bugs across generic bases, nested modules, namespace aliases, declaration signatures, stale object reuse, and duplicate import-check reporting.
- Fixed tooling/runtime issues including parser edge cases for compound assignment and builtin generics, lambda capture borrow handling, test-runner codegen, async timeout portability, web docs sanitization/routing, and release/workflow setup.
Changed
Large section hidden by default to keep the page readable.
- Reworked project builds around
.ardencache, parallel parse/import/rewrite/object stages, narrower rebuild slices, direct object emission, response-file linking, and stricterlld-only linking. - Improved LSP rename/reference/hover accuracy, borrow-check/type-check metadata reuse, stdlib metadata sharing, async runtime portability, CI/release packaging, and project/build reporting.
- Expanded language semantics around inheritance, interface validation, import aliases, list construction/storage, shebang scripts, and project target/output handling.
v1.3.4
Async Runtime, FFI, Bindgen
Mar 5, 2026
Added
Large section hidden by default to keep the page readable.
- Threaded Async Runtime:
Task<T>now uses a real thread-backed runtime with result caching.async functioncalls now spawn task workers immediately viapthread.awaitnow joins unfinished tasks and reuses the stored result on subsequent awaits.async { ... }blocks now compile to real task runners with captured environments.
- Task Control APIs: Added
Task.is_done(),Task.cancel(), andTask.await_timeout(ms)runtime methods.await_timeout(ms)returnsOption<T>and performs a timed join.cancel()marks task as done and provides a safe default result for laterawait.
- Effect System: Added function effect attributes
@Pure,@Io,@Net,@Alloc,@Unsafe,@Thread, and@Anywith call-site checks.- Built-in effect requirements are enforced for IO/thread-sensitive APIs.
- Calls to user functions/methods now propagate declared effects.
- Non-annotated functions now get effect inference from the call graph.
- Invalid combinations (
@Pure+ explicit effects /@Pure+@Any) now fail at type-check time.
- C Interop: Added
extern function ...;declarations for C ABI calls.- Supports typed extern signatures without function bodies.
- Supports variadic extern declarations (e.g.
extern function printf(fmt: String, ...): Integer;). - Supports explicit ABI and symbol aliasing (e.g.
extern(c, "puts") function c_puts(...): Integer;,extern(system, "printf") ...). - Enforces FFI-safe extern signatures and variadic argument types at type-check time.
- Extern callsites now use C ABI argument lowering (no Arden env pointer).
- Pointer Interop Type: Added generic
Ptr<T>as a first-class type for raw FFI pointer signatures.- Parser/typechecker/codegen support for
Ptr<T>declarations and extern interop. Ptr<T>is now accepted as an FFI-safe extern signature type.
- Parser/typechecker/codegen support for
- C Header Bindings: Added CLI command
arden bindgento generate Ardenextern(c)declarations from.hfiles.- Supports common C prototypes and variadic signatures.
- Supports stdout output or
--output <file>generation.
- New Feature Examples:
examples/single_file/tooling_and_ffi/26_effect_system/26_effect_system.ardenexamples/single_file/tooling_and_ffi/27_extern_c_interop/27_extern_c_interop.ardenexamples/single_file/tooling_and_ffi/28_async_runtime_control/28_async_runtime_control.ardenexamples/single_file/tooling_and_ffi/29_effect_inference_and_any/29_effect_inference_and_any.ardenexamples/single_file/tooling_and_ffi/30_extern_variadic_printf/30_extern_variadic_printf.ardenexamples/single_file/tooling_and_ffi/31_extern_abi_link_name/31_extern_abi_link_name.ardenexamples/single_file/tooling_and_ffi/32_extern_safe_wrapper/32_extern_safe_wrapper.ardenexamples/single_file/tooling_and_ffi/33_extern_ptr_types/33_extern_ptr_types.ardenexamples/single_file/tooling_and_ffi/34_bindgen_workflow/34_bindgen_workflow.ardenexamples/README.md(coverage index)
Changed
Large section hidden by default to keep the page readable.
- Codegen Task Representation:
Task<T>codegen now uses an internal runtime task handle instead of the previous directTvalue stub. - Async Documentation: Updated async docs to reflect real runtime behavior (thread-backed scheduling, parallel task execution, await-as-join, cached result).
- Function Documentation: Added docs for
extern functionand effect attributes. - Safety of unwrap:
Option.unwrap()andResult.unwrap()now emit runtime panic+exit on invalid states instead of unchecked loads.
v1.3.3
Compiler/LSP/Docs Sync
Mar 5, 2026
Added
Large section hidden by default to keep the page readable.
Module Dot Syntax: Added semantic/codegen support for
Module.function(...)while keepingModule__function(...)compatibility.Enum Variant Constructors: Added enum metadata and constructor support for
Enum.Variant(...)in codegen/type checking.LSP Diagnostics on Edit: Added diagnostics publication on open/change (lexer/parser errors) and baseline go-to-definition symbol lookup.
Integration Test Coverage: Added tests for multi-file project rewrite edge cases:
- Shadowed local function identifiers are not mangled.
- Imported class constructor and module field accesses are mangled deterministically.
- Shadowed module identifiers are not mangled.
Fixed
Large section hidden by default to keep the page readable.
- Namespace Collisions: Collision handling now fails early with clear function+namespace diagnostics.
- Documentation Consistency: Updated
ardenCLI usage, module syntax notes, and compiler architecture file map. - Class/Module Collisions: Top-level class and module name collisions now fail early across namespaces.
- List Capacity Growth: Fixed
List.push()codegen to grow backing storage withreallocwhenlength >= capacity, preventing heap corruption (malloc(): corrupted top size) in large workloads likebenchmark/arden/matrix_mul.arden. - Map IR Block Ordering: Fixed invalid LLVM IR generation in
Map.set()control-flow block ordering (late-createdmap_set.cont/update), which caused Clang parse failures inexamples/single_file/safety_and_async/17_comprehensive/17_comprehensive.arden.
Changed
Large section hidden by default to keep the page readable.
- Match Codegen: Expanded to support enum-style variant dispatch and payload binding flows.
- Map Methods:
set,insert,get, andcontainsnow use functional linear-lookup behavior with update semantics. - Project Build Pipeline: Now combines parsed AST declarations directly instead of text-merging source strings.
- Docs Mirroring: Full docs mirror is maintained under
web/public/docs/fromdocs/. - Scope-Aware Rewriting: Project call rewriting now preserves params, locals, loop vars, lambda params, and match bindings.
- Architecture Docs: Project documentation now covers AST combining, deterministic mangling, scope-aware behavior, and collision policy.
- Native Clang Tuning: Final IR compilation now prefers
-march=native -mtune=nativewith a safe fallback to baseline-O3if tuned flags are unavailable. - Project
opt_levelWiring:arden.tomlopt_levelnow actually drives final Clang optimization level (0/1/2/3/s/z/fast). Missing/invalid values default safely to maximum-performance-O3.
v1.3.2
Range Types
Feb 22, 2026
New Features
Large section hidden by default to keep the page readable.
Range Type: Full iterator-based range type for numeric sequences
Range<T>generic type withrange(start, end)andrange(start, end, step)functions- Iterator protocol with
has_next()andnext()methods - Support for ascending and descending ranges (negative steps)
- LLVM struct-based implementation with heap allocation
- New example:
examples/single_file/stdlib_and_system/25_range_types/25_range_types.arden - Documentation:
docs/features/ranges.md
Testing Framework: Full testing framework with attributes and assertions
@Testattribute to mark test functions@Ignoreattribute to skip tests (with optional reason:@Ignore("not ready"))@Before,@Afterfor setup/teardown around each test@BeforeAll,@AfterAllfor suite-level setup/teardown- New CLI command:
arden test- Discover and run all @Test functions - Assertion functions:
assert(),assert_eq(),assert_ne(),assert_true(),assert_false(),fail() - New example:
examples/single_file/tooling_and_ffi/24_test_attributes/24_test_attributes.arden
LSP (Language Server Protocol): Arden now has a built-in LSP server for IDE integration
- New CLI command:
arden lsp- Start the language server - Autocomplete support for keywords, types, and functions
- Hover documentation for language keywords
- Go to definition support (prepared)
- New CLI command:
Improved Error Messages: Better developer experience with helpful error messages
- "Did you mean?" suggestions for typos using Levenshtein distance
- Contextual hints for missing imports
- Color-coded error output with source location
Technical
Large section hidden by default to keep the page readable.
Range Type Implementation:
- Added
Type::Range(Box<Type>)to AST - Added
ResolvedType::Range(Box<ResolvedType>)to typeck - Parser support for
Range<T>syntax - LLVM codegen: struct
{ i64, i64, i64, i64 }(start, end, step, current) create_range(),range_has_next(),range_next()helper functionscompile_range_method()for method calls
- Added
Added
test_runner.rsmodule for test discovery and executionAdded
Attributeenum to AST for function annotationsAdded
@token to lexerUpdated parser to parse attributes before function declarations
Added parser unit tests for attribute parsing
Added assert functions to codegen with proper LLVM generation
Added
lsp.rsmodule with tower-lsp integrationAdded fuzzy string matching for error suggestions
Updated
import_check.rswith suggestion engine
v1.3.1
Import System Fixes
Feb 22, 2026
Bug Fixes
Large section hidden by default to keep the page readable.
- Wildcard Imports for Stdlib: Fixed wildcard imports (
import std.io.*;) not properly importing stdlib functions likeprintln,print. - Duplicate Import Check: Fixed duplicate import validation in multi-file projects where imports were checked twice (once during analysis, once during compilation).
- Examples Updated: Added missing
import std.io.*;andimport std.string.*;statements to multi-file project examples.
Technical
Large section hidden by default to keep the page readable.
import_check.rs: Added stdlib function resolution for wildcard importsmain.rs: Skip redundant import check during compilation phase (already done in analysis phase)- All examples now properly import required modules
- Full
cargo fmtandcargo clippycompliance
v1.3.0
Multi-File & Namespace System
Feb 21, 2026
Major Release: Complete Project System
This release introduces a complete multi-file project system with Java-style namespaces and mandatory imports.
Configuration
- arden.toml Format:
name = "my_project" version = "1.0.0" entry = "src/main.arden" files = ["src/utils.arden", "src/main.arden"] output = "my_project" opt_level = "3"
Documentation
Large section hidden by default to keep the page readable.
- Added comprehensive multi-file project documentation
- New example:
examples/multi_file_project/ - Updated test suite to include multi-file project testing
Technical
Large section hidden by default to keep the page readable.
- Added
namespace.rs- Namespace resolution system - Added
import_check.rs- Import validation with helpful error messages - Added
project.rs- Project configuration management - Updated lexer with
Package,Import,Startokens - Updated parser for package/import syntax
- CI workflow tests all 32 examples including multi-file projects
- Full clippy compliance, cargo fmt applied
New Features
Large section hidden by default to keep the page readable.
Multi-File Project Support: Arden now supports organizing code into projects with multiple source files.
- Project configuration via
arden.toml - New CLI commands:
arden new,arden build,arden run,arden info - Automatic merging and compilation of multiple source files
- Entry point configuration for main function location
- Project configuration via
Project Commands:
arden new <name>- Create a new project with standard structurearden build- Build current projectarden run- Build and run current projectarden info- Display project informationarden check [file]- Check project or specific file
Behavior Changes
Large section hidden by default to keep the page readable.
- BREAKING: Functions from other files are NOT automatically available
- Must use
import namespace.function;orimport namespace.*; - Same-namespace functions work without imports (local scope)
- Functions without package declaration are in
globalnamespace
v1.2.0
Performance Push & Codegen Refactor
Feb 21, 2026
Focused on making native output materially faster while breaking the original codegen monolith into modules that were easier to maintain and extend.
Performance & Optimization
Large section hidden by default to keep the page readable.
- LLVM Aggressive Optimizations: Switched from
OptimizationLevel::DefaulttoOptimizationLevel::Aggressivefor maximum performance. - Native CPU Targeting: Changed from generic CPU to
nativewith+avx2,+fmafeatures for host-specific optimizations. - Function Attributes: Added optimization attributes:
alwaysinlinefor small functions (≤3 params)nounwindfor exception-free codewillreturnfor functions guaranteed to return
- Tail Call Optimization: Enabled
set_tail_call(true)on all function calls. - Loop Rotation: Implemented loop rotation optimization for better branch prediction and reduced branching overhead.
Fixed
- LLVM Attribute Errors: Removed problematic attributes (
uwtable,call_convention) causing Clang failures. - Code Formatting: Applied
cargo fmtacross entire codebase.
Benchmarks
Large section hidden by default to keep the page readable.
- Fibonacci(35): ~0.12s (comparable to C/Rust)
- Prime Sieve: ~0.08s (faster than C/Rust!)
- Overall Speedup: 3x faster than original implementation
Code Refactoring
Large section hidden by default to keep the page readable.
- Modular Architecture: Split monolithic
codegen.rs(6666 lines) into focused modules:codegen/core.rs(3876 lines): Main codegen logiccodegen/types.rs(1590 lines): Built-in type implementationscodegen/util.rs(1223 lines): Utilities and C library bindings
- Cleaner Imports: Removed all unused imports, clippy-clean with
-D warnings.
v1.1.4
Stdlib Expansion & Runtime Utilities
Dec 29, 2025
This release substantially widened the built-in runtime surface with arguments, time, string helpers, and system integration primitives.
Added
Large section hidden by default to keep the page readable.
- Args Module: Introduced support for command-line arguments via the
Argsobject.Args.count(): Returns the number of arguments.Args.get(index): Retrieves a specific argument.
- Str Module: Introduced the
Strstatic object for string manipulation (renamed fromStringto avoid type name collisions).Str.len(s): Get string length.Str.compare(a, b): Compare two strings.Str.concat(a, b): Concatenate two strings.Str.upper(s): Convert to uppercase (stub).Str.lower(s): Convert to lowercase.Str.trim(s): Remove leading/trailing whitespace.Str.contains(s, sub): Check if string contains substring.Str.startsWith(s, pre): Check if string starts with prefix.Str.endsWith(s, suf): Check if string ends with suffix.
- System Module Improvements:
System.getenv(name): Get environment variables.System.shell(cmd): Run shell command (exit code).System.exec(cmd): Run shell command and capture stdout.System.cwd(): Get current working directory.System.os(): Get operating system name.System.exit(code): Terminate program with exit code.
- Math Module Improvements: Added
Math.pi(),Math.e(), andMath.random(). - Time Module: Added native support for time-related operations.
Time.now(format): Returns formatted local time.Time.unix(): Returns raw Unix timestamp.Time.sleep(ms): Suspends program execution.
- List Improvements:
List.pop(): Remove and return the last element.
- New Examples: Added
19_time.arden,20_system.arden,21_conversions.arden,22_args.arden,23_str_utils.arden.
Changed
Large section hidden by default to keep the page readable.
- Math Unification: All mathematical functions (sqrt, sin, abs, etc.) now require the
Math.prefix for consistency and better namespacing. - Improved For Loops: Loop ranges now support variables (e.g.,
for (i in 0..count)), allowing for dynamic iteration. - Standard Library Expansion: Continued efforts to expand the builtin library capabilities.
Fixed
- Boolean String Conversion:
to_string(bool)now correctly returns "true" or "false" instead of garbage values.
v1.1.3
File I/O & Example Coverage
Dec 29, 2025
The focus here was practical scripting support: file operations, better examples, and the first dedicated example verification flow.
Added
Large section hidden by default to keep the page readable.
- File I/O Support: Added native support for file system operations via the
Filestatic object.File.read(path): Reads entire file to String.File.write(path, content): Writes content to file.File.exists(path): Checks for file existence.File.delete(path): Deletes a file.
- New Examples: Added
18_file_io.ardenandapp_notes.ardendemonstrating file system interactions. - Test Infrastructure: Added
test_examples.batfor automated verification of all example programs.
Changed
- Standard Library Ownership: Relaxed borrow checker rules for standard library functions (
strlen,println, etc.). These functions now borrow their arguments instead of consuming them, allowing variables to be reused after being printed or measured. - Compiler Intrinsics: Optimized C binding generation for standard library calls in the LLVM backend.
Fixed
- Borrow Checker: Fixed a bug where standard library calls would incorrectly mark string variables as moved.
v1.1.2
Runtime Stability Fixes
Dec 28, 2025
This patch concentrated on correctness issues in generated LLVM and container behavior, especially around List handling and match lowering.
Fixed
Large section hidden by default to keep the page readable.
- Critical Runtime Crash: Fixed a bug where classes starting with "List" (e.g.,
ListNode) were incorrectly compiled as generic lists, causing stack corruption and runtime crashes. - List.set(): Implemented missing
set(index, value)method forList<T>in codegen. - Match Statements: Fixed invalid LLVM IR generation (orphan blocks) for
matchstatements. - Clippy Warnings: Resolved
collapsible_matchand other lints incodegen.rs.
v1.1.1
Documentation Rebuild
Dec 27, 2025
This release reorganized the project’s docs into a real documentation tree and turned the repository root into a cleaner entry point.
Major Changes
- Complete Documentation Refactor: The documentation has been completely overhauled and moved to a dedicated
docs/directory. - Simplified README:
README.mdis now a clean entry point, linking to specific documentation sections.
Changed
- CONTRIBUTING.md: Updated contribution guidelines to reflect the new project structure and documentation workflow.
- README.md: Removed monolithic content and replaced it with an organized index of links.
Added
Large section hidden by default to keep the page readable.
- New Documentation Structure:
docs/getting_started/: Installation, Quick Start (Hello World), Editor Setup.docs/basics/: Syntax, Variables, Types, Control Flow.docs/features/: Functions, Classes, Interfaces, Enums, Modules.docs/advanced/: Ownership, Generics, Async/Await, Error Handling, Memory Management.docs/stdlib/: Standard Library Overview (Math, String).docs/compiler/: CLI Reference, Architecture internals.
- Changelog: Added
changelogs.mdto track project history.