Ainsi donc, grâce à WebAssembly, il serait possible de faire tourner des programmes fulgurants dans une page Web.
Mazette ! Pourquoi ne pas tester la proposition en réalisant un petit programme qui requiert traditionnellement une certaine puissance de calcul, comme une représentation de l'ensemble de Mandelbrot ? Ce serait plus sympa que le jeu de la vie de Conway comme proposé ici, qui est certes fascinant, mais pas des plus sexy à regarder.
Ce serait aussi l'opportunité de discuter un peu des performances des opérations graphiques nécessitant de travailler au pixel pour produire une image dans une page Web. Oh! nous ne sortirons pas l'artillerie lourde, à savoir WebGL, qui a été longuement présenté dans plusieurs articles sur ce blog. Nous nous concentrerons simplement sur le contexte 2D d'un objet
<canvas>
, en dessinant au pixel.
Tout cela, et plus encore, dans ce qui suit.
Ce qu'il faut savoir sur WebAssembly
Puisqu'il s'agit de faire découvrir WebAssembly à travers un exemple, il convient d'en préciser les notions de WebAssembly qui vont nous servir, et celles-là seulement. Pour des explications plus générales, je renvoie à cet article précédemment publié sur ce blog.
WebAssembly, c'est quoi ? S'agissant de quelque-chose qui a été défini ici pour répondre à plusieurs besoins, il n'est pas facile de répondre facilement à cette question. Le mieux est de dire que c'est une technologie, qui permet d'exécuter du code de manière très rapide mais aussi très sécurisée dans une page Web - ce qui implique une indépendance au regard de la plate-forme.
Cette technologie comprend plusieurs choses :
- Tout d'abord, un format binaire, que les auteurs ont fait le choix de rendre intelligible en permettant de l'exprimer sous forme d'un langage, une forme d'assembleur que nous appellerons Wasm pour faire la distinction avec la technologie. Ce format binaire est celui que doit prendre un programme WebAssembly - code et données -, ou module, pour pouvoir être exécuté.
- Ensuite, un moteur qui permet d'exécuter un module sous forme binaire. Ce moteur se saisit du binaire qui lui est communiqué, le valide au regard de tout un ensemble de règles - par exemple, la définition d'une fonction ne doit pas mentionner plus d'un résultat - et exécute le binaire dans un environnement très sécurisé, car cette exécution ne peut conduire à déborder de la mémoire attribuée au données pour empiéter sur celle où se trouve le code.