Perché Ridgun
Cosa fa Ridgun in modo diverso.
Ridgun prende idee da Haskell, Rust, Go, Erlang e dai linguaggi array, e le riunisce in un unico posto: codice disposto in tabelle, parallelismo nella sintassi e memoria liberata senza garbage collector né borrow checker. Ecco come si confronta, e dove altri linguaggi sono ancora avanti.
| Ridgun | Rust | Go | Haskell | C | Python | Erlang / Elixir | |
|---|---|---|---|---|---|---|---|
| Memoria | Liberata dopo l’ultimo uso, lo decide il compilatore; i valori condivisi hanno un conteggio dei riferimenti; regioni. Nessun garbage collector, nessun lifetime da scrivere. | Ownership e borrowing, verificati in fase di compilazione; lifetime nel codice. | Garbage collector. | Garbage collector. | Manuale (malloc e free). | Conteggio dei riferimenti più un garbage collector per i cicli. | Garbage collector per processo. |
| Parallelismo | Nella sintassi: || formano un grafo di dipendenze; ||map, ||filter; agenti e canali. | Thread e async nel linguaggio; parallelismo dei dati tramite librerie. | Goroutine e canali. | Thread, spark e STM, tramite librerie e il runtime. | Thread e OpenMP, tramite librerie e compilatori. | Thread limitati dal GIL nella build abituale; processi per il lavoro in parallelo. | Processi leggeri e messaggi. |
| Disposizione del codice | Una funzione è una tabella: la firma come intestazione, una clausola per riga, gli argomenti in colonne. stable format le mantiene allineate. | Disposizione libera; rustfmt. | Disposizione libera; gofmt. | Sensibile al layout; formattatori della comunità. | Disposizione libera; vari formattatori. | Sensibile all’indentazione; formattatori della comunità. | Disposizione libera; mix format per Elixir. |
| Tipi | Statica, dichiarata nelle firme; tipi algebrici; generici scritti A..Z; tensori con le dimensioni verificate in fase di compilazione. | Statica, inferita all’interno delle funzioni; trait. | Statica; generici dalla 1.18. | Statica, inferita; classi di tipi. | Statica, debole. | Dinamica; annotazioni opzionali. | Dinamica; controllo opzionale. |
| Cosa distribuisci | Un eseguibile ELF64 statico per x86-64 o ARM64, scritto dal compilatore stesso: non serve una toolchain C. | Un eseguibile nativo, tramite LLVM e un linker di sistema. | Un eseguibile nativo, di solito statico. | Un eseguibile nativo, tramite una toolchain C. | Un eseguibile nativo. | Codice sorgente eseguito da un interprete. | Bytecode eseguito dalla macchina virtuale BEAM. |
| File di progetto | build.rg, scritto in Ridgun. | Cargo.toml (TOML). | go.mod. | Un file .cabal o stack.yaml. | Makefile, CMake e altri. | pyproject.toml (TOML). | mix.exs (Elixir), rebar.config (termini Erlang). |
| Scritto in sé stesso | Sì: compilatore, strumento di progetto, librerie, framework web e questo sito. | Sì. | Sì. | In gran parte (GHC). | Compilatori scritti per lo più in C e C++. | No: l’interprete principale è in C. | Il compilatore sì; la macchina virtuale è in C. |
Dove altri sono avanti oggi
Ridgun è giovane. Queste sono le lacune che conosciamo e cosa è previsto per ciascuna.
| Ridgun oggi | I linguaggi qui sopra | Previsto | |
|---|---|---|---|
| Librerie | Le librerie standard, il framework web Solstice e i suoi addon, tutto nella sezione dei pacchetti. | Grandi registri di pacchetti costruiti in molti anni. | Librerie della comunità, pubblicate nella sezione dei pacchetti. |
| Strumenti per editor | Colori della sintassi e formattazione per VS Code, Emacs e gedit. | Language server, debugger, profiler. | Un language server. |
| Stabilità | Versione 0.9: la sintassi cambia ancora tra una versione e l’altra. | Versioni stabili con compatibilità a lungo termine. | La versione 1.0 congela la sintassi. |
| Velocità dimostrata | Miglioramenti costanti tra una versione e l’altra; nessun confronto pubblicato per ora. | Anni di benchmark pubblicati. | Benchmark rispetto a C, pubblicati con il loro codice. |
Il modo più rapido per giudicare è provarlo: inizia in pochi minuti, oppure leggi il libro nella tua lingua.