10 points par xguru 2023-11-18 | 3 commentaires | Partager sur WhatsApp
  • Permet de créer facilement des logiciels concurrents, sans avoir à se soucier des performances imprévisibles, des erreurs d’exécution, des courses de données ou des erreurs de type
  • Caractéristiques : gestion automatique de la mémoire, move semantics, typage statique, concurrence sûre au niveau des types et gestion efficace des erreurs

Gestion automatique déterministe de la mémoire

  • Inko n’utilise pas de garbage collection, mais une gestion de la mémoire fondée sur la propriété unique et les move semantics
  • Les valeurs possédées sont supprimées lorsqu’elles sortent de leur portée, et peuvent être empruntées en mode immuable ou mutable
  • L’utilisation de la propriété unique offre un comportement et des performances prévisibles, sans perdre de temps à régler le garbage collector

Inko est sûr

  • Avec Inko, il n’y a pas à se soucier des erreurs fréquentes dans d’autres langages, comme les pointeurs NULL, les erreurs d’utilisation après libération, les erreurs d’exécution ou les courses de données
  • Il fournit un type Option pour les données optionnelles et prend en charge les références immuables et mutables afin de limiter les modifications selon les besoins

Rend la concurrence simple

  • Inko met en œuvre la concurrence à l’aide de processus légers et adopte un modèle de concurrence inspiré d’Erlang et de Pony
  • Les processus sont isolés les uns des autres et communiquent par messages, tandis que le compilateur garantit la justesse grâce à la vérification des types
  • Lors du transfert de données entre processus, l’unicité des données est garantie, ce qui rend les courses de données impossibles

Une bonne gestion des erreurs

  • Inko utilise une approche de gestion des erreurs inspirée de l’article de Joe Duffy, "The Error Model"
  • Les erreurs sont représentées par un type algébrique appelé Result, avec une simplification syntaxique via try et throw
  • Pour les erreurs graves qui ne peuvent pas, ou ne doivent pas, être traitées, le langage prend en charge les panics, qui interrompent le programme

Efficace

  • Inko ne cherche pas à concurrencer des langages bas niveau comme C ou Rust, mais à proposer une alternative séduisante à des langages comme Ruby, Erlang et Go
  • Il utilise un compilateur en code natif basé sur LLVM, offrant un équilibre entre temps de compilation rapides et bonnes performances à l’exécution
  • Le code natif est lié statiquement à une petite bibliothèque runtime écrite en Rust, qui gère l’ordonnancement des processus, les E/S non bloquantes, etc.

Pattern matching

  • Inko prend en charge le pattern matching sur divers types, notamment les tuples et les types de données algébriques
  • Le pattern matching est compilé en arbre de décision, et le compilateur cherche à en maintenir la taille aussi réduite que possible
  • Le compilateur garantit que tous les motifs sont couverts

3 commentaires

 
ahwjdekf 2023-11-18

Ils ont créé, en Rust, quelque chose de similaire à Rust ??

 
regentag 2023-11-18

Le fait que la gestion des paquets dépende de GitHub me gêne un peu. J’aimerais aussi qu’on prenne davantage en compte les environnements qui ne peuvent pas se connecter à Internet…

 
xguru 2023-11-18
Avis sur Hacker News
  • Le modèle de concurrence d’Inko s’inspire d’Erlang et de Pony et utilise des processus légers.

    • Les processus sont isolés les uns des autres et communiquent par messages.
    • Les processus et les messages sont définis à l’aide de classes et de méthodes, et le compilateur garantit leur validité grâce à la vérification de type.
    • Les données sont transférées de manière unique entre les processus, ce qui rend les data races impossibles et supprime la nécessité de copies profondes.
    • Prise en charge de canaux à producteurs multiples et consommateurs multiples, permettant la communication entre processus sans références explicites entre eux.
  • Pour ajouter un package Inko, il faut créer un dépôt GitHub.

    • Le gestionnaire de paquets d’Inko prend aussi en charge d’autres dépôts Git comme GitLab, mais l’index est construit à partir de dépôts GitHub.
    • Inquiétudes exprimées au sujet de la tendance de la communauté à dépendre des produits Microsoft et de Git.
  • Liens vers des discussions liées à Inko :

    • "Show HN: Inko 0.10.0 – build concurrent software with confidence" (septembre 2022, 3 commentaires)
    • "Inko 0.5.0 released, featuring the first steps towards a self-hosting compiler" (septembre 2019, 7 commentaires)
    • "Inko (a gradually-typed object-oriented programming language) 0.4.0 released" (mai 2019, 1 commentaire)
    • "Show HN: Inko – A safe and concurrent object-oriented programming language" (août 2018, 45 commentaires)
  • Questionnement sur les similitudes avec Rust :

    • Demande si Inko est suffisamment proche de Rust pour qu’il y ait une raison de le choisir à la place de Rust.
    • Besoin d’exemples de programmes difficiles ou pénibles à écrire en Rust mais faciles à écrire avec Inko.
  • Intérêt pour Inko et souhait qu’il devienne un Golang :

    • Inko semble avoir démarré sur GitLab, avec l’idée qu’il pourrait devenir un Golang et la mention de la nécessité d’un GC.
    • Question sur ce qui le différencie de Gleam et intérêt pour une manière de tirer parti de l’écosystème JVM.
  • Partage d’un fait amusant : le nom Inko signifie "encore un" en télougou.

  • Discussion sur les différences syntaxiques avec Rust :

    • Comparaison détaillée des différences de syntaxe entre Rust et Inko.
    • Mention de petites différences comme la déclaration des fonctions ou l’expression des génériques.
  • Évaluation positive des choix de conception d’Inko :

    • Une syntaxe proche des langages de la famille C/Java, offrant une familiarité à beaucoup de développeurs.
    • Questionnement sur le choix du nom de la section consacrée à la gestion des erreurs.
  • Mention de la nécessité de binaires précompilés :

    • Les difficultés de compilation dues à LLVM sont citées comme une raison du manque d’intérêt pour Inko.
  • Ajout de liens supplémentaires vers des discussions connexes.