10 puntos por xguru 2023-11-18 | 3 comentarios | Compartir por WhatsApp
  • 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

 
ahwjdekf 2023-11-18

¿Hicieron en Rust algo parecido a Rust??

 
regentag 2023-11-18

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…

 
xguru 2023-11-18
Opiniones en Hacker News
  • El modelo de concurrencia de Inko está inspirado en Erlang y Pony, y usa procesos ligeros.

    • Los procesos están aislados entre sí y se comunican mediante mensajes.
    • Los procesos y los mensajes se definen con clases y métodos, y el compilador garantiza la corrección mediante verificación de tipos.
    • Los datos se transfieren de forma única entre procesos, por lo que las condiciones de carrera son imposibles y se elimina la necesidad de copias profundas.
    • Soporta canales con múltiples productores y múltiples consumidores, lo que permite la comunicación entre procesos sin referencias explícitas entre ellos.
  • Para agregar un paquete de Inko, hay que crear un repositorio en GitHub.

    • El gestor de paquetes de Inko también soporta otros repositorios Git como GitLab, pero el índice se construye usando repositorios de GitHub.
    • Se expresa preocupación por la tendencia de la comunidad a depender de productos de Microsoft y de Git.
  • Se comparten enlaces a discusiones relacionadas con Inko:

    • "Show HN: Inko 0.10.0 – build concurrent software with confidence" (septiembre de 2022, 3 comentarios)
    • "Inko 0.5.0 released, featuring the first steps towards a self-hosting compiler" (septiembre de 2019, 7 comentarios)
    • "Inko (a gradually-typed object-oriented programming language) 0.4.0 released" (mayo de 2019, 1 comentario)
    • "Show HN: Inko – A safe and concurrent object-oriented programming language" (agosto de 2018, 45 comentarios)
  • Se plantea la duda sobre su parecido con Rust:

    • Se pregunta si Inko es lo suficientemente parecido a Rust como para cuestionar por qué elegir Inko en vez de Rust.
    • Hace falta un ejemplo de algo que en Rust sea difícil o engorroso de escribir, pero que en Inko pueda hacerse con facilidad.
  • Se expresa interés por Inko y el deseo de que se convierta en el próximo Golang:

    • Inko parece haber comenzado en GitLab, y se menciona la necesidad de un GC junto con el deseo de que llegue a ser como Golang.
    • Se pregunta en qué se diferencia de Gleam y hay interés en cómo podría aprovechar el ecosistema de JVM.
  • 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:

    • Comparación detallada de las diferencias sintácticas entre Rust e Inko.
    • Se mencionan pequeñas diferencias en la declaración de funciones, la expresión de genéricos y otros detalles.
  • Evaluación positiva de las decisiones de diseño de Inko:

    • Su sintaxis, similar a la de los lenguajes de la familia C/Java, resulta familiar para muchas personas.
    • Se cuestiona la decisión de nombre de la sección de manejo de errores.
  • Se menciona la necesidad de binarios precompilados:

    • Se comenta que la dificultad para compilar por problemas con LLVM ha hecho que haya menos interés en Inko.
  • Se añaden más enlaces a discusiones relacionadas.