A dual-dialect APL interpreter — pure Rust compiled to WebAssembly
The Interpreter
Written entirely from scratch in Rust — no dependencies on any existing APL implementation.
Supports two dialects: GNU APL (default) and Dyalog APL. Switch with ⎕DIALECT←'dyalog'.
Dialect Compatibility
Feature
GNU APL
Dyalog
Core Primitives
Scalar fns + - × ÷ * ⍟ | ⌈ ⌊ ! ○
✅
✅
Structural ⍴ ⍉ , ⍪ ⌽ ⊖ ↑ ↓ ⊂ ⊃ ⊆
✅
✅
Search ⍳ ⍸ ∊ ⍷ ∪ ∩ ⍋ ⍒ ≡ ≢
✅
✅
Logic = ≠ < > ≤ ≥ ∨ ∧ ⍱ ⍲ ~
✅
✅
Math ⊥ ⊤ ⌹ ? !
✅
✅
Operators
Core / \ ⌿ ⍀ ¨ ⍨ ⍣ ∘ .
✅
✅
Rank ⍤
—
✅
Over ⍥
—
✅
At @
—
✅
Key ⌸
—
✅
Stencil ⌺
—
✅
Variant ⍠
—
✅
Control Flow
Dfns {⍺ ⍵}
✅
✅
Tradfns ∇
✅
✅
Guards cond: expr
✅
✅
:If :ElseIf :Else :EndIf
—
✅
:For :In :EndFor
—
✅
:While :EndWhile
—
✅
:Repeat :Until
—
✅
:Select :Case :EndSelect
—
✅
:Leave :Continue
—
✅
System Functions
⎕IO ⎕TS ⎕UCS ⎕CT ⎕PP ⎕PW
✅
✅
⎕JSON ⎕CSV ⎕XML
—
✅
⎕NS ⎕NC ⎕NL ⎕CLASS
—
✅
⎕NGET ⎕NPUT ⎕NEXISTS ⎕MKDIR
—
✅
⎕C ⎕DT ⎕DL ⎕VFI ⎕SIGNAL
—
✅
⎕TRAP ⎕DMX
—
⚠
Test Coverage
Verified against the official GNU APL test suite and
137 Dyalog-specific tests:
All files, settings, and session history are stored in your browser's
localStorage with persistent storage requested.
PersistenceChecking…
Storage used—
Storage quota—
⚠ Back up your work regularly. Use the Export function in the file tree
to download your files. Browser storage can be cleared by the user or the browser at any time.
Technology
Rust → WebAssembly — compiled with wasm-bindgen
CodeMirror 5 — syntax-highlighted APL editing
Zero server dependency — runs entirely client-side