Por qué Ridgun
Qué hace Ridgun de otra manera.
Ridgun toma ideas de Haskell, Rust, Go, Erlang y los lenguajes de arrays, y las reúne en un solo sitio: código dispuesto en tablas, paralelismo en la sintaxis y memoria liberada sin recolector de basura ni comprobador de préstamos. Así se compara con otros, y aquí es donde otros lenguajes aún van por delante.
| Ridgun | Rust | Go | Haskell | C | Python | Erlang / Elixir | |
|---|---|---|---|---|---|---|---|
| Memoria | Se libera tras el último uso, lo decide el compilador; los valores compartidos se cuentan; regiones. Sin recolector y sin escribir tiempos de vida. | Propiedad y préstamos, comprobados al compilar; tiempos de vida en el código. | Recolector de basura. | Recolector de basura. | Manual (malloc y free). | Conteo de referencias y un recolector de ciclos. | Recolector de basura por proceso. |
| Paralelismo | En la sintaxis: || forman un grafo de dependencias; ||map, ||filter; agentes y canales. | Hilos y async en el lenguaje; paralelismo de datos mediante bibliotecas. | Gorrutinas y canales. | Hilos, sparks y STM, mediante bibliotecas y el entorno de ejecución. | Hilos y OpenMP, mediante bibliotecas y compiladores. | Hilos limitados por el GIL en la versión habitual; procesos para el trabajo en paralelo. | Procesos ligeros y mensajes. |
| Disposición del código | Una función es una tabla: la firma como cabecera, una cláusula por fila y los argumentos en columnas. stable format las mantiene alineadas. | Disposición libre; rustfmt. | Disposición libre; gofmt. | Sensible a la disposición; formateadores de la comunidad. | Disposición libre; varios formateadores. | Sensible a la sangría; formateadores de la comunidad. | Disposición libre; mix format para Elixir. |
| Tipos | Estático, declarado en las firmas; tipos algebraicos; genéricos escritos A..Z; tensores con sus dimensiones comprobadas al compilar. | Estático, inferido dentro de las funciones; traits. | Estático; genéricos desde la 1.18. | Estático, inferido; clases de tipos. | Estático, débil. | Dinámico; anotaciones opcionales. | Dinámico; comprobación opcional. |
| Qué entregas | Un ejecutable ELF64 estático para x86-64 o ARM64, escrito por el propio compilador: no hace falta cadena de herramientas de C. | Un ejecutable nativo, mediante LLVM y un enlazador del sistema. | Un ejecutable nativo, normalmente estático. | Un ejecutable nativo, mediante una cadena de herramientas de C. | Un ejecutable nativo. | Código fuente ejecutado por un intérprete. | Bytecode ejecutado por la máquina virtual BEAM. |
| Archivo de proyecto | build.rg, escrito en Ridgun. | Cargo.toml (TOML). | go.mod. | Un .cabal o stack.yaml. | Makefiles, CMake y otros. | pyproject.toml (TOML). | mix.exs (Elixir), rebar.config (términos de Erlang). |
| Escrito en sí mismo | Sí: compilador, herramienta de proyectos, bibliotecas, framework web y este sitio. | Sí. | Sí. | En su mayor parte (GHC). | Compiladores sobre todo en C y C++. | No: el intérprete principal está en C. | El compilador sí; la máquina virtual está en C. |
Dónde van otros por delante hoy
Ridgun es joven. Estas son las carencias que conocemos y lo que está previsto para cada una.
| Ridgun hoy | Los lenguajes de arriba | Previsto | |
|---|---|---|---|
| Bibliotecas | Las bibliotecas estándar, el framework web Solstice y sus addons, todo en el área de paquetes. | Grandes registros de paquetes construidos durante muchos años. | Bibliotecas de la comunidad, publicadas en el área de paquetes. |
| Herramientas para editores | Colores de sintaxis y formato para VS Code, Emacs y gedit. | Servidores de lenguaje, depuradores, perfiladores. | Un servidor de lenguaje. |
| Estabilidad | Versión 0.9: la sintaxis aún cambia entre versiones. | Versiones estables con compatibilidad a largo plazo. | La versión 1.0 congela la sintaxis. |
| Velocidad demostrada | Mejoras constantes entre versiones; aún sin comparativa publicada. | Años de comparativas publicadas. | Comparativas con C, publicadas con su código. |
La forma más rápida de juzgarlo es probarlo: empieza en unos minutos, o lee el libro en tu idioma.