30 points par GN⁺ 2025-12-06 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • En se concentrant sur les différences de philosophie et de valeurs entre les trois langages, l’article compare les problèmes que chacun cherche à résoudre
  • Go est présenté comme un langage qui privilégie la simplicité et la stabilité, en réduisant les fonctionnalités au minimum pour faciliter la collaboration et la maintenance
  • Rust vise à la fois la sécurité et les performances, et garantit la sécurité mémoire grâce à un système de types complexe et à une structure fondée sur les traits
  • Zig est décrit comme un langage expérimental qui donne un contrôle total au développeur grâce à la gestion manuelle de la mémoire et à une conception orientée données
  • Les approches contrastées des trois langages révèlent le système de valeurs mis en œuvre par un langage de programmation, et le critère de choix devient la philosophie à laquelle le développeur adhère

Angle de comparaison entre les langages

  • L’auteur cherche à comprendre le système de valeurs propre à chaque langage non pas à travers celui utilisé au travail, mais via l’expérimentation de nouveaux langages
  • Il souligne qu’au-delà d’une simple comparaison de listes de fonctionnalités, l’essentiel est de voir quels compromis le langage a choisis
  • Go, Rust et Zig se recoupent largement sur le plan fonctionnel, mais les valeurs privilégiées par leurs concepteurs diffèrent
  • Comprendre la philosophie de chaque langage permet de juger dans quels environnements et pour quels objectifs il est adapté

Go — un langage centré sur la simplicité et la collaboration

  • Go se distingue par son minimalisme, avec cette caractéristique qu’« on peut garder l’ensemble du langage en tête »
    • Les génériques n’ont été ajoutés qu’au bout de 12 ans, et des fonctionnalités comme les tagged unions ou le sucre syntaxique pour la gestion des erreurs n’existent toujours pas
  • L’ajout de fonctionnalités se fait avec une extrême prudence, ce qui entraîne beaucoup de code boilerplate, mais renforce la stabilité et la lisibilité du langage
  • Les slices de Go couvrent des fonctions que remplissent Vec<T> en Rust ou ArrayList en Zig, tandis que l’emplacement mémoire est géré automatiquement à l’exécution
  • Le langage est né d’un mécontentement face à la complexité de C++ et à la lenteur de compilation, avec pour objectif une compilation simple et rapide
  • Il accorde une grande importance à l’efficacité de la collaboration en environnement d’entreprise, en privilégiant un code clair et cohérent plutôt que des fonctionnalités complexes

Rust — complexe, mais puissant en sécurité et en performances

  • Rust revendique les « abstractions à coût nul » et se présente comme un langage maximaliste combinant de nombreux concepts
  • Si son apprentissage est difficile, c’est parce que sa densité conceptuelle est élevée, avec un système de types complexe et une structure fondée sur les traits
  • L’objectif central de Rust est de concilier performances et sécurité mémoire
    • Il effectue des vérifications à la compilation pour empêcher les UB (Undefined Behavior)
    • Il bloque les comportements imprévisibles causés par des références de pointeurs invalides ou des doubles libérations, entre autres
  • Pour permettre au compilateur de comprendre le comportement du code à l’exécution, le développeur doit définir explicitement les types et les traits
  • Grâce à cette structure, la fiabilité du code écrit par autrui est élevée, et l’écosystème de bibliothèques reste particulièrement dynamique

Zig — contrôle total et conception orientée données

  • Zig est le plus récent des trois langages ; il en est à la version 0.14 et sa bibliothèque standard est presque dépourvue de documentation
  • Il adopte une gestion manuelle de la mémoire, ce qui oblige le développeur à appeler lui-même alloc() et à choisir un allocator
  • Contrairement à Rust ou Go, il permet de créer facilement des variables globales et interrompt le programme à l’exécution lorsqu’un « illegal behavior » est détecté
    • Il propose quatre modes de release sélectionnables à la compilation pour ajuster l’équilibre entre performances et stabilité
  • Les fonctionnalités de la programmation orientée objet (OOP) sont volontairement exclues
    • Il n’y a ni champs privés ni dispatch dynamique, et même std.mem.Allocator n’est pas implémenté comme une interface
    • À la place, le langage vise une conception orientée données (data-oriented design)
  • Pour la gestion mémoire également, au lieu d’un contrôle fin objet par objet à la manière de RAII, il recommande une structure consistant à allouer et libérer périodiquement de gros blocs de mémoire
  • Zig est décrit comme un langage au tempérament libre et anti-establishment, qui écarte la pensée OOP et pousse au maximum le contrôle exercé par le développeur
  • L’équipe se concentre actuellement sur la réécriture de toutes les dépendances, et la version stable (1.0) n’a pas encore de date fixée

Conclusion — les différences de valeurs révélées par les langages

  • Go met au centre la collaboration et la simplicité, Rust la sécurité et les performances, et Zig la liberté et le contrôle
  • Les différences entre les trois ne relèvent pas d’une simple comparaison de fonctionnalités, mais reflètent un choix philosophique sur le développement logiciel
  • Les développeurs finissent par choisir un langage en fonction des valeurs auxquelles ils adhèrent

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.