Porquê o Ridgun
O que o Ridgun faz de forma diferente.
O Ridgun vai buscar ideias a Haskell, Rust, Go, Erlang e às linguagens de arrays, e reúne-as num só lugar: código disposto em tabelas, paralelismo na sintaxe e memória libertada sem coletor de lixo nem borrow checker. Eis como se compara, e onde outras linguagens ainda estão à frente.
| Ridgun | Rust | Go | Haskell | C | Python | Erlang / Elixir | |
|---|---|---|---|---|---|---|---|
| Memória | Libertada após o último uso, por decisão do compilador; valores partilhados contados; regiões. Sem coletor e sem lifetimes para escrever. | Propriedade e empréstimo, verificados em tempo de compilação; lifetimes no código. | Coletor de lixo. | Coletor de lixo. | Manual (malloc e free). | Contagem de referências e um coletor de ciclos. | Coletor de lixo por processo. |
| Paralelismo | Na sintaxe: || formam um grafo de dependências; ||map, ||filter; agentes e canais. | Threads e async na linguagem; paralelismo de dados através de bibliotecas. | Goroutines e canais. | Threads, sparks e STM, através de bibliotecas e do runtime. | Threads e OpenMP, através de bibliotecas e compiladores. | Threads limitadas pelo GIL na versão habitual; processos para trabalho paralelo. | Processos leves e mensagens. |
| Disposição do código | Uma função é uma tabela: a assinatura como cabeçalho, uma cláusula por linha e os argumentos em colunas. stable format mantém-nas alinhadas. | Disposição livre; rustfmt. | Disposição livre; gofmt. | Sensível à disposição; formatadores da comunidade. | Disposição livre; vários formatadores. | Sensível à indentação; formatadores da comunidade. | Disposição livre; mix format para Elixir. |
| Tipos | Estático, declarado nas assinaturas; tipos algébricos; genéricos escritos A..Z; tensores com as dimensões verificadas em tempo de compilação. | Estático, inferido dentro das funções; traits. | Estático; genéricos desde a 1.18. | Estático, inferido; classes de tipos. | Estático, fraco. | Dinâmico; anotações opcionais. | Dinâmico; verificação opcional. |
| O que entrega | Um executável ELF64 estático para x86-64 ou ARM64, escrito pelo próprio compilador: não precisa de cadeia de ferramentas de C. | Um executável nativo, através do LLVM e de um ligador do sistema. | Um executável nativo, normalmente estático. | Um executável nativo, através de uma cadeia de ferramentas de C. | Um executável nativo. | Código-fonte executado por um interpretador. | Bytecode executado pela máquina virtual BEAM. |
| Ficheiro de projeto | build.rg, escrito em Ridgun. | Cargo.toml (TOML). | go.mod. | Um ficheiro .cabal ou stack.yaml. | Makefiles, CMake e outros. | pyproject.toml (TOML). | mix.exs (Elixir), rebar.config (termos Erlang). |
| Escrito em si mesmo | Sim: compilador, ferramenta de projetos, bibliotecas, framework web e este site. | Sim. | Sim. | Na maior parte (GHC). | Compiladores sobretudo em C e C++. | Não: o interpretador principal está em C. | O compilador sim; a máquina virtual está em C. |
Onde os outros estão à frente hoje
O Ridgun é jovem. Estas são as lacunas que conhecemos e o que está previsto para cada uma.
| O Ridgun hoje | As linguagens acima | Previsto | |
|---|---|---|---|
| Bibliotecas | As bibliotecas padrão, o framework web Solstice e os seus addons, tudo na área de pacotes. | Grandes registos de pacotes construídos ao longo de muitos anos. | Bibliotecas da comunidade, publicadas na área de pacotes. |
| Ferramentas para editores | Cores de sintaxe e formatação para VS Code, Emacs e gedit. | Servidores de linguagem, depuradores, profilers. | Um servidor de linguagem. |
| Estabilidade | Versão 0.9: a sintaxe ainda muda entre versões. | Versões estáveis com compatibilidade a longo prazo. | A versão 1.0 congela a sintaxe. |
| Velocidade comprovada | Melhorias constantes entre versões; ainda sem comparação publicada. | Anos de benchmarks publicados. | Benchmarks face ao C, publicados com o respetivo código. |
A forma mais rápida de avaliar é experimentar: comece em poucos minutos, ou leia o livro no seu idioma.