- Permite crear software concurrente con facilidad, sin preocuparse por rendimiento impredecible, errores en tiempo de ejecución, condiciones de carrera de datos o errores de tipos
- Entre sus características están la gestión automática de memoria,
move semantics, tipado estático, concurrencia segura por tipos y manejo eficiente de errores
Gestión automática de memoria determinista
- Inko no depende de recolección de basura, sino que usa gestión de memoria basada en propiedad única y
move semantics
- Los valores con propietario se eliminan al salir de alcance, y pueden prestarse de forma inmutable o mutable
- El uso de propiedad única ofrece comportamiento y rendimiento predecibles, sin perder tiempo ajustando la recolección de basura
Inko es seguro
- Con Inko no hay que preocuparse por errores comunes en otros lenguajes, como punteros NULL, errores de uso después de liberar memoria, errores en tiempo de ejecución o condiciones de carrera de datos
- Proporciona el tipo
Option para datos opcionales y soporta referencias inmutables y mutables, lo que permite restringir cambios según sea necesario
Facilita la concurrencia
- Inko implementa la concurrencia usando procesos ligeros, con un modelo inspirado en Erlang y Pony
- Los procesos están aislados entre sí y se comunican por mensajes, mientras que el compilador garantiza la corrección mediante verificación de tipos
- Al transferir datos entre procesos, garantiza la unicidad de los datos, haciendo imposibles las condiciones de carrera
Manejo correcto de errores
- Inko usa un enfoque de manejo de errores inspirado en el artículo "The Error Model" de Joe Duffy
- Los errores se expresan con un tipo algebraico llamado
Result, y ofrece simplificación sintáctica mediante try y throw
- Para errores graves que no pueden o no deben manejarse, soporta
panics que detienen el programa
Eficiente
- En lugar de competir con lenguajes de bajo nivel como C o Rust, Inko busca ofrecer una alternativa atractiva a lenguajes como Ruby, Erlang y Go
- Usa un compilador a código nativo con LLVM como backend, ofreciendo un equilibrio entre tiempos de compilación rápidos y buen rendimiento en ejecución
- El código nativo se enlaza estáticamente con una pequeña biblioteca de runtime escrita en Rust que se encarga de la planificación de procesos, IO no bloqueante y más
Pattern matching
- Inko soporta pattern matching para varios tipos, incluidos tuplas y tipos de datos algebraicos
- El pattern matching se compila en árboles de decisión, y el compilador busca mantener el tamaño lo más pequeño posible
- El compilador garantiza que todos los patrones estén cubiertos
3 comentarios
¿Hicieron en Rust algo parecido a Rust??
Es medio complicado que la gestión de paquetes dependa de Github. Ojalá también tomaran un poco en cuenta los entornos que no pueden conectarse a Internet…
Opiniones en Hacker News
El modelo de concurrencia de Inko está inspirado en Erlang y Pony, y usa procesos ligeros.
Para agregar un paquete de Inko, hay que crear un repositorio en GitHub.
Se comparten enlaces a discusiones relacionadas con Inko:
Se plantea la duda sobre su parecido con Rust:
Se expresa interés por Inko y el deseo de que se convierta en el próximo Golang:
Se comparte el dato curioso de que el nombre Inko significa "uno más" en telugu.
Discusión sobre las diferencias sintácticas con Rust:
Evaluación positiva de las decisiones de diseño de Inko:
Se menciona la necesidad de binarios precompilados:
Se añaden más enlaces a discusiones relacionadas.