🚧 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.
Qu'est-ce que le WebAssembly ?
Le WebAssembly (wasm) est un modèle de système simple et un format d'exécutable qui est décrit par des spécifications détaillées. Il est conçu pour être portable, compacte, et s'exécuter presque aussi vite que si c'était un programme natif.
En tant que langage de programmation, WebAssembly est constitué de deux formats qui représentent les mêmes structures, bien qu'étant dans des formats différents :
- Le format textuel
.wat
(qui sont les initiales de "WebAssembly Text") qui utilise les expressions symboliques, et ressemble aux langages de la famille Lisp comme Scheme et Clojure.
- Le format binaire
.wasm
qui est plus bas-niveau et est destiné à être utilisé par des machines virtuelles pour le wasm. Il est techniquement similaire à l'ELF et au Mach-O.
Pour illustrer ceci, voici une fonction factorielle au format wat
:
(module
(func $fac (param f64) (result f64)
get_local 0
f64.const 1
f64.lt
if (result f64)
f64.const 1
else
get_local 0
get_local 0
f64.const 1
f64.sub
call $fac
f64.mul
end)
(export "fac" (func $fac)))
Si vous vous demandez à quoi ressemble un fichier wasm
, vous pouvez utiliser
la démonstation wat2wasm avec le code ci-dessus.
La mémoire linéaire
WebAssembly suit un modèle de mémoire très simple. Un module wasm n'a accès qu'à une seule "mémoire linéaire", qui est principalement un tableau uniforme d'octets. Cette mémoire peut être agrandie d'une taille correspondant à un multiple d'une taille de page (64K). Elle ne peut pas être réduite.
Est-ce que le WebAssembly est conçu uniquement pour le web ?
Bien qu'il ait actuellement attiré l'attention des communautés JavaScript et du web en général, wasm ne sait rien sur son environnement d'accueil. Ainsi, il est raisonnable de penser que wasm puisse devenir un format "d'exécutable portable" qui puisse être utilisé à l'avenir dans des contextes variés. Cependant, à l'heure de l'écriture de ces lignes, wasm est majoritairement associé au JavaScript (JS), qui se décline sous plusieurs formats (y compris ceux sur le Web et dans Node.js).