Types, unasked
Annotations are optional. Unannotated code is inferred anyway — for speed and correctness both. Nothing falls back to an interpreter.
public beta · expect bugs
Web-native. Fully type-inferred without a single annotation. Values first, multiple dispatch, no function colouring — compiled straight to WebAssembly and native. No interpreter. No JIT. Nothing hiding in the dark.
npm i -g @unkindnesses/ravenfn fib(n) { fib(n-1) + fib(n-2) }fn fib(1) { 1 }fn fib(0) { 0 }fn fibSequence(n) {xs = []for i = range(1, n) {append(&xs, fib(i))}return xs}show fibSequence(10)
Annotations are optional. Unannotated code is inferred anyway — for speed and correctness both. Nothing falls back to an interpreter.
Integers, bytes, even malloc are written in Raven itself. Layout and allocation are yours when you want them.
Compound data is immutable by default. The swap operator keeps mutation's convenience; changes never turn up somewhere you didn't ask.
One name, many definitions, selected by matching the arguments — types, values or structure.
No async, no await, no codebase cut in half. Any code can suspend.
The pipeline rebuilds only what moved: fast builds, live REPL, notebooks, tooling that keeps pace.
$ npm i -g @unkindnesses/raven$ raven> 2+24> Complex(1, 2) / 20.5 + 1.0im> factorial(big(50))big(3041409320171337804361260816606476884377641568960512…)