Why Ridgun
What Ridgun does differently.
Ridgun takes ideas from Haskell, Rust, Go, Erlang and the array languages, and puts them in one place: code laid out as tables, parallelism in the syntax, and memory freed without a garbage collector or a borrow checker. Here is how it compares, and where other languages are still ahead.
| Ridgun | Rust | Go | Haskell | C | Python | Erlang / Elixir | |
|---|---|---|---|---|---|---|---|
| Memory | Freed after last use, decided by the compiler; shared values counted; regions. No collector, no lifetimes to write. | Ownership and borrowing, checked at compile time; lifetimes in the code. | Garbage collector. | Garbage collector. | Manual (malloc and free). | Reference counting plus a cycle collector. | Garbage collector per process. |
| Parallelism | In the syntax: || lines form a dependency graph; ||map, ||filter; agents and channels. | Threads and async in the language; data parallelism through libraries. | Goroutines and channels. | Threads, sparks and STM, through libraries and the runtime. | Threads and OpenMP, through libraries and compilers. | Threads limited by the GIL in the usual build; processes for parallel work. | Lightweight processes and messages. |
| Code layout | A function is a table: signature as header, one clause per row, arguments in columns. stable format keeps them aligned. | Free layout; rustfmt. | Free layout; gofmt. | Layout-sensitive; community formatters. | Free layout; several formatters. | Indentation-sensitive; community formatters. | Free layout; mix format for Elixir. |
| Types | Static, declared in signatures; algebraic data types; generics written A..Z; tensors with their shapes checked at compile time. | Static, inferred inside functions; traits. | Static; generics since 1.18. | Static, inferred; type classes. | Static, weak. | Dynamic; optional hints. | Dynamic; optional checking. |
| What you ship | A static ELF64 executable for x86-64 or ARM64, written by the compiler itself: no C toolchain needed. | A native executable, through LLVM and a system linker. | A native, usually static, executable. | A native executable, through a C toolchain. | A native executable. | Source run by an interpreter. | Bytecode run by the BEAM virtual machine. |
| Project file | build.rg, written in Ridgun. | Cargo.toml (TOML). | go.mod. | A .cabal file or stack.yaml. | Makefiles, CMake and others. | pyproject.toml (TOML). | mix.exs (Elixir), rebar.config (Erlang terms). |
| Written in itself | Yes: compiler, project tool, libraries, web framework and this site. | Yes. | Yes. | Mostly (GHC). | Compilers mostly in C and C++. | No: the main interpreter is in C. | Compiler yes; the virtual machine is in C. |
Where others are ahead today
Ridgun is young. These are the gaps we know about, and what is planned for each.
| Ridgun today | The languages above | Planned | |
|---|---|---|---|
| Libraries | The standard libraries, the Solstice web framework and its addons, all in the package area. | Large package registries built over many years. | Libraries from the community, published through the package area. |
| Editor tooling | Syntax colours and formatting for VS Code, Emacs and gedit. | Language servers, debuggers, profilers. | A language server. |
| Stability | Version 0.9: the syntax still changes between releases. | Stable releases with long-term compatibility. | Version 1.0 freezes the syntax. |
| Proven speed | Steady gains between releases; no published comparison yet. | Years of published benchmarks. | Benchmarks against C, published with their code. |
The fastest way to judge is to try it: get started in a few minutes, or read the book in your language.