Changes in version 0.1.4 (2026-03-19) Performance - Reduce CRAN test runtime via uniform test thinning: on CRAN, run every 3rd test block per file (controlled by make_cran_thinner(keep_every = 3L)), cutting ~67% of per-test work while keeping full coverage off CRAN. - Reduce TCO test recursion depth on CRAN (6000 vs 10000) to further cut runtime while still validating tail-call optimization well beyond R's default stack limit. Changes in version 0.1.3 CRAN Compliance - Remove "for R" from package title per CRAN policy. - Replace bare cat() calls with S3 print methods (arl_cli_output, arl_help_doc, arl_coverage_report) so console output follows CRAN guidelines. - Require explicit output_file argument in report_html() and report_json() — no longer write to the working directory by default. - Convert example vignette code chunks from {r} read-and-cat wrappers to {arl} chunks that execute via the knitr engine. Changes in version 0.1.2 Performance - Pre-build vignettes in the tarball using the .Rmd.orig + stub pattern, cutting ~110s from R CMD check vignette rebuild time. - Speed up test suite by avoiding stdlib prelude loading in tests that don't need it. - Reduce TCO test recursion depth to reduce runtime while still checking deeper recursion than R's defaults allow. Bug Fixes - Fix multiple temporary file and connection leaks uncovered by stricter CRAN-like checking. - make install now ships pre-built vignettes (previously installed without them). Infrastructure - make check now mirrors CRAN settings more closely and prints wall-clock time for the R CMD check step. - CI fetches gh-pages branch so benchmark data is available during vignette rendering. Changes in version 0.1.1 Bug Fixes - Fixed stale module cache poisoning when ambient macros differ between sessions. The module cache now computes a fingerprint of all macros visible in a module's parent environment chain (not just the prelude) and invalidates entries when macros change. - Fixed missing dependency declaration in looping.arl. - Fixed Windows backslash path handling in tests. - Fixed FileDeps tests to work during R CMD check. - Fixed bad URLs in README and vignettes. - Included vignette files in built tarballs (.Rbuildignore fix). Testing - Tests now disallow unexpected/unhandled warnings. - Added make coverage-test-file target for single-file coverage testing. Changes in version 0.1.0 Initial release of arl, a Scheme-inspired Lisp dialect embedded in R. Language - Special forms: quote, if, define, set!, lambda, begin, defmacro, quasiquote/unquote/unquote-splicing, and, or, while, delay, import, and module. - Truthiness: #f, #nil, and 0 are falsy; everything else is truthy. - Cons cells: First-class dotted pairs, with both cons-cell and R-native list representations. - Destructuring: Pattern destructuring in define, set!, let, and lambda, including nested patterns, rest parameters, and defaults. - Multiple values: values and call-with-values. - Continuations: call-cc via R's native callCC. Macro System - Compile-time code transformation with quasiquotation templates. - Hygiene via gensym and capture. - Introspection with macro?, macroexpand, macroexpand-1, and macroexpand-all. - Documentation attachment via ;;' comments. Module System - Named and anonymous modules with explicit or export-all exports. - Qualified access via / syntax (e.g. math/inc). - Import modifiers: :refer, :as, :rename, :reload. - Modules are first-class environment objects with locked bindings. - Re-export support, circular dependency detection, and module caching. - Introspection: module?, module-name, module-exports, module-ref. Compiler - Single-pass compilation from Arl to R expressions. - Self-tail-call optimization: rewrites self-recursive functions in tail position as while loops. - Constant folding, dead code elimination, strength reduction, identity lambda elimination, boolean flattening, and arithmetic infix compilation. Standard Library 22 modules (~800 definitions) auto-loaded via a prelude: - Core and logic: when, unless, cond, error handling, identity. - Types and equality: Full suite of type predicates; equal?, eqv?, eq?. - List and sequences: append, reverse, take, drop, nth, range, repeat, cycle, zip, and more. - Functional: map, filter, reduce, fold, compose, partial, juxt, complement, constantly. - Control flow: try-catch, finally, condition signaling and handling. - Binding forms: let, let*, letrec with destructuring. - Threading macros: ->, ->>, as->, some->, some->>, cond->, cond->>. - Looping: until, do-list, Clojure-style loop/recur. - Math: inc, dec, abs, sqrt, trigonometric functions, and more. - Strings: str, string-concat, string-split, and friends. - I/O: File reading/writing, display, and formatting. - Data structures: Hash-backed dict and set types with full operation suites; defstruct macro for S3-backed record types. - Sorting: list-sort, sort-by, merge-sorted, stable-sort. - Assertions: assert-equal, assert-true, assert-false, and others. R Interoperability - Direct access to all R base and default-package functions. - Keyword arguments (:name value), formulas, $, [, [[, and @. - r-eval and r-call for dynamic R evaluation. - Bidirectional data exchange: define R objects into Arl, extract results back to R. - Configurable R package visibility. Developer Tools - REPL: Interactive prompt with multi-line input, readline history, bracketed paste, and error recovery. - CLI: Script execution, --eval expressions, quiet mode, bare engine mode, and stdin support. - Help system: (help topic) dispatches to special forms, builtins, stdlib docstrings, or R help. doc and doc! for programmatic access. - Coverage tracking: Line-level and branch-level instrumentation with console, HTML, and JSON reports. - Knitr engine: {arl} code chunks in R Markdown with persistent engine state and syntax highlighting. Documentation - Vignettes: getting started, standard library reference, compiler and internals, and troubleshooting.