01 - Introduction
Verge is a systems programming language that tries to read like Go, keeps the genuinely useful ideas from Rust and C — structural traits, generics, enums and pattern matching, pointers, explicit sizes.
These docs are written to be read in order, each chapter builds on the last, from “hello world” up through traits, macros, and concurrency. Every code example is compiled and run against the real compiler before it is published, so the programs here should behave exactly as shown (but while in alpha, the syntax is subject to change). Verge is still in alpha — you can’t install it yet — but the docs stand on their own. Go to Hello World to see the language in action.
History
Verge has no lengthy or interesting history. I just like building compilers, and this has been the biggest project yet.
The original set of programming languages I wrote were in Golang, and covered everything from lexing and parsing to full codegen using FASM but they were not full featured nor complete. Verge is significantly more complex, with it’s progenitor language being Rust and also including tooling such as an LSP, bindings generator and even an MCP server so AI agents can verify and write Verge code.
Why another language?
Every programming language is an opinionated textual specification for computation, and simply, I prefer some of the rules, semantics and syntax I chose for Verge over some other languages.
Rust has many excellent features — enums with associated values, pattern matching, and more. I even love the borrow checker, but the whole thing requires so much boilerplate that it becomes tedious. Verge still requires some annoying boilerplate but I’m working to reduce it whilst maintaining expected functionality.
Go has easy concurrency and errors as values, but its error-handling patterns are repetitive, and it deliberately omits metaprogramming, which I find genuinely useful and even fun. I want metaprogramming and more control over memory.
C can do everything and anything, and there is nothing wrong with it. Out of the box tooling is terrible and I’d rather not use it day after day.
Verge is my attempt to combine my favourite parts of each.
Why is it called Verge?
Rust has Rustaceans. Go has Gophers. C has C-men?
Verge has Virgins - and I think that is funny.