Feature matrix
β = works end-to-end with a passing run test Β· π§ = partial Β· β = not yet
| Feature | Status |
|---|---|
^ 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 | π§ |