4 points par GN⁺ 2024-05-01 | 1 commentaires | Partager sur WhatsApp

Présentation du langage de programmation Borgo

  • On voulait un langage pour écrire des applications plus expressif que Go, mais moins complexe que Rust
    • Go est simple et intuitif, mais on aimerait parfois qu’il offre davantage de sûreté de typage
    • Rust est agréable à utiliser (du moins pour le code monothread), mais il est trop vaste, trop complexe et parfois pénible
  • Borgo est un nouveau langage transpillé en Go, entièrement compatible avec les packages Go existants
  • La syntaxe de Borgo ressemble à celle de Rust, avec des points-virgules optionnels

Fonctionnalités principales

  • Types de données algébriques et pattern matching
  • Utilisation de Option à la place de nil
  • Utilisation de Result à la place des retours multiples
  • Gestion des erreurs avec l’opérateur ?

Exécution en local

  • Borgo étant écrit en Rust, cargo est nécessaire
  • Pour compiler tous les fichiers .brg du dossier courant :
    • $ cargo run -- build
  • Le compilateur génère des fichiers .go, qui peuvent ensuite être exécutés normalement

L’avis de GN⁺

  • Rust est un langage puissant, mais sa courbe d’apprentissage est raide et son adoption présente une barrière d’entrée élevée ; Borgo semble être une tentative intéressante pour tirer parti des atouts de Rust dans l’écosystème Go. Cela dit, le projet en est encore à ses débuts et son écosystème risque d’être limité
  • Le fait d’améliorer nil et la gestion des erreurs avec Option et Result, ainsi que de simplifier le traitement des erreurs avec l’opérateur ?, semble pouvoir répondre à plusieurs frustrations fréquentes chez les développeurs Go
  • Le fait de pouvoir utiliser telles quelles les bibliothèques Go existantes est un gros avantage. En revanche, comme Borgo reprend une syntaxe inspirée de Rust, les développeurs Go pourraient avoir besoin de temps pour s’y adapter
  • Comme il s’agit d’une approche par transpilation, il est possible que Borgo soit désavantagé par rapport à du code Go natif en matière de débogage ou de performances à l’exécution. Cela paraît encore un peu prématuré pour une adoption dans du code de production à grande échelle
  • De la même manière que Kotlin gagne des parts dans l’écosystème JVM, Borgo devra sans doute encore progresser sur plusieurs aspects — qualité du code, productivité de développement, courbe d’apprentissage — pour devenir une vraie solution dans l’univers Go. S’il continue d’évoluer, il pourrait devenir une alternative séduisante pour la communauté Go

1 commentaires

 
GN⁺ 2024-05-01
Avis Hacker News

Résumé :

  • Réactions positives à propos de Borgo, un langage qui comble certaines lacunes de Go
    • Des fonctionnalités qui manquaient à Go, comme les enum et les types Optional, ont été ajoutées
    • La plupart des fonctionnalités que les développeurs Go espéraient y sont incluses
  • Certaines décisions de conception de Borgo semblent davantage inspirées de Rust que des caractéristiques propres à Go
    • Définition des méthodes avec impl, syntaxe des channels et des goroutines, fonction intégrée zeroValue(), etc.
    • Malgré cela, plusieurs personnes semblent penser qu’elles préféreraient développer avec Borgo plutôt qu’avec Go
  • Présentation d’autres projets ayant tenté une approche similaire
    • Il y a eu des tentatives comme braid, have et oden pour créer des langages transpiliés vers Go
  • Il semble reprendre des atouts de Rust comme le système de types et la gestion des erreurs, à l’exception de l’un de ses grands avantages : le Borrow Checker
  • Certains estiment qu’il serait idéal d’avoir un langage combinant les avantages du typage dynamique et du typage statique
    • Au début du développement, on profiterait de la souplesse d’un typage dynamique à la Python, puis on pourrait évoluer progressivement vers un typage statique
  • Cela donne l’impression d’associer les avantages du runtime et de l’écosystème d’outils de Go à la sûreté de type apportée par des éléments comme les enum de Rust
  • L’adoption des mots-clés pub/private à la place de la convention de Go qui distingue la visibilité des champs de struct par les majuscules et minuscules est aussi perçue positivement
  • Borgo semble chercher un compromis, à l’image de Gleam, entre sûreté de type et complexité, tout en bénéficiant sur le plan des performances du fait qu’il compile vers Go plutôt que vers Erlang ou JS
    • Reste toutefois la question de savoir si les messages d’erreur à la compilation seront aussi clairs et utiles que ceux de Rust ou de Gleam