Nova is a small language with no indentation rules and no semicolons.
Write it once, then run the exact same .nova file three
different ways — interpreted in Python, interpreted in JavaScript, or
compiled straight to native x86-64 machine code.
Nova didn't start as a compiler project — it grew into one. Each stage kept the exact same syntax and semantics while trading simplicity for speed.
A hand-written lexer, recursive-descent parser, and tree-walking interpreter in a single readable file. Built first, to prove the language design before anything else.
nova.pyThe same grammar and behavior, ported line-for-line to run anywhere Node runs — verified to produce byte-for-byte identical output to the Python version on every test program.
nova.jsCompiles Nova straight to GAS assembly, which assembles and links into a static Linux binary. No interpreter, no libc, no runtime at all — just tagged 64-bit values and raw syscalls.
novac.js → real .s / .o / ELF
No indentation sensitivity, no colons, no semicolons. Blocks just end
with end.
func factorial(n)
if n <= 1 then
return 1
end
return n * factorial(n - 1)
end
say factorial(10)
def factorial(n):
if n <= 1:
return 1
return n * factorial(n - 1)
print(factorial(10))
fib(30),
computed recursively — no tricks, no memoization, the same Nova code
on both sides.