🚧 Attention, peinture fraîche !

Cette page a été traduite par une seule personne et n'a pas été relue et vérifiée par quelqu'un d'autre ! Les informations peuvent par exemple être erronées, être formulées maladroitement, ou contenir d'autres types de fautes.

Les outils que vous devriez connaître

Ceci est une compilation d'outils très intéressants que vous devriez connaître lorsque vous développez en Rust et WebAssembly.

Développement, compilation, et organisation des flux de travail

wasm-pack | dépôt

wasm-pack aspire à être un outil générique pour travailler et compiler le WebAssembly avec Rust, qui interagira avec le JavaScript, sur le Web ou avec Node.js. wasm-pack vous aide à compiler et publier du WebAssembly généré par Rust dans le registre de npm pour être utilisé avec n'importe quel autre paquet JavaScript dans les systèmes que vous utilisez déjà.

Optimiser et manipuler des binaires .wasm

wasm-opt | dépôt

L'outil wasm-opt lit en entrée du WebAssembly, procède à des transformations, des optimisations, et/ou fait des passes d'outillages dessus, et retourne ensuite le WebAssembly en sortie. L'exécution sur des binaires .wasm produits par LLVM avec rustc devrait généralement créer des binaires .wasm qui sont à la fois léger et qui devraient s'exécuter plus rapidement. Cet outil fait partie du projet binaryen.

wasm2js | dépôt

L'outil wasm2js compile du WebAssembly en "presque du asm.js". C'est intéressant pour prendre en charge des navigateurs qui n'implémentent pas le WebAssembly, comme Internet Explorer 11. Cet outil fait partie du projet binaryen.

wasm-gc | dépôt

C'est un petit outil pour exécuter un ramasse-miettes sur un module WebAssembly et enlève les exports, imports, fonctions et autres qui ne sont pas utiles. C'est comme le drapeau de liaison --gc-sections pour WebAssembly.

Vous ne devriez pas normalement avoir besoin de cet outil pour deux raisons :

  1. rustc a maintenant une version assez récente de lld qui supporte le drapeau --gc-sections pour le WebAssembly. Il est activé automatiquement pour les compilations LTO.
  2. L'outil en ligne de commande wasm-bindgen exécute automatiquement wasm-gc pour vous.

wasm-snip | dépôt

wasm-snip remplace le corps d'une fonction WebAssembly par une instruction unreachable.

Peut-être que vous connaissez des fonctions que ne seront jamais utilisées à l'exécution, mais que le compilateur ne peut pas le détecter à la compilation ? Découpez-les ! Ensuite exécutez à nouveau wasm-gc et toutes les fonctions qu'elles seules utilisaient (qui ne devraient donc pas être appelées à l'exécution) devraient aussi être enlevées.

C'est utile pour enlever de force les infrastructures de panique pour les compilations destinées à l'environnement de production sans débogage.

Inspecter des binaires .wasm

twiggy | dépôt

twiggy est un profileur de la taille de code pour les binaires .wasm. Il analyse l'arbre des appels pour répondre aux questions comme celles-ci :

  • Pourquoi cette fonction est présente dans le binaire ? Par exemple, pour comprendre quelles sont les fonctions exportées qui les appellent indirectement ?
  • Quelle est la taille totale de cette fonction ? Par exemple, quelle taille pourrait être économisée si je l'enlève et quelles fonctions deviendront inutilisables après ce nettoyage ?

Utilisez twiggy pour alléger vos binaires !

wasm-objdump | dépôt

Affiche des informations de bas-niveau sur un binaire .wasm et sur chacune de ses sections. Elle permet aussi de désassembler au format texte WAT. C'est l'équivalent objdump mais pour le WebAssembly. Il fait partie du projet WABT.

wasm-nm | dépôt

Liste les symboles de fonctions importées, exportées, et privées qui sont définies dans le binaire .wasm. C'est comme nm mais pour le WebAssembly.