-
Notifications
You must be signed in to change notification settings - Fork 0
Introducción en Español
Note
Este panorama puede cambiar, ya que el lenguaje está en desarrollo y evolución; apenas se encuentra en sus primeras etapas y por ahora, es simplemente un lenguaje de juguete.
Ignis es un lenguaje de programación de propósito general, con tipado estático y fuerte, además de inmutabilidad por defecto en variables. Los lenguajes que inspiraron a Ignis son TypeScript y Rust. Este cuenta con un Garbage Collector para la gestión de memoria de las clases y reglas de ownership y borrowing similares a las de Rust. El objetivo de Ignis no es ser utilizado por todo el mundo, sino ser un lenguaje que me permita aprender cómo se crea y funciona un lenguaje de programación. Y, si de paso puedo usarlo para crear scripts que reemplacen código escrito en Bash u otros lenguajes, especialmente Lua y Python (odio Lua), sería ideal.
El principal objetivo es que sea un lenguaje parecido a TypeScript, sin los aspectos negativos de este, que son el transpilalado a JavaScript y evitar los problemas que ello conlleva. También se busca que posea características de Rust, como la inmutabilidad de las variables, el tipado estático, y el ownership y borrowing de variables y funciones.
También tendrá un Garbage Collector pequeño para la gestión de memoria de clases y estructuras de datos, pero con reglas de ownership de variables como en Rust. La intención de establecer esto como un punto medio entre las dos ideas es evitar la penalización de un GC enorme y no tener los problemas de lifetime que existen en Rust con las estructuras, es decir, aprovechar lo mejor de ambos mundos.
Además, transpilará a Lua (odio Lua) para no tener que usar Lua directamente nunca más. Existen alternativas para Lua que transpilan a este con tipado estático, pero ninguna me satisface.
import { println } from "std:io";
function main(): void {
println("Hello World");
}Inicialmente, el lenguaje iba a ser compilado a binario por defecto, con la opción de ser interpretado para reemplazar scripts en Bash o Python. Sin embargo, la primera opción aún no está disponible debido a su complejidad y a ciertos problemas con LLVM. Esta sigue siendo una opción, pero por ahora y por razones de practicidad, se optará por un ByteCode y una máquina virtual.
Ya la tiene; es una de las primeras cosas que se implementaron. Aún faltan características, como las clases, enums, template literal, arrow functions, etc. Pero se irán añadiendo poco a poco.
Como mencioné, no es compilado por el momento debido a limitaciones técnicas.
Esta es una de las mejores características del lenguaje. Nunca más tendré que aguantar que un objeto devuelva undefined porque su propiedad no existe o que se sume un número y un string porque no sabes qué te está llegando como parámetro de una función.
La idea es que el lenguaje pueda transpilarse a Lua con el objetivo de configurar NeoVim. La meta sería tener una librería de Ignis con la firma de la API de NeoVim y facilitar la adición de las APIs de los plugins que se elijan.
No quiero que esta sea la función principal, pero tal vez con el ByteCode, se pueda sortear esta restricción. Mi objetivo con esto es reemplazar los scripts que tengo en mi sistema con código en Ignis.
Obviamente, un lenguaje digno debe contar con una buena librería estándar. Cosas que quiero que tenga esta librería:
No puede ser que un desarrollador de backend tenga una librería HTTP deficiente. Mi objetivo es que se pueda hacer un backend 100% funcional con la librería estándar.
Similar a la librería que viene incluida con Rust.
Para facilitarme la vida al hacer scripts y comandos. Al estilo de clap de Rust pero integrado en la librería estándar.
No hay lenguaje serio que no tenga entrada y salida estándar.
Principalmente para poder reimplementar el GC en Ignis sin problemas.
Para acompañar a la librería HTTP.
Una librería de Regex.
Funciones y constantes para realizar matemáticas en Ignis.
Esto me gustaría hacer un énfasis importante y correcto para no tener un Date de JavaScript y no depender de una librería externa.
La principal idea de los primitivos no es los primitivos per se, sino los métodos asociados a ellos, como puede ser un .toString() en todos los tipos de datos, o un conversor de string a int, por ejemplo. Cosas necesarias para poder trabajar en un lenguaje de programación con tipado estático y estricto.
No es algo que sí o sí tiene que estar, pero sería bueno que si se crean librerías o programas en Ignis, puedan bajarse, instalarse o agregarse a un proyecto. Más o menos como sería Cargo en Rust o NPM para Node. No tengo grandes aspiraciones, no creo tener un repositorio central donde se descarguen las cosas; simplemente que se descarguen desde GitHub o un repositorio git sirve.