Release history

Changelog

Browse Arden releases by version and jump straight to added features, fixes, behavioral changes, and technical work.

15 tracked releases
v1.3.9 on top

v1.3.9

Benchmark & Codegen Throughput Sweep

Apr 21, 2026

ChangedFixed

Changed

Large section hidden by default to keep the page readable.

20 items
  • 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_graph compile 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-timings parsing 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.py quick-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-llvm to 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/mod lowering, which removes redundant overflow-control CFG in hot modulo/division loops such as prefix-sum and prime-count workloads when non-negative or non--1 facts 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 as histogram_heavy.
  • List alias precision: track distinct empty-list allocations through simple bindings and attach alias.scope/noalias metadata on safe list loads and stores, letting LLVM 22 eliminate unnecessary runtime alias-versioning in disjoint-list kernels such as stencil_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 eager malloc + immediate realloc churn in push-heavy builders such as sort_heavy.
  • Counted for push reservation: simple for (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 as matrix_mul.
  • Reserved-capacity push fast path: direct local list push now 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 as scatter_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/return validation 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_call now only builds/infers synthetic Expr::Call state for actual Option/Result static 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 Program snapshot instead of rebuilding the same combined AST projection separately in each shard, reducing repeated whole-project cloning work in large cold builds such as compile_project_mega_graph.
  • Object-codegen sharding diagnostics: --timings now 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 aggregate llvm emit bucket.
  • 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_graph cold compile time from roughly 20.7s to 10.4s in the benchmark harness and from about 21.0s/89.5s (size=4/8) to about 8.9s with 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_externally instead of always forcing internal linkage, which reduces backend work for cold mega-graph builds without changing exported behavior.
  • Object-codegen diagnostics: --timings now 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.

Fixed

Large section hidden by default to keep the page readable.

22 items
  • 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, PATH scanning ignores non-executable files, and direct Linux linker mode rejects *-musl with 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 reworked std.fs File.read lowering (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 remaining malloc/realloc/snprintf size casting.
  • Collection codegen throughput: replaced byte-at-a-time zero-init/list-growth copy loops with LLVM memset/memcpy intrinsics to reduce avoidable runtime overhead without changing semantics or requiring cpu=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-mold diagnostics.
  • Benchmark harness portability: generated Rust compile-benchmark projects now copy the repo .cargo linker wrapper config into their own workspace, fixing CI/macOS/Linux cargo build --release --offline failures from missing relative mold/lld wrapper paths.
  • CI LLVM install resilience: the shared install-llvm action 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-based marked callbacks so SSR/prerender builds no longer crash on formatted headings.
  • Windows linker stability: lld-link now uses escaped response files for object/library/search-path arguments, which avoids Windows command-line length failures on very large object sets such as compile_project_mega_graph while keeping temporary response-file cleanup safe on both Windows and macOS-style paths.

v1.3.8

Linker Pipeline & Stability Sweep

Apr 13, 2026

ChangedFixed

Changed

Large section hidden by default to keep the page readable.

6 items
  • Reworked native artifact production to direct LLVM object emission with linker-only backends (mold on Linux, lld on macOS/Windows).
  • Switched Cargo self-builds from pinned clang wrappers 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-64 CPU targets while keeping native-tuned perf checks.
  • Unified arden build --timings and terminal color/styling behavior with the rest of the CLI.

Fixed

Large section hidden by default to keep the page readable.

15 items
  • 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 mut ABI 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 List SIGSEGV crashes in run/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 duplicate std.io injection 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-link machine/CRT/output-path handling.
  • Fixed invalid test attribute combinations/signatures (including duplicate hooks and misplaced @Ignore), while preserving module-scoped main in 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-@Any callers cannot evade effect checks through method values.
  • Fixed generic enum failure paths to return explicit non-panic diagnostics in checked and --no-check compilation.
  • 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/xcrun to 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

Changed

Large section hidden by default to keep the page readable.

10 items
  • Upgraded compiler/tooling integration to LLVM 22 (inkwell llvm22-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.7s to 1.9s and keeping 10-file rebuilds near 0.7s.
  • Expanded arden build --timings coverage for cold/warm/rebuild runs, mixed nominal-type stress projects, and deeper codegen subphase breakdowns.
  • Reduced redundant scalar validation in codegen Assign/Return hot paths, improving 32k-function synthetic cold runs from about 1.079s to 1.061s.
  • Reduced repeated call-path lookups and small argument-buffer reallocations in hot expr_call lowering.
  • Reused per-namespace local enum sets in project rewrite hot paths, dropping XL mixed rewrite worker time from about 2.36s to 2.06s.
  • Cached mangled class symbols for rewrite call handling, cutting XL mixed rewrite worker time to about 0.15s and cold build time from about 1.10s to 0.96s.
  • Collapsed shard-local closure symbol collection into a single pass, reducing that step from about 0.02s to 0.003s on 32k-function synthetic cold builds.
  • Precomputed top-level declaration/body filtering once per pass, improving synthetic cold runs to about 1.046s (32k) and 1.068s (XL mixed).
  • Tuned default large-project object-codegen shard size from 8 to 4, improving LLVM 22 cold timings to about 1.021s (32k) and 0.908s (XL mixed) while preserving warm/incremental behavior.

v1.3.6

Compiler UX, Type/Codegen Correctness, and Project Reliability

Apr 8, 2026

AddedChangedFixed

Added

1 items
  • 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.

14 items
  • 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, and Arc, 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 like Present and Success working normally.
  • Fixed the silent-feeling arden lsp startup 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, and for, 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/Result constructors 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.

7 items
  • 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, and check with 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 lsp lifecycle logs and the generated arden test runner output with the newer neutral CLI presentation instead of the older plain-text banners.
  • Simplified arden test runtime output further by dropping runner banners and suite/summary noise in favor of plain per-test ok and skip lines 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

AddedChangedFixed

Added

2 items
  • Added arden fmt, arden lint, arden fix, arden bench, and arden 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.

5 items
  • 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.

3 items
  • Reworked project builds around .ardencache, parallel parse/import/rewrite/object stages, narrower rebuild slices, direct object emission, response-file linking, and stricter lld-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

AddedChanged

Added

Large section hidden by default to keep the page readable.

35 items
  • Threaded Async Runtime: Task<T> now uses a real thread-backed runtime with result caching.
    • async function calls now spawn task workers immediately via pthread.
    • await now 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(), and Task.await_timeout(ms) runtime methods.
    • await_timeout(ms) returns Option<T> and performs a timed join.
    • cancel() marks task as done and provides a safe default result for later await.
  • Effect System: Added function effect attributes @Pure, @Io, @Net, @Alloc, @Unsafe, @Thread, and @Any with 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.
  • C Header Bindings: Added CLI command arden bindgen to generate Arden extern(c) declarations from .h files.
    • 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.arden
    • examples/single_file/tooling_and_ffi/27_extern_c_interop/27_extern_c_interop.arden
    • examples/single_file/tooling_and_ffi/28_async_runtime_control/28_async_runtime_control.arden
    • examples/single_file/tooling_and_ffi/29_effect_inference_and_any/29_effect_inference_and_any.arden
    • examples/single_file/tooling_and_ffi/30_extern_variadic_printf/30_extern_variadic_printf.arden
    • examples/single_file/tooling_and_ffi/31_extern_abi_link_name/31_extern_abi_link_name.arden
    • examples/single_file/tooling_and_ffi/32_extern_safe_wrapper/32_extern_safe_wrapper.arden
    • examples/single_file/tooling_and_ffi/33_extern_ptr_types/33_extern_ptr_types.arden
    • examples/single_file/tooling_and_ffi/34_bindgen_workflow/34_bindgen_workflow.arden
    • examples/README.md (coverage index)

Changed

Large section hidden by default to keep the page readable.

4 items
  • Codegen Task Representation: Task<T> codegen now uses an internal runtime task handle instead of the previous direct T value 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 function and effect attributes.
  • Safety of unwrap: Option.unwrap() and Result.unwrap() now emit runtime panic+exit on invalid states instead of unchecked loads.

v1.3.3

Compiler/LSP/Docs Sync

Mar 5, 2026

AddedChangedFixed

Added

Large section hidden by default to keep the page readable.

7 items
  • Module Dot Syntax: Added semantic/codegen support for Module.function(...) while keeping Module__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.

5 items
  • Namespace Collisions: Collision handling now fails early with clear function+namespace diagnostics.
  • Documentation Consistency: Updated arden CLI 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 with realloc when length >= capacity, preventing heap corruption (malloc(): corrupted top size) in large workloads like benchmark/arden/matrix_mul.arden.
  • Map IR Block Ordering: Fixed invalid LLVM IR generation in Map.set() control-flow block ordering (late-created map_set.cont/update), which caused Clang parse failures in examples/single_file/safety_and_async/17_comprehensive/17_comprehensive.arden.

Changed

Large section hidden by default to keep the page readable.

8 items
  • Match Codegen: Expanded to support enum-style variant dispatch and payload binding flows.
  • Map Methods: set, insert, get, and contains now 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/ from docs/.
  • 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=native with a safe fallback to baseline -O3 if tuned flags are unavailable.
  • Project opt_level Wiring: arden.toml opt_level now 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 FeaturesTechnical

New Features

Large section hidden by default to keep the page readable.

24 items
  • Range Type: Full iterator-based range type for numeric sequences

    • Range<T> generic type with range(start, end) and range(start, end, step) functions
    • Iterator protocol with has_next() and next() 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

    • @Test attribute to mark test functions
    • @Ignore attribute to skip tests (with optional reason: @Ignore("not ready"))
    • @Before, @After for setup/teardown around each test
    • @BeforeAll, @AfterAll for 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)
  • 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.

16 items
  • 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 functions
    • compile_range_method() for method calls
  • Added test_runner.rs module for test discovery and execution

  • Added Attribute enum to AST for function annotations

  • Added @ token to lexer

  • Updated 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.rs module with tower-lsp integration

  • Added fuzzy string matching for error suggestions

  • Updated import_check.rs with suggestion engine

v1.3.1

Import System Fixes

Feb 22, 2026

Bug FixesTechnical

Bug Fixes

Large section hidden by default to keep the page readable.

3 items
  • Wildcard Imports for Stdlib: Fixed wildcard imports (import std.io.*;) not properly importing stdlib functions like println, 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.*; and import std.string.*; statements to multi-file project examples.

Technical

Large section hidden by default to keep the page readable.

4 items
  • import_check.rs: Added stdlib function resolution for wildcard imports
  • main.rs: Skip redundant import check during compilation phase (already done in analysis phase)
  • All examples now properly import required modules
  • Full cargo fmt and cargo clippy compliance

v1.3.0

Multi-File & Namespace System

Feb 21, 2026

Major Release: Complete Project SystemNew FeaturesConfigurationDocumentationTechnicalBehavior Changes

Major Release: Complete Project System

This release introduces a complete multi-file project system with Java-style namespaces and mandatory imports.

Configuration

1 items
  • 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.

3 items
  • 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.

7 items
  • 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, Star tokens
  • 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.

11 items
  • 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 Commands:

    • arden new <name> - Create a new project with standard structure
    • arden build - Build current project
    • arden run - Build and run current project
    • arden info - Display project information
    • arden check [file] - Check project or specific file

Behavior Changes

Large section hidden by default to keep the page readable.

4 items
  • BREAKING: Functions from other files are NOT automatically available
  • Must use import namespace.function; or import namespace.*;
  • Same-namespace functions work without imports (local scope)
  • Functions without package declaration are in global namespace

v1.2.0

Performance Push & Codegen Refactor

Feb 21, 2026

Performance & OptimizationBenchmarksCode RefactoringFixed

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.

8 items
  • LLVM Aggressive Optimizations: Switched from OptimizationLevel::Default to OptimizationLevel::Aggressive for maximum performance.
  • Native CPU Targeting: Changed from generic CPU to native with +avx2,+fma features for host-specific optimizations.
  • Function Attributes: Added optimization attributes:
    • alwaysinline for small functions (≤3 params)
    • nounwind for exception-free code
    • willreturn for 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

2 items
  • LLVM Attribute Errors: Removed problematic attributes (uwtable, call_convention) causing Clang failures.
  • Code Formatting: Applied cargo fmt across entire codebase.

Benchmarks

Large section hidden by default to keep the page readable.

3 items
  • 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.

5 items
  • Modular Architecture: Split monolithic codegen.rs (6666 lines) into focused modules:
    • codegen/core.rs (3876 lines): Main codegen logic
    • codegen/types.rs (1590 lines): Built-in type implementations
    • codegen/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

AddedChangedFixed

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.

28 items
  • Args Module: Introduced support for command-line arguments via the Args object.
    • Args.count(): Returns the number of arguments.
    • Args.get(index): Retrieves a specific argument.
  • Str Module: Introduced the Str static object for string manipulation (renamed from String to 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(), and Math.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.

3 items
  • 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

1 items
  • 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

AddedChangedFixed

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.

7 items
  • File I/O Support: Added native support for file system operations via the File static 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.arden and app_notes.arden demonstrating file system interactions.
  • Test Infrastructure: Added test_examples.bat for automated verification of all example programs.

Changed

2 items
  • 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

1 items
  • 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

Fixed

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.

4 items
  • 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 for List<T> in codegen.
  • Match Statements: Fixed invalid LLVM IR generation (orphan blocks) for match statements.
  • Clippy Warnings: Resolved collapsible_match and other lints in codegen.rs.

v1.1.1

Documentation Rebuild

Dec 27, 2025

Major ChangesAddedChanged

This release reorganized the project’s docs into a real documentation tree and turned the repository root into a cleaner entry point.

Major Changes

2 items
  • Complete Documentation Refactor: The documentation has been completely overhauled and moved to a dedicated docs/ directory.
  • Simplified README: README.md is now a clean entry point, linking to specific documentation sections.

Changed

2 items
  • 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.

8 items
  • 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.md to track project history.
Built and maintained by TheRemyyy. Arden is open source under Apache 2.0 and published at theremyyy.dev.