Pre-alpha: Published for early evaluation only

Rivus (Bootstrap)

The bootstrap compiler for Faber Romanus, written entirely in Faber itself. Rivus ("stream" in Latin) demonstrates that Faber is self-hosting: the language can compile its own compiler. This serves as both a proof of concept and a comprehensive test of the language's expressiveness.

Unlike the reference compiler, Rivus uses Latin exclusively in its source code, serving as a showcase for writing substantial programs in pure Faber. The bootstrap compiler currently targets TypeScript output, with Zig support in development.

Usage

rivus compile <file.fab>              # Compile to TypeScript
rivus compile <file.fab> -o out.ts    # Specify output file

Note: Rivus must be built before use with bun run build:rivus. The bootstrap compiler has a narrower feature set than Faber, focusing on the subset needed for self-hosting.

Implementation Status

Target Tests Status
TypeScript 741 100%
Python 0 0%
Rust 0 0%
C++23 0 0%
Zig 0 0%

Status % = passing tests / TypeScript baseline (741). Run bun test proba/runner.test.ts -t "@rivus @<target>" to verify. 35 tests skipped (intrinsic I/O functions, deferred).

Status: ● implemented, ◐ partial, ○ not implemented, — not applicable, ◌ convention

Type System

Feature TypeScript Zig Python Rust C++23
textus (string)
numerus (integer)
fractus (float)
decimus (decimal)
magnus (bigint)
bivalens (boolean)
nihil (null)
vacuum (void)
numquam (never)
octeti (bytes)
objectum (object)
lista<T> (array)
tabula<K,V> (map)
copia<T> (set)
series<T...> (tuple)
promissum<T> (promise)
erratum (error)
cursor<T> (iterator)
ignotum (unknown)
curator (allocator)
Nullable types (T?)
Union types (unio<A,B>)
Generic type params
Type aliases (typus)
typeof (typus RHS)

Variable Declarations

Feature TypeScript Zig Python Rust C++23
varia (mutable)
fixum (immutable)
figendum (async immutable)
variandum (async mutable)
nexum (reactive field)
Type annotations
Object destructuring
Array destructuring
Rest in destructuring
Skip pattern (_)
Negative indices [-1]
Slicing [1..3]
Inclusive slicing (usque)
Initializer expressions

Enum & Tagged Union Declarations

Feature TypeScript Zig Python Rust C++23
ordo (enum)
Enum variants
Enum with values
discretio (tagged union)
Variant fields
Generic discretio
discerne (variant match)

Function Declarations

Feature TypeScript Zig Python Rust C++23
Basic functions (functio)
Parameters
Parameter type annotations
Parameter aliasing (ut)
Parameter defaults (vel)
Parameter prepositions (de/in)
Rest parameters (ceteri)
Return type annotation (->)
futura (async prefix)
cursor (generator prefix)
Async generator
Arrow functions
fit T (sync return)
fiet T (async return)
fiunt T (generator return)
fient T (async generator return)
prae (comptime type param)

Control Flow Statements

Feature TypeScript Zig Python Rust C++23
si (if)
secus (else)
sin (else if)
dum (while)
ex...pro (for-of)
ex...fit (for-of verb form)
ex...fiet (async for)
ex...pro (i, n) (indexed)
de...pro (for-in)
Range .. (exclusive)
Range ante (exclusive)
Range usque (inclusive)
Range with step (per)
in (mutation block)
elige (switch)
Switch cases (si)
Switch default (secus)
discerne (pattern match)
secus (else/ternary alt)
fac (do/block)
ergo (then, one-liner)
rumpe (break)
perge (continue)
custodi (guard)
cura (resource management)
praefixum (comptime block)
Catch on control flow

Return/Exit Statements

Feature TypeScript Zig Python Rust C++23
redde (return)
redde with value
redde void

Exception Handling

Feature TypeScript Zig Python Rust C++23
tempta (try)
cape (catch)
demum (finally)
fac...cape (block)
iace (throw)
adfirma (assert)
Assert with message
mori (panic/fatal)

Output/Debug/Events

Feature TypeScript Zig Python Rust C++23
scribe statement
vide (debug)
mone (warn)
Multiple args

Expressions

Feature TypeScript Zig Python Rust C++23
Identifiers
ego (this/self)
Boolean literals (verum/falsum)
nihil literal
String literals
Number literals
Hex literals (0xFF)
Binary literals (0b1010)
Octal literals (0o755)
BigInt literals (123n)
Template literals
scriptum() format strings
Regex literals (sed)
Array literals
Array spread (sparge)
Object literals
Object spread (sparge)
Binary operators
Comparison operators
Logical operators
Bitwise operators
Unary operators
nulla (is empty)
nonnulla (has content)
nihil x (is null)
nonnihil x (is not null)
negativum (is negative)
positivum (is positive)
verum x (is true)
falsum x (is false)
Member access (.)
Optional chaining (?.)
Non-null assertion (!.)
Computed access ([])
Function calls
Call spread (sparge)
Method calls
Assignment
Compound assignment (+=, etc.)
Conditional (ternary)
sic/secus ternary syntax
cede (await/yield)
novum (new)
novum...de (new with props)
=== / est (strict equality)
!== / non est (strict ineq.)
est (instanceof/typeof)
qua (type cast)
aut (logical or)
vel (nullish coalescing)
praefixum (comptime expr)

Lambda Syntax

Feature TypeScript Zig Python Rust C++23
pro x: expr (expression)
pro x { body } (block)
pro: expr (zero-param)
pro x -> T: expr (ret. type)
fit x: expr (sync binding)
per property (shorthand)

OOP Features (genus/pactum)

Feature TypeScript Zig Python Rust C++23
genus declaration
Field declarations
Field defaults
nexum (reactive field)
Static fields (generis)
@ privatum (private)
@ protectum (protected)
creo (constructor hook)
deleo (destructor)
pingo (render method)
Auto-merge constructor
Methods
Async methods
Generator methods
sub (extends)
implet (implements)
Multiple implet
@ abstractum class
@ abstracta method
aperit (index sig)
Generic classes
pactum declaration
Interface methods

Import/Export

Feature TypeScript Zig Python Rust C++23
ex...importa (named imports)
ex...importa * (wildcard)
ut alias (import renaming)

Testing

Feature TypeScript Zig Python Rust C++23
proba (test case)
probandum (test suite)
cura ante (beforeEach)
cura post (afterEach)
cura ante omnia (beforeAll)
cura post omnia (afterAll)
omitte modifier (skip)
solum modifier (only)
futurum modifier (todo)
Table-driven tests (proba ex)

Preamble / Prologue

Feature TypeScript Zig Python Rust C++23
Preamble infrastructure
Panic class/import
Decimal import
Enum import
Regex import
Collection imports
Async imports
Arena allocator
Curator tracking
Flumina/Responsum

I/O Intrinsics

Feature TypeScript Zig Python Rust C++23
_scribe (print)
_vide (debug)
_mone (warn)
_lege (read input)

Stdlib: Math (mathesis)

Feature TypeScript Zig Python Rust C++23
pavimentum(x) (floor)
tectum(x) (ceiling)
radix(x) (sqrt)
potentia(x, n) (pow)
absolutum(x) (abs)
signum(x) (sign)
rotundum(x) (round)
truncatum(x) (trunc)
logarithmus(x) (log)
logarithmus10(x) (log10)
exponens(x) (exp)
sinus(x) (sin)
cosinus(x) (cos)
tangens(x) (tan)
minimus(a, b) (min)
maximus(a, b) (max)
constringens(x, lo, hi)
PI (constant)
E (constant)
TAU (constant)

Stdlib: Random (aleator)

Feature TypeScript Zig Python Rust C++23
fractus() (random 0-1)
inter(min, max) (int)
octeti(n) (random bytes)
uuid() (UUID v4)
selige(lista) (random pick)
misce(lista) (shuffle copy)
semen(n) (seed)

Lista (Array) Methods

Latin TypeScript Zig Python Rust C++23
adde (push)
addita (push copy)
praepone (unshift)
praeposita (unshift copy)
remove (pop)
remota (pop copy)
decapita (shift)
decapitata (shift copy)
purga (clear)
primus (first)
ultimus (last)
accipe (at index)
longitudo (length)
vacua (is empty)
continet (includes)
indiceDe (indexOf)
inveni (find)
inveniIndicem (findIndex)
filtrata (filter)
mappata (map)
reducta (reduce)
explanata (flatMap)
plana (flat)
inversa (reverse copy)
ordinata (sort copy)
sectio (slice)
prima (take first n)
ultima (take last n)
omitte (skip first n)
omnes (every)
aliquis (some)
coniunge (join)
perambula (forEach)
filtra (filter in-place)
ordina (sort in-place)
inverte (reverse in-place)
congrega (groupBy)
unica (unique)
planaOmnia (flattenDeep)
fragmenta (chunk)
densa (compact)
partire (partition)
misce (shuffle)
specimen (sample one)
specimina (sample n)
summa (sum)
medium (average)
minimus (min)
maximus (max)
minimusPer (minBy)
maximusPer (maxBy)
numera (count)

Tabula (Map) Methods

Latin TypeScript Zig Python Rust C++23
pone (set)
accipe (get)
habet (has)
dele (delete)
longitudo (size)
vacua (isEmpty)
purga (clear)
claves (keys)
valores (values)
paria (entries)
accipeAut (getOrDefault)
selige (pick)
omitte (omit)
confla (merge)
inversa (invert)
mappaValores (mapValues)
mappaClaves (mapKeys)
inLista (toArray)
inObjectum (toObject)

Copia (Set) Methods

Latin TypeScript Zig Python Rust C++23
adde (add)
habet (has)
dele (delete)
longitudo (size)
vacua (isEmpty)
purga (clear)
unio (union)
intersectio (intersection)
differentia (difference)
symmetrica (symmetric diff)
subcopia (isSubset)
supercopia (isSuperset)
inLista (toArray)
valores (values)
perambula (forEach)

Stdlib: Time (tempus)

Feature TypeScript Zig Python Rust C++23
nunc() (current epoch)
nunc_nano() (nanos)
nunc_secunda() (secs)
dormi ms (sleep)
Duration constants

Stdlib: File I/O (solum)

Feature TypeScript Zig Python Rust C++23
lege (read file)
inscribe (write file)
appone (append)
aperi / claude (open)
exstat (exists)
dele (delete)
duplica (copy)
move (rename)
crea (mkdir)
elenca (readdir)
via.* (path utils)

Stdlib: Network (caelum)

Feature TypeScript Zig Python Rust C++23
pete (HTTP GET)
mitte (HTTP POST)
pone (HTTP PUT)
dele (HTTP DELETE)
WebSocket client
TCP/UDP sockets

Stdlib: Crypto

Feature TypeScript Zig Python Rust C++23
digere (hash)
hmac (HMAC)
cifra (encrypt)
decifra (decrypt)
fortuita (random bytes)
deriva (key derivation)

Stdlib: Encoding (codex)

Feature TypeScript Zig Python Rust C++23
coda (encode)
decoda (decode)
Base64/Base64URL
Hex encoding
URL percent-encoding

Stdlib: Compression (comprimo)

Feature TypeScript Zig Python Rust C++23
comprimo (compress)
laxo (decompress)
gzip/zstd/brotli

Stdlib: Database (arca)

Feature TypeScript Zig Python Rust C++23
Query DSL (de...quaere)
Mutations (in...muta)
Transactions
SQLite embedded

Collection DSL

Feature TypeScript Zig Python Rust C++23
ex...prima n (take)
ex...ultima n (last)
ex...summa (sum)
ab...ubi (filter where)
ab...pro (filter iter)

External Dispatch (ad)

Feature TypeScript Zig Python Rust C++23
ad "target" (args)
Syscall dispatch
URL protocol routing
Package dispatch

Nucleus Runtime

The Nucleus is Faber's micro-kernel runtime providing unified I/O dispatch, message-passing protocol, and async execution across all targets. See consilia/futura/nucleus.md for full design.

Feature TypeScript Zig Python Rust C++23
Responsum protocol
Handle abstraction
Dispatcher (syscall table)
Request correlation
AsyncContext executor
State machine codegen

The Responsum protocol defines a tagged union for all syscall results.


Target Notes

Python (3.10+)

No block braces (indentation-based), no new keyword, asyncio for async, typing.Protocol for interfaces, match/case for pattern matching.

Zig (0.11+)

No classes (structs with methods), no interfaces (duck typing), no exceptions (error unions), no generators, comptime generics. genus becomes const Name = struct { ... };. Memory management via curator type which maps to std.mem.Allocator — collection methods automatically use the allocator from function parameters or the default arena in main().

Rust (2021 edition)

Ownership system, borrowing (&/&mut), Option<T>/Result<T,E> instead of null/exceptions, traits instead of interfaces, exhaustive pattern matching.

C++23

std::expected<T,E> for errors, std::print for output, concepts for interfaces, coroutines for async, RAII for cleanup.