Skip to content

Releases

Eliscript v0.1.2

Choose a tag to compare

@liuchong liuchong released this 03 Nov 01:01
v0.1.2
1162cde

Eliscript 0.1.2

Highlights

  • Unified Lisp execution and AOT compilation behind eliscript, with shared .el/.eli semantics and the maintained Lisp runtime.
  • Correct lexical and dynamic scope, feature loading, delayed after-load forms, error handling, and extension activation across GNU Emacs, the JavaScript interpreter, and generated AOT modules.
  • Real async continuations preserve dynamic/special bindings across pending waits, nested loops, conditions, cleanup, cancellation, and bounded channels without replaying completed effects.
  • Keymap prefixes preserve live inheritance, nested composition, precedence, copying, and independent writes through copied views.
  • WASM and C/native ABI emission preserves scalar truth values, comparison operand order, memory boundaries, negative zero, and statement/value distinctions.
  • The compiler runs as JavaScript; JavaScript, WASM, and native are output targets. WASM/native compiler-host variants are not part of this release.

Verification

The reviewed compiler/runtime changes passed independent cross-review at 8c7b7ef, including 139 tests / 786 assertions, 30 Emacs tests, strict byte compilation, CLI checks, and nine contract/integrity gates. Release preparation separately passed the full 35-test JavaScript bootstrap suite (including exact stage2/stage3 comparison), eight package-surface tests and nine release-integration tests. The final 4,783,469-byte tarball passed clean installation, installed .el/.eli interpretation and AOT, and real shared-source JavaScript/WASM/native execution with authenticated stage3 identity and released runtime roots. The existing 5 MB budget and debug assets are preserved; npm publication uses these exact tested bytes.

Requires Node.js >=24.0.0 / Bun >=1.4.0 as declared by the package. Backend-specific native compilation requires the corresponding platform toolchain.

测试与四维性能基准摘要

  • 对比维度: Emacs 30.2 (当前最新版) | 上一个大版本: N/A (尚无上一大版本) | 上一个最近的小版本: v0.1.1 | 最新版: v0.1.2
  • 完整测试与基准报告附件: 详见 Release 附件 eliscript-0.1.2-benchmark-report.md 与 eliscript-0.1.2-benchmark-report.json
基准工作负载 最新版耗时 vs Emacs Lisp vs 上一大版本 vs 上一小版本
first(Vector, N=10,000) 0.08 µs (0.00008 ms) 1.62x N/A 1.01x
last(Vector, N=10,000) 0.44 µs (0.00044 ms) 46.36x N/A 1.00x
take-last(64, N=10,000) 4.55 µs (0.00455 ms) 4.45x N/A 0.98x
[VALUE_EQUAL] / compare(sameVec, N=10,000) 0.25 µs (0.00025 ms) 70.97x N/A 0.48x
sort(Vector, N=10,000) 1.102 ms 1.20x N/A 0.98x
group-by(x % 100, N=10,000) 0.744 ms 3.63x N/A 1.04x
frequencies(1,000 keys, N=100,000) 8.036 ms 2.03x N/A 1.05x
12,000-depth Zipper (down*12k + path + replace + root) 2.626 ms 1.50x N/A 1.34x
score-values(N=10,000 x 10 rounds) 1.259 ms 16.58x N/A 1.00x

v0.1.1

Choose a tag to compare

@liuchong liuchong released this 28 Oct 19:47
v0.1.1
cd2ec2a

Highlights in v0.1.1

  • 100% Pure Eliscript Dual-Host Runtime & Worker Bridge: Rewrote runtime/emacs-compat.eli (5,927 lines of pure Eliscript, 0 js* capsules), tests/eliscript/emacs-compatible-syntax.eli, tests/seed-symbol-reservation.test.eli, and tools/performance/version-comparison.eli in pure Eliscript, adding industrial Emacs Lisp primitives (?char, &optional/&rest/&key, mutable cl-defstruct, setf/cl-incf/cl-decf/push/pop, pcase, cl-labels/cl-loop, rx, pure Eliscript UTF-8 & SHA-256 secure-hash, virtual with-temp-buffer) and compileCompatElispModule / eliscript-compat-offload-call for unmodified .el module execution and persistent Worker acceleration.
  • Compiler Codegen Size & TDZ Narrowing (-6.57% Compiler Output, 2.08x Faster Compile): Narrowed temporal dead zone (__eliscript_tdz_*) guards to genuinely uninitialized forward references and extracted shared operation helpers into runtime/prelude.eli, reducing the 13-module bootstrap compiler output from 800,209 B to 747,647 B (-52,562 B / -6.57%) and Stage 3 bundle size by -30.03% vs v0.0.1.
  • Native .el & .eli Project Build Support & Platform Coding Conventions: Added first-class .el and .eli entry and relative module import support across eliscript-build, eliscript-check, eliscript-watch, and portable project sessions (with ELI-PJ0014 collision diagnostics), and established the platform coding conventions in docs/emacs-compatible-syntax.md (§14).
  • Comprehensive Verification & Differential Oracle: Verified across 26 ERT suites (T01–T16), 23 project build ERT tests, 110 Bun syntax/runtime tests, 52 native Emacs vs. JS Differential Oracle programs, 9 unmodified industrial .el modules (CHE-01..CHE-07), and all 14 repository contract gates.

测试与四维性能基准摘要

  • 对比维度: Emacs 30.2 (当前最新版) | 上一个大版本: N/A (尚无上一大版本) | 上一个最近的小版本: v0.1.0 | 最新版: v0.1.1
  • 完整测试与基准报告附件: 详见 Release 附件 eliscript-0.1.1-benchmark-report.md 与 eliscript-0.1.1-benchmark-report.json
基准工作负载 最新版耗时 vs Emacs Lisp vs 上一大版本 vs 上一小版本
first(Vector, N=10,000) 0.25 µs (0.00025 ms) 0.94x N/A 0.59x
last(Vector, N=10,000) 1.65 µs (0.00165 ms) 19.72x N/A 0.47x
take-last(64, N=10,000) 7.17 µs (0.00717 ms) 4.32x N/A 1.24x
[VALUE_EQUAL] / compare(sameVec, N=10,000) 0.66 µs (0.00066 ms) 48.28x N/A 0.70x
sort(Vector, N=10,000) 1.873 ms 1.10x N/A 1.17x
group-by(x % 100, N=10,000) 1.313 ms 3.55x N/A 1.03x
frequencies(1,000 keys, N=100,000) 11.835 ms 2.25x N/A 1.10x
12,000-depth Zipper (down*12k + path + replace + root) 4.521 ms 1.43x N/A 0.88x
score-values(N=10,000 x 10 rounds) 1.815 ms 20.09x N/A 1.02x

v0.1.0

Choose a tag to compare

@liuchong liuchong released this 22 Oct 19:03
v0.1.0
c79e8c0

Highlights in v0.1.0

  • 100% Emacs Lisp Compatible Core: Standard S-expression reader, Lisp-2 dual namespace (symbol-function / symbol-value / symbol-plist), unique nil falsiness (0, "", [], and all extension sentinels are truthy), lexical closures coexisting with dynamic defvar special variables, mutable native collections, Emacs integer division/modulo, condition hierarchy (catch/throw, condition-case, unwind-protect), and full defmacro.
  • Explicit 1 + 5 + 2 Extension Architecture: Definition-identity-scoped (require 'eliscript) umbrella and portable sub-libraries (eliscript-data, eliscript-bind, eliscript-async, eliscript-module, eliscript-contract) plus explicit host/backend libraries (eliscript-js, eliscript-abi).
  • AI-Native Contracts, Persistent Data & Multi-Backend ABI: Static and runtime (declare (eliscript ...)) verification, 7 persistent collections integrated with Emacs seq.el/map.el, cl-defstruct-persistent with JSON Schema roundtrip, 50,000-depth stack-safe recur, defmodule lexical privacy, structured concurrency (with-async-scope, async-channel, engine-bind/engine-revoke!), and :numeric-f64 / :memory-u32 WebAssembly & ARM64 Native execution.
  • Full Unit & Differential Oracle Verification: 270 ERT tests, 24 targeted 0.1.0 Bun suites, and a 52-program native Emacs vs. JavaScript Differential Oracle.

测试与四维性能基准摘要

  • 对比维度: Emacs 30.2 (当前最新版) | 上一个大版本: N/A (尚无上一大版本) | 上一个最近的小版本: v0.0.4 | 最新版: v0.1.0
  • 完整测试与基准报告附件: 详见 Release 附件 eliscript-0.1.0-benchmark-report.md 与 eliscript-0.1.0-benchmark-report.json
基准工作负载 最新版耗时 vs Emacs Lisp vs 上一大版本 vs 上一小版本
first(Vector, N=10,000) 0.13 µs (0.00013 ms) 1.62x N/A 0.89x
last(Vector, N=10,000) 0.59 µs (0.00059 ms) 48.88x N/A 0.63x
take-last(64, N=10,000) 5.26 µs (0.00526 ms) 5.44x N/A 0.91x
[VALUE_EQUAL] / compare(sameVec, N=10,000) 0.46 µs (0.00046 ms) 52.33x N/A 0.57x
sort(Vector, N=10,000) 1.919 ms 0.94x N/A 0.88x
group-by(x % 100, N=10,000) 1.141 ms 3.47x N/A 0.93x
frequencies(1,000 keys, N=100,000) 11.243 ms 2.10x N/A 0.98x
12,000-depth Zipper (down*12k + path + replace + root) 3.593 ms 1.69x N/A 1.01x
score-values(N=10,000 x 10 rounds) 1.604 ms 20.37x N/A 1.07x

v0.0.4

Choose a tag to compare

@liuchong liuchong released this 22 Oct 14:55
v0.0.4
78a7438

Highlights in v0.0.4

  • Zero Tracked .mjs Sources: Eliminated all 516 tracked .mjs files from Git; all runtime, platform, browser, host, tool, and test JavaScript modules are synthesized in-place from .eli sources during bootstrap.
  • ClojureScript-Style JS Runtime & Stdlib Optimization: Achieved 1.95 ms on the 12,000-depth persistent Zipper benchmark (46.2x faster than v0.0.3 and 1.92x faster than native Emacs Lisp 31.1), 299x faster take-last (chunked reverse traversal), 3.06x faster sort (in-place 32-way trie materialization + direct comparator), and 2.22x faster group-by (transient vector bucket accumulation).
  • Normalized 4-Dimension Version & Native Emacs Lisp Benchmark: Added automated 4-dimension performance benchmarking (Emacs Lisp, previousMajor, previousMinor, latest), project-internal release-benchmark skill, and GitHub Actions release integration.

测试与四维性能基准摘要

  • 对比维度: Emacs 30.2 (当前最新版) | 上一个大版本: N/A (尚无上一大版本) | 上一个最近的小版本: v0.0.3 | 最新版: v0.0.4
  • 完整测试与基准报告附件: 详见 Release 附件 eliscript-0.0.4-benchmark-report.md 与 eliscript-0.0.4-benchmark-report.json
基准工作负载 最新版耗时 vs Emacs Lisp vs 上一大版本 vs 上一小版本
first(Vector, N=10,000) 0.29 µs (0.00029 ms) 0.88x N/A 6.02x
last(Vector, N=10,000) 0.90 µs (0.00090 ms) 33.75x N/A 9.25x
take-last(64, N=10,000) 8.56 µs (0.00856 ms) 3.52x N/A 73.08x
[VALUE_EQUAL] / compare(sameVec, N=10,000) 0.23 µs (0.00023 ms) 166.88x N/A 2358.45x
sort(Vector, N=10,000) 2.335 ms 1.04x N/A 10.39x
group-by(x % 100, N=10,000) 1.874 ms 2.76x N/A 3.42x
frequencies(1,000 keys, N=100,000) 15.491 ms 1.99x N/A 2.26x
12,000-depth Zipper (down*12k + path + replace + root) 6.391 ms 1.21x N/A 47.05x
score-values(N=10,000 x 10 rounds) 1.953 ms 20.44x N/A 1.00x

v0.0.3

Choose a tag to compare

@liuchong liuchong released this 22 Oct 09:21
v0.0.3
0be60ef

Highlights in v0.0.3

  • 12,000-Depth Persistent Zipper Performance: Optimized managed persistent vectors, protocol method dispatch, and zipper path/tree reconstruction (~67 ms end-to-end for 12,000-level deep descent, path materialization, and replace + root reconstruction).
  • Extensionless & .mjs Package Subpath Imports: Both (import "eliscript/runtime/core/order" sort) and (import "eliscript/runtime/core/order.mjs" sort) are supported across Node, Bun, Browser hot-reload, and the Playground.
  • Closure-Style IR & JavaScript Optimization: Added constant propagation across immutable defconst/let bindings, comparison/boolean/predicate constant folding, algebraic identity simplification, dead conditional branch elimination (optimizeProgramIr), token-level JS whitespace compaction (optimizeJavaScript), and closureCompiler transform hooks in eliscript/browser.
  • Repository Hygiene: Removed 60 obsolete/unreferenced legacy .mjs and temporary build files.

Eliscript 0.0.2

Choose a tag to compare

@liuchong liuchong released this 22 Oct 06:37
v0.0.2
7901f00

Eliscript 0.0.2

This release completes the four-stage JavaScript self-hosted compiler fixed point (stage0 -> stage1 -> stage2 -> stage3), ships the multi-target backends emitting JavaScript ES modules, standalone WebAssembly binaries, and native ARM64 executables from a shared intermediate representation, and adds the standalone pure-browser hot-reload compiler (eliscript/browser/loader and eliscript/browser).

Install

npm install eliscript
npx eliscript --help

Requires Node >= 24.0.0 (or Bun >= 1.4.0). The published tarball (4.7 MB packed, 32.2 MB unpacked) carries the stage-3 self-hosted compiler (dist/bootstrap/compiler.mjs), the single-file browser compiler and hot-reload loader (dist/browser/compiler.js, dist/browser/loader.js), the runtime, the standard library, and the multi-target backend adapters, so consumers need neither Emacs nor a local bootstrap step.

For zero-build in-browser compilation and hot reload, load dist/browser/loader.js directly in HTML:

<script defer src="https://unpkg.com/eliscript@0.0.2/dist/browser/loader.js"
        data-eliscript="./app.eli"></script>

<script type="text/eliscript">
(module inline-app
  (import "eliscript/platform/browser" query set-text!)
  (let ((heading (query document "h1")))
    (when heading
      (set-text! heading "Compiled live in the browser"))))
</script>

What is in this release

  • Four-stage self-hosted compiler: Complete stage0 -> stage1 -> stage2 -> stage3 JavaScript self-hosting bootstrap chain (tools/backends/), where stage2 and stage3 produce byte-identical compiler artifacts across all 13 compiler modules (dist/stage3-release.json, dist/compiler-artifact.json).
  • Multi-target backends (JavaScript, WASM, Native ARM64): Shared portable compiler frontend (reader -> expander -> analyzer -> lower -> IR) with three backend code generators (bootstrap/backends/) emitting standard ES modules, standalone WebAssembly modules (.wasm), and native ARM64 executables (arm64-macos and arm64-linux) backed by the linear-memory managed runtime (bootstrap/runtime/).
  • Pure browser hot-reload compiler: Single-file browser compiler bundle (eliscript/browser/compiler, 367 KB minified), in-memory compile host (eliscript/browser exporting createEliscriptHost, runSource, and mountEliscriptScripts), module worker (eliscript/browser/worker.mjs), and standalone <script> hot-reload loader (eliscript/browser/loader, 101 KB minified) that compiles inline <script type="text/eliscript">, external <script type="text/eliscript" src="...">, and data-eliscript="..." attributes directly in the browser via Blob ESM URLs.
  • Language: Modules with import and export; defmacro with gensym and source-location preservation; defprotocol, defrecord, and deftype; defmulti / defmethod; multi-arity functions; destructuring; loop / recur and general automatic tail-call optimization; cond, case, try / catch / finally, async / await; and JavaScript interop (js-call, js-get, js-set!, js-new, js-obj, js-array).
  • Data: Persistent lists, HAMT maps and sets, persistent vectors and queues, transient builders, structural equality and hashing, metadata, zippers, tree walk, sorted collections, lazy sequences, and transducers.
  • Runtime: Host-free runtime (runtime/) and 30 standard-library modules (stdlib/*), with explicit capability packages (platform/browser, platform/worker, platform/http).
  • Emacs integration & CLI: eliscript-mode and eliscript-repl in editor/, backed by a persistent framing worker (tools/worker/); command-line entry points eliscript, eliscript-build, eliscript-check, eliscript-format, eliscript-eval, eliscript-watch, and eliscript-compiler.

Evidence

  • All 35 core acceptance criteria (AC-01 through AC-35) are Accepted at 100.0% (contracts/acceptance-criteria.json).
  • Four-stage JavaScript self-hosting fixed point (stage0 -> stage1 -> stage2 -> stage3) verified with byte-identical stage2 and stage3 product closures.
  • Clean consumer package installation (tests/release-package-install-selfhosted.test.mjs) verified across shared three-output user programs (javascript, wasm, and native) using the packaged stage3 CLI and installed runtimes.
  • Documentation site, API index, specifications, and interactive browser playground published at https://liuchong.org/eliscript/ and compiled live in the browser via docs/pages/loader.eli.

Known gaps

  • All compiler hosts in 0.0.2 are JavaScript (node, bun, and browser); self-hosted standalone WASM and native compiler binary hosts are outside 0.0.2.
  • Deep 12,000-step persistent zipper stress on standalone WASM and native binary targets remains performance-unqualified in 0.0.2; functional verification uses the bounded small runtime profile (STAGE3_FUNCTIONAL_RUNTIME_PROFILE=small) with performance acceptance explicitly deferred (ELISCRIPT_DEFER_PERFORMANCE_ACCEPTANCE=1).
  • linux-x64 compatibility cells in contracts/compatibility-matrix.json remain optional.
  • Proving-ground application specs (specs/10 through specs/14) remain In progress.

License

GPL-3.0-or-later. See LICENSE.

Eliscript 0.0.1

Choose a tag to compare

@liuchong liuchong released this 15 Sep 15:35
v0.0.1
5f4ba0c

Eliscript 0.0.1

Eliscript is an Emacs Lisp-flavored language that compiles to modern
ECMAScript modules. The compiler is self-hosted: an Emacs Lisp seed compiles the
compiler that is written in Eliscript, and both generations produce byte-identical
output.

Install

npm install eliscript
npx eliscript --help

The tarball carries the generated compiler, so a consumer needs no Emacs.
Building the compiler from source does need Emacs; prepack runs that build, so
a published tarball is always derived from the sources it ships.

What is in this release

  • Compiler — Emacs Lisp seed, self-hosted compiler, deterministic formatter,
    versioned canonical IR, project graph planning with an incremental cache, and
    Source Maps that name .eli files.
  • Language — Lisp-shaped syntax with tail calls, macros, modules, protocols,
    immutable Records, deftype/reify protocol values, case/condp
    dispatch, and multi-arity named, anonymous, async, and portable functions.
  • Data — persistent List, Vector, Map, Set, and Queue with value equality,
    transients, lazy sequences, and transducers.
  • Runtime — host-free runtime semantics, frozen regular-expression
    patterns, and a long-lived Emacs-to-JavaScript worker.
  • Browser — an in-memory multi-file compile host, a module worker, and a
    compiler bundled for the browser. The
    playground compiles and
    runs Eliscript in the page; the documentation site's own behaviours are
    Eliscript compiled in the browser.
  • Emacs integration — eliscript-mode with Flymake diagnostics and
    eliscript-repl.
  • Command line — eliscript, eliscript-build, eliscript-check,
    eliscript-format, eliscript-eval, eliscript-org, eliscript-portable,
    eliscript-seed, eliscript-seed-build, and eliscript-watch.
  • dogfood — the static-site application under examples/dogfood/, and the
    packaged Action built from it.

Evidence

  • Retained core acceptance: 35 of 35 mandatory criteria pass, 0 incomplete, 0
    failed, all five evidence groups complete, and no blocking defects.
  • This revision: 457 tests across 115 files in the core suite, 210 across 23
    files in the application suite, and a browser matrix that drives Chromium,
    Firefox, and WebKit at three viewports each.
  • The published site is generated by the repository's own tooling and served
    from https://liuchong.org/eliscript/.

Known gaps

  • The Linux x64 compatibility cells are optional in the contract and carry no
    retained reports; macOS arm64 is the required acceptance platform.
  • The proving-ground specifications are marked In progress: the application is
    exercised by its tests and published, and its own acceptance set is not
    complete.
  • The dogfood Action is distributed as a standalone package; its Marketplace
    listing is a separate publication step.

License

GPL-3.0-or-later. The compiler and standard library sources ship with the
generated output they produce, which is the preferred form for modification.