1 points par GN⁺ 2025-01-25 | 1 commentaires | Partager sur WhatsApp
  • Linking avec Wild

    • Wild est un outil qui vise un linking très rapide pour le développement itératif.
    • Le linking incrémental n’est pas encore implémenté, mais l’outil offre déjà des performances assez rapides.
    • Pour les builds de production, il est recommandé d’utiliser des linkers matures comme GNU ld ou LLD.
    • Si vous voulez des temps de build rapides pendant le développement, Wild peut valoir le coup d’être essayé.
    • Il peut être utilisé si vous développez sur Linux x86-64, et en cas de problème il est recommandé de soumettre un bug report.
  • Installation

    • Pour installer un binaire précompilé, vous pouvez copier la commande depuis la page des releases.
    • Vous pouvez aussi copier manuellement le binaire wild dans votre PATH.
    • Pour compiler et installer directement, utilisez la commande cargo install --locked --bin wild --git https://github.com/davidlattimore/wild.git wild.
  • Utilisation comme linker par défaut

    • Pour utiliser Wild comme linker par défaut lors de la compilation de code Rust, ajoutez la configuration dans ~/.cargo/config.toml.
  • Q&R

    • Pourquoi encore un autre linker ?
      • Mold est déjà très rapide, mais ne prend pas en charge le linking incrémental. Wild vise justement ce linking incrémental.
      • Comme il est écrit en Rust, on espère qu’il pourra gérer la complexité du linking incrémental.
    • Fonctionnalités qui marchent
      • Plateforme/architecture actuellement prise en charge : Linux x86-64
      • Peut produire des binaires à linking statique, des binaires à linking dynamique et des objets partagés (fichiers .so)
      • Compatibilité confirmée avec les proc-macros Rust
      • Réussit les tests sur des crates populaires de crates.io
      • Prise en charge des informations de débogage
    • Fonctionnalités pas encore prises en charge
      • Linking incrémental, prise en charge d’architectures autres que x86-64, prise en charge de divers flags de linking, support de Mac et Windows, etc.
  • Benchmarks

    • L’objectif de Wild est d’offrir des performances très rapides grâce au linking incrémental.
    • Il vise aussi à être aussi rapide que possible même sans linking incrémental.
    • D’après les résultats de benchmarks, Wild affiche de très bonnes performances sans informations de débogage.
    • Quand les informations de débogage sont incluses, les performances diminuent quelque peu.
  • Linking de code Rust

    • Vous pouvez compiler et tester des crates avec Wild en utilisant la commande cargo test.
    • Le compilateur Clang doit être installé, car GCC n’autorise pas l’utilisation d’un linker arbitraire.
  • Contribution

    • Pour savoir comment contribuer à Wild, consultez CONTRIBUTING.md.
  • Soutien

    • Soutenir ce projet permettrait d’y travailler à plein temps plus longtemps.
  • Licence

    • Choix possible entre l’Apache License, Version 2.0, et la licence MIT.

1 commentaires

 
GN⁺ 2025-01-25
Commentaires sur Hacker News
  • Il est surprenant de voir apparaître ce projet alors que le besoin d’un nouveau linker rapide a diminué depuis que mold a changé de licence, passant de l’AGPL à la MIT. Il reste néanmoins notable qu’il soit deux fois plus rapide que mold dans certains cas

  • J’avais déjà regardé ce projet auparavant, mais il ne semble pas encore prêt pour la production. J’utilise donc toujours mold

  • Pour les utilisateurs de macOS, Apple a lancé un nouveau linker il y a un ou deux ans, et il faut ajouter un réglage spécifique dans config.toml pour l’utiliser avec Rust

  • Ce serait intéressant qu’un compilateur C/C++ construise tout le programme comme une seule unité sans étape de linkage. Comme les bibliothèques externes sont pour la plupart liées dynamiquement, supprimer le processus de linkage ne poserait pas de problème

  • L’intérêt pour les linkers rapides continue de croître : Gold en 2008, Lld en 2015, mold en 2021

  • La popularité de Rust accroît l’intérêt pour les linkers rapides, car les binaires Rust demandent beaucoup de temps à l’étape de linkage. Ce n’est pas propre à Rust, mais tient au linkage statique et aux optimisations de LLVM

  • "Linkers and Loaders" de John Levine est un bon livre sur le sujet, et il m’avait paru très intéressant lorsque je l’ai lu il y a quelques années

  • En comparant les performances de wild, mold et ld, on constate que, dans un projet bien structuré, le temps de linkage n’est pas un problème majeur

  • Les benchmarks de performance ont été exécutés sur un ordinateur portable System76 Lemur Pro, modèle 2020, avec 4 cœurs (8 threads) et 42 Go de RAM

  • Certaines personnes se demandent ce qu’est un linker

  • Quelqu’un a demandé s’il pouvait lier le noyau Linux, ce qui avait constitué une étape utile pour LLD