Repository navigation
Releases
Eliscript v0.1.2
Eliscript 0.1.2
Highlights
- Unified Lisp execution and AOT compilation behind
eliscript, with shared.el/.elisemantics 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
Highlights in v0.1.1
- 100% Pure Eliscript Dual-Host Runtime & Worker Bridge: Rewrote
runtime/emacs-compat.eli(5,927lines of pure Eliscript,0js*capsules),tests/eliscript/emacs-compatible-syntax.eli,tests/seed-symbol-reservation.test.eli, andtools/performance/version-comparison.eliin pure Eliscript, adding industrial Emacs Lisp primitives (?char,&optional/&rest/&key, mutablecl-defstruct,setf/cl-incf/cl-decf/push/pop,pcase,cl-labels/cl-loop,rx, pure Eliscript UTF-8 & SHA-256secure-hash, virtualwith-temp-buffer) andcompileCompatElispModule/eliscript-compat-offload-callfor unmodified.elmodule execution and persistent Worker acceleration. - Compiler Codegen Size & TDZ Narrowing (
-6.57%Compiler Output,2.08xFaster Compile): Narrowed temporal dead zone (__eliscript_tdz_*) guards to genuinely uninitialized forward references and extracted shared operation helpers intoruntime/prelude.eli, reducing the 13-module bootstrap compiler output from800,209 Bto747,647 B(-52,562 B/-6.57%) and Stage 3 bundle size by-30.03%vsv0.0.1. - Native
.el&.eliProject Build Support & Platform Coding Conventions: Added first-class.eland.elientry and relative module import support acrosseliscript-build,eliscript-check,eliscript-watch, and portable project sessions (withELI-PJ0014collision diagnostics), and established the platform coding conventions indocs/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.elmodules (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
Highlights in v0.1.0
- 100% Emacs Lisp Compatible Core: Standard S-expression reader, Lisp-2 dual namespace (
symbol-function/symbol-value/symbol-plist), uniquenilfalsiness (0,"",[], and all extension sentinels are truthy), lexical closures coexisting with dynamicdefvarspecial variables, mutable native collections, Emacs integer division/modulo, condition hierarchy (catch/throw,condition-case,unwind-protect), and fulldefmacro. - Explicit
1 + 5 + 2Extension 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 Emacsseq.el/map.el,cl-defstruct-persistentwith JSON Schema roundtrip, 50,000-depth stack-saferecur,defmodulelexical privacy, structured concurrency (with-async-scope,async-channel,engine-bind/engine-revoke!), and:numeric-f64/:memory-u32WebAssembly & ARM64 Native execution. - Full Unit & Differential Oracle Verification: 270 ERT tests, 24 targeted
0.1.0Bun 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
Highlights in v0.0.4
- Zero Tracked
.mjsSources: Eliminated all 516 tracked.mjsfiles from Git; all runtime, platform, browser, host, tool, and test JavaScript modules are synthesized in-place from.elisources 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.3and 1.92x faster than native Emacs Lisp 31.1), 299x fastertake-last(chunked reverse traversal), 3.06x fastersort(in-place 32-way trie materialization + direct comparator), and 2.22x fastergroup-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-internalrelease-benchmarkskill, 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
Highlights in v0.0.3
- 12,000-Depth Persistent Zipper Performance: Optimized managed persistent vectors, protocol method dispatch, and
zipperpath/tree reconstruction (~67 ms end-to-end for 12,000-level deep descent,pathmaterialization, andreplace+rootreconstruction). - Extensionless &
.mjsPackage 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/letbindings, comparison/boolean/predicate constant folding, algebraic identity simplification, dead conditional branch elimination (optimizeProgramIr), token-level JS whitespace compaction (optimizeJavaScript), andclosureCompilertransform hooks ineliscript/browser. - Repository Hygiene: Removed 60 obsolete/unreferenced legacy
.mjsand temporary build files.
Eliscript 0.0.2
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 --helpRequires 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 -> stage3JavaScript self-hosting bootstrap chain (tools/backends/), wherestage2andstage3produce 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-macosandarm64-linux) backed by the linear-memory managed runtime (bootstrap/runtime/). - Pure browser hot-reload compiler: Single-file browser compiler bundle (
eliscript/browser/compiler,367 KBminified), in-memory compile host (eliscript/browserexportingcreateEliscriptHost,runSource, andmountEliscriptScripts), module worker (eliscript/browser/worker.mjs), and standalone<script>hot-reload loader (eliscript/browser/loader,101 KBminified) that compiles inline<script type="text/eliscript">, external<script type="text/eliscript" src="...">, anddata-eliscript="..."attributes directly in the browser via Blob ESM URLs. - Language: Modules with
importandexport;defmacrowithgensymand source-location preservation;defprotocol,defrecord, anddeftype;defmulti/defmethod; multi-arity functions; destructuring;loop/recurand 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-modeandeliscript-replineditor/, backed by a persistent framing worker (tools/worker/); command-line entry pointseliscript,eliscript-build,eliscript-check,eliscript-format,eliscript-eval,eliscript-watch, andeliscript-compiler.
Evidence
- All 35 core acceptance criteria (
AC-01throughAC-35) areAcceptedat100.0%(contracts/acceptance-criteria.json). - Four-stage JavaScript self-hosting fixed point (
stage0 -> stage1 -> stage2 -> stage3) verified with byte-identicalstage2andstage3product closures. - Clean consumer package installation (
tests/release-package-install-selfhosted.test.mjs) verified across shared three-output user programs (javascript,wasm, andnative) using the packagedstage3CLI 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.2are JavaScript (node,bun, and browser); self-hosted standalone WASM and native compiler binary hosts are outside0.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-x64compatibility cells incontracts/compatibility-matrix.jsonremain optional.- Proving-ground application specs (
specs/10throughspecs/14) remainIn progress.
License
GPL-3.0-or-later. See LICENSE.
Eliscript 0.0.1
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 --helpThe 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.elifiles. - Language — Lisp-shaped syntax with tail calls, macros, modules, protocols,
immutable Records,deftype/reifyprotocol 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-modewith 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, andeliscript-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
dogfoodAction 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.