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

14e anniversaire du lancement du projet open source du langage Go

  • L’un des cofondateurs du langage Go a donné sa dernière conférence lors de la GopherConAU, organisée à Sydney le 10 novembre 2023.
  • Cette intervention célébrait les 14 ans du lancement de Go en tant que projet open source et revenait sur ses réussites ainsi que sur les points à remettre en question.
  • L’orateur a précisé qu’il ne parlait ni au nom de l’équipe Go ni de Google, mais exprimait un point de vue personnel, tout en remerciant la communauté pour sa contribution au succès du langage.

Facteurs de réussite du langage Go et points à améliorer

  • L’objectif initial de Go n’était pas de créer un nouveau langage de programmation, mais d’améliorer la manière d’écrire des logiciels.
  • Go visait à répondre à la complexité de la construction de logiciels serveurs modernes : gestion des dépendances, collaboration avec de grandes équipes, facilité de maintenance, tests efficaces, et utilisation performante des CPU multicœurs ainsi que du réseau.
  • Go n’est pas seulement un langage de programmation, mais un projet visant à rendre la création de logiciels de production plus simple et plus productive.

Le mascotte de Go, le gopher

  • Le gopher, mascotte du langage Go, a joué un rôle important dans son succès.
  • Il est devenu le symbole des programmeurs Go et l’étendard de la communauté, ce qui a été essentiel à la croissance du projet.
  • Le fait d’avoir publié son design sous licence Creative Commons Attribution a favorisé l’esprit communautaire, tout en entraînant aussi des difficultés liées au droit d’auteur.

Facteurs techniques du succès de Go

  • La rédaction d’une spécification officielle, l’existence de plusieurs implémentations, la portabilité, les garanties de compatibilité, une riche bibliothèque, la facilité de développement d’outils, ainsi que l’outil de formatage automatique gofmt, ont contribué au succès de Go.
  • gofmt a influencé l’ensemble de la communauté du développement, en ouvrant la voie au fait que la plupart des langages disposent désormais d’un formateur standard.

Concurrence et interfaces

  • Go a fait de la concurrence un élément central du langage, ce qui a contribué à simplifier l’architecture des logiciels serveurs.
  • Les interfaces sont une idée emblématique de Go, sa réponse à la conception orientée objet, et elles jouent un rôle important dans la bibliothèque standard comme dans la gestion des dépendances.

Génériques et compilateur

  • La présence des interfaces est l’une des raisons pour lesquelles l’ajout des génériques à Go a pris autant de temps.
  • Le fait que le premier compilateur Go ait été écrit en C a suscité des controverses dans la communauté des langages de programmation, mais ce choix était adapté au développement de Go.

Gestion du projet et des paquets

  • Bien que Go soit un projet open source, son développement initial s’est déroulé en privé, puis les contributions de la communauté ont explosé après l’ouverture du projet.
  • Le développement de la gestion des paquets ne s’est pas déroulé sans heurts, notamment par manque de compréhension de la manière de collaborer avec la communauté.

Documentation et exemples

  • La documentation initiale de Go n’a pas répondu aux attentes de la communauté, mais elle s’est améliorée, notamment grâce à la mise à disposition d’exemples exécutables sur le Web.

L’avis de GN⁺

  • Le succès de Go tient à des éléments comme une bibliothèque standard solide, la prise en charge de la concurrence, une conception fondée sur les interfaces, une gestion claire des paquets, des outils rapides de build et de test, un formatage de code cohérent, l’accent mis sur la lisibilité et les garanties de compatibilité.
  • Go a apporté une innovation non seulement comme langage de programmation, mais aussi dans la manière de développer des logiciels, grâce à la diversité et au soutien de sa communauté.
  • Le processus de développement de Go et la réflexion critique menée à son sujet offrent d’importantes leçons pour la gestion des projets open source.

1 commentaires

 
GN⁺ 2024-01-05
Réactions sur Hacker News
  • Reconnaissance envers les figures clés qui ont consacré du temps à la rétrospective du projet

    • les contraintes du langage, centrées sur la programmation système
    • une définition claire du langage et de ses principes, afin d’éviter l’ambiguïté et le gaspillage de conception lié à des objectifs divergents
    • la priorité donnée à la qualité, car résoudre les problèmes avant la mise en production coûte moins cher à toutes les parties prenantes
    • le maintien d’un équilibre entre le partage avec la communauté et une gestion stricte du langage et des releases
    • la non-ingérence de Google a contribué au succès de Go, ce qui amène à se demander si cela serait possible pour d’autres projets
    • Go a été une technologie clé pour faire passer les logiciels côté serveur de Java à des conteneurs natifs, et a soutenu une grande partie de l’infrastructure des applications web au cours des dix dernières années
  • Affection pour le langage Go et sa communauté

    • découverte de Go en 2012 en tant que développeur Python, avec une surprise face à la facilité des manipulations de bits
    • étonnement, dix ans plus tard, de constater que la plupart des fonctionnalités de Go fonctionnent toujours bien
    • reconnaissance envers ce que Rob, Ian, Russ et d’autres ont fait pour Go, ainsi que pour leur franchise au sujet des « bosses sur la route » avec la communauté
    • un regard critique sur les problèmes de gestion de paquets, tout en estimant qu’une bonne solution a finalement été trouvée
  • Partage d’une expérience critique concernant le système de gestion de paquets de Go

    • il y a dix ans, après avoir exprimé sur go-nuts une opinion critique sur la manière dont Go gérait les paquets, l’auteur raconte avoir été ignoré par Rob Pike
  • Regard critique sur le langage Go

    • manque de reconnaissance des problèmes profonds du langage
    • Go n’est pas recommandé en raison de son système de types, de la gestion des erreurs, d’une concurrence non sûre et d’une syntaxe trop simple
    • utilisation principale de Rust, dans lequel l’auteur dit avoir trouvé une vision que Go n’a jamais eue
  • Point intéressant sur la décision de Ken Thompson d’utiliser un compilateur C

    • mention d’un mécontentement face au choix d’utiliser le compilateur C de Ken Thompson plutôt que LLVM, ainsi que du code peu optimisé généré dans les premières versions
    • cette décision a toutefois permis d’implémenter rapidement les segmented stacks
  • Mise en avant de l’adoption réussie de gofmt

    • dès le début du projet, gofmt a entièrement supprimé les débats sur le formatage du code, apportant une grande valeur
    • on voit plusieurs langages plus récents imiter gofmt ou créer des outils similaires
  • En tant qu’organisateur de GopherConAU, partage de la playlist complète

    • incompréhension quant à l’impossibilité de rendre la playlist publique
  • Avantages de Go pour créer facilement un monorepo et construire rapidement des applications

    • avec Go, il est facile de créer des outils CLI et de les utiliser comme partie intégrante de pipelines Unix
    • Go est utile pour l’analyse de gros volumes de logs, entre autres
  • Peu de mentions du choix de Go en matière d’interopérabilité et de C FFI

    • la réponse « réécrivez-le en Go » écarte les autres options
  • Avis sur le fait d’écrire un compilateur dans son propre langage

    • question sur le fait de savoir si un langage qui ne peut pas se compiler lui-même est inadapté à l’écriture de compilateurs
    • incompréhension face à l’idée implicite qu’un langage adapté aux compilateurs ne le serait pas à d’autres applications, et demande de davantage de contexte