Skip to content

Feature matrix

βœ… = works end-to-end with a passing run test Β· 🚧 = partial Β· ❌ = not yet

FeatureStatus
^ entry point, native compile + JIT runβœ…
Num, arithmetic, comparison, logical, ternaryβœ…
Text built-in: literals, +, .size, .lengthβœ…
Text comparison: ==/!= (equality), </<=/>/>= (lexicographic)βœ…
Text methods: split/trim/trimStart/trimEnd/replaceAll/replace/repeat/contains/indexOf/slice/toUpper/toLower (chainable; grapheme-based)βœ…
Ad-hoc overloading: same-named typed definitions, exact-type dispatchβœ…
Operator overloading as a type member (+, comparisons, … with it the left operand); built-ins as overloadsβœ…
Boolβœ…
Unit type / value ($)βœ…
Arrays: literals, .size, [index]βœ…
Array methods: map/filter/reduce/each/find/at (chainable; lambda args inlined)βœ…
Array +: concat []T + []T, append []T + T, prepend T + []T β†’ new []T (non-mutating)βœ…
Maps [|K => V|]: literals, .size, get (safe, Result; no bracket indexing)/has/set/remove/keys/values/each; keys Num/Text/Bool or a user type; immutableβœ…
Sets [|T|]: literals, .size, has/add/remove/items/each, algebra +/-/+- (union/difference/intersection); immutableβœ…
Map/Set user-defined key types (via a % hash hook + == member)βœ…
Records + field accessβœ…
Named record types + methods (it)βœ…
In-place mutation of := records: field writes (obj.f := v) + setter methodsβœ…
Functions, recursion, blocks, type inferenceβœ…
Guaranteed self-tail-call optimization (tail self-recursion runs in constant stack)βœ…
Closures: lexical capture (= by value / := by reference), monomorphicβœ…
Pipe |> (first-argument injection)βœ…
Ranges: infix lo <- hi β†’ inclusive []Num (descends when lo > hi)βœ…
Spread: prefix <- in literals β€” array splice [<-xs, 4], record update {<-p, x = 9}βœ…
Pattern matching (numbers, wildcard, identifiers, sum-type variants)βœ…
User-defined sum types (/ separator), exhaustive matching, payload bindingβœ…
Sum-type methods: optional trailing { } block (named methods, operators, render `; it = the value); no fields, no := methodsβœ…
Result as a normal predefined sum type (Ok/NotOk)βœ…
Sum-type payloads: Num / Bool / Textβœ…
Sum-type payload is a named record (Method = Get / Post(Body); match binds it, reads its fields / calls its methods)βœ…
Concrete Result payloads: a bound Ok/NotOk payload is usable at its real type (overload dispatch, across -> Result function boundaries)βœ…
Uniform Result layout: a Result of ANY payload (Num/Text/[]Text/composite) passes through a generic (r :: Result) parameter or return β€” powers isOk()/isNotOk() on getEnv/getOptβœ…
Modules: << core.io, << core.test, << core.test.report, << core.cli, << core.time, << core.net, file-path imports, >> exportsβœ…
I/O: print / eprint / writeβœ…
I/O: @readStdin β€” deferred stdin line read, forced on useβœ…
Assertions: compiler-provided assert(value, matcher) (fatal) and expect(value, matcher) (recorded, test cases only), over equals / contains / not / isOk / isNotOk; core.test’s failAt for a check of your ownβœ…
Test harness: quilon test over top-level describe / it blocks, which may sit in the file they test; the blocks are erased from every other commandβœ…
Replaceable reporter: the harness and its output are ordinary .qn in core.test.report, so a suite importing core.test alone defines its own describe / it / report* and gets its own reportβœ…
Call-site locations: a trailing site :: Site parameter filled in by the compiler and forwarded by passing it on (track-caller) β€” a failing assertion reports YOUR call’s file:line:column with a caret, identically under JIT and nativeβœ…
Terminal-aware color: a failing assertion’s report is colored on a terminal and plain when redirected or under NO_COLOR/TERM=dumb; the \e (ESC) string escape writes an ANSI sequence from .qnβœ…
CLI helpers: << core.cli (getEnv / hasFlag / getOpt; both --name value and --name=value; flag names with or without --)βœ…
Garbage-collected memory (no manual free; self-contained binaries)βœ…
Text (and nested arrays) in records/arrays, or as a sum-type payload (Ok(text))βœ…
^ receives args :: []Text (argv) and env :: [|Text => Text|] (the environment as a Map)βœ…
Lambdas (x => …) as array-method arguments (inlined per element)βœ…
Function types ((Num) -> Bool, () -> $) + higher-order functions: a function-typed parameter called inside, taking a closure by literal or by nameβœ…
Generics / type variables (overloading is the only polymorphism)❌
Overloaded or top-level function name passed as a value; a closure returned from a function❌
Generic / polymorphic-capturing closures❌
String interpolation❌
Colorless implicit-futures concurrency β€” @ leaf IO primitives, deferred values, force-at-strict-op: the fiber scheduler, the @sleep pause, and the value-returning @readStdin (deferred Text, forced on use) run today; cross-source overlap (networked @get) and the multicore runtime are still to come🚧