16 points par xguru 2024-06-24 | 10 commentaires | Partager sur WhatsApp
  • Il s’agit d’une entreprise (non divulguée) qui fournit des services à des centaines de millions d’utilisateurs et utilise C et C++ dans ses systèmes essentiels
  • En 2023, des discussions ont eu lieu tout au long de l’année pour décider s’il fallait adopter Rust ou Zig
  • Principaux critères pris en compte :
    1. l’interopérabilité avec le langage C
    2. la capacité à faire évoluer l’équipe d’ingénierie (recrutement, maintenance, etc.)
  • Choix final : Zig
  • Ce processus de décision est partagé car il illustre bien les « éléments à prendre en compte dans une grande entreprise lorsque le code s’exécute sur des cibles variées et affecte des centaines de millions d’utilisateurs »

L’importance de l’interopérabilité avec C

  • La bibliothèque à réécrire est susceptible d’être utilisée sur toutes les plateformes (web, mobile, casques VR, consoles de jeu, desktop, etc.)
  • Fournir une API C et permettre son usage via FFI est donc le seul moyen de garantir l’exécution sur toutes les plateformes

Principaux sujets de discussion

Rust

  1. À l’époque, Rust était plus de 25 fois plus populaire que Zig (d’après les enquêtes et les subreddits)
  2. Le langage est resté stable depuis plus longtemps
  3. Le soutien industriel de la Rust Foundation paraît solide
  4. Excellent LSP et bonne expérience développeur
  5. Cargo : un gestionnaire de paquets parmi les meilleurs du secteur
  6. Sécurité mémoire et « absence de comportement indéfini » (ce n’est pas totalement exact, mais cela a été mentionné pendant les discussions)
  7. Pour sortir du C++, Rust semblait mieux adapté grâce à l’absence d’erreurs mémoire et de possibilités de comportement indéfini
  8. Prise en charge du SIMD en version nightly
  9. Prise en charge de WASM aussi fluide que celle de Zig
  10. Des performances comparables à Zig, voire « nettement supérieures » dans certains cas
Interopérabilité C de Rust :
  • Rust dispose de son propre écosystème très riche, ce qui réduit relativement l’importance de l’interopérabilité avec C
  • Très bonne capacité d’intégration avec des langages de haut niveau, comme via des bindings Python
  • Certains ont soutenu que les avantages de Rust compensaient les inconvénients liés à la fourniture de bindings C

Zig

  1. Facile à apprendre pour les développeurs ayant un background C/C++ ou TypeScript
  2. Offre une expérience de développement agréable aux développeurs venant du C
  3. Le compilateur Zig peut aussi compiler du C et du C++, ce qui est avantageux pour la gestion des dépendances et la construction de bibliothèques à ABI C
  4. La prise en charge de nombreuses plateformes cibles est très simple (zig targets est particulièrement apprécié)
  5. Il est facile d’écrire rapidement des logiciels performants (prise en charge native de Vector, usage du SIMD, etc.)
  6. Compatible avec les débogueurs existants
  7. Excellent système de build (une amélioration 100 fois supérieure aux Makefile existants)
  8. Forte transparence financière de la Zig Software Foundation
  9. Possibilité de porter progressivement le code C++ existant et de le « ziggifier »
  10. Grande fiabilité pour résoudre les problèmes de linking/compilation sur toutes les plateformes cibles

Conclusion

  • Zig réduit fortement le temps et les efforts nécessaires pour porter la base de code existante et garantir la compatibilité sur toutes les plateformes
  • Facteurs décisifs inattendus :
    1. La facilité d’apprentissage et le recrutement ont eu un impact plus important que prévu (en faveur de Zig)
    2. L’expérience développeur autour de la toolchain a joué un rôle important
    3. Le compilateur Zig et son système de build ont beaucoup aidé grâce à leur compatibilité avec la base de code existante
    4. L’écosystème, la communauté et les garanties de sécurité mémoire de Rust ont eu moins d’influence que prévu

10 commentaires

 
qpfjf56 2025-04-30

J’ai pris beaucoup de plaisir à lire cet article ! En me renseignant sur node, bun et deno, j’ai vu que bun était écrit dans un langage peu familier appelé Zig, donc je me demandais de quel type de langage il s’agissait ; merci pour cette excellente mise en bouche !

 
ahwjdekf 2025-01-17

Un gros problème avec zig, c’est que lorsqu’il y a une erreur dans le code écrit par l’utilisateur au moment de la compilation, il n’indique pas la position exacte ni des informations précises. On dirait qu’il ne remonte les informations que jusqu’à la bibliothèque standard.

 
cosine20 2024-07-01

À lire les considérations, les points de discussion et la conclusion, on a l’impression que dès le départ ce n’était pas un contexte où Rust était nécessaire. Vous avez déjà vu un livreur de repas rouler en tout-terrain ?
S’il faut effectivement développer dans un langage natif, si le travail n’est pas critique en matière de mémoire, le bon choix est plutôt celui avec lequel il est plus facile de développer. Pas de quoi en débattre pendant un an...

 
[Ce commentaire a été masqué.]
 
botplaysdice 2024-06-24

Des centaines de millions d’utilisateurs...

Je me demande bien de quelle entreprise il s’agit. On dirait une société qui ne se laisse pas enfermer dans des procédures formelles comme la certification... je l’envie...

 
bus710 2024-06-24

J’essaie de regarder zig une fois par an, et j’ai l’impression qu’il y a eu des breaking changes presque chaque année ;;
En plus, le langage lui-même ne propose pas encore de bibliothèque pour les queues ou la transmission de messages entre threads, donc comparé à la maturité de Rust, il semble qu’il lui reste encore du chemin à parcourir.
Bien sûr, si l’utilisateur maîtrise parfaitement les API de l’OS, ce n’est peut-être pas un gros problème…

 
tested 2024-06-24

Rust est plus de 25 fois plus populaire que Zig, mais on dirait que Zig offre de meilleures perspectives d'embauche.

 
rlcks97 2024-07-01

Je pense que c’est parce qu’au point n°1, les développeurs ayant un background en C/C++ ou en TypeScript peuvent l’apprendre facilement.

 
daejin 2024-06-24

Une expérience de codage agréable pour les développeurs venant de C
Facile d’écrire rapidement des logiciels (prise en charge native des vecteurs, utilisation de SIMD, etc.)

Cela me rappelle la sensation ressentie la première fois que j’ai appris Python

 
tsboard 2024-06-24

En voyant que Bun est développé en Zig, je me demandais pourquoi ils avaient précisément choisi Zig, mais grâce à ce bon article comparatif avec Rust, je comprends mieux. Cela dit, on dirait bien que le langage C est vraiment immortel.