Une version préliminaire de la norme WebAssembly 2.0 est disponible

Le consortium W3C a publié une version préliminaire d'une nouvelle spécification standardisant le code intermédiaire WebAssembly 2.0 et l'API associée, permettant de créer des applications hautement performantes, portables entre navigateurs et plateformes matérielles. WebAssembly fournit un code intermédiaire universel bas niveau, indépendant du navigateur, pour l'exécution d'applications compilées à partir de différents langages de programmation. Grâce à l'utilisation de JIT pour WebAssembly, on peut atteindre des niveaux de performance proches de ceux du code natif.

La technologie WebAssembly peut être utilisée pour exécuter dans le navigateur des tâches nécessitant une haute performance, telles que le codage vidéo, le traitement audio, la manipulation graphique et 3D, le développement de jeux, les opérations cryptographiques et les calculs mathématiques via l'exécution dans le navigateur de code écrit dans des langages compilables comme C/C++.

Parmi les principales missions de WebAssembly, on trouve l assurance de la portabilité, la prévisibilité du comportement et l'identité d'exécution du code sur différentes plateformes. Récemment, WebAssembly est également promu comme une plateforme universelle pour l'exécution sécurisée de code dans toutes les infrastructures, systèmes d'exploitation et appareils, sans se limiter aux navigateurs.

W3C a publié trois spécifications préliminaires de WebAssembly 2.0 :

  • WebAssembly Core — décrit une machine virtuelle de bas niveau pour l'exécution de code intermédiaire WebAssembly. Les ressources associées à WebAssembly sont fournies au format « .wasm », similaire aux fichiers « .class » en Java, contenant des données statiques et des segments de code pour travailler avec ces données.
  • WebAssembly JavaScript Interface — Fournit une API pour l'intégration avec JavaScript. Permet d'obtenir des valeurs et de passer des paramètres à des fonctions WebAssembly. L'exécution de WebAssembly respecte le modèle de sécurité de JavaScript et toutes les interactions avec le système principal se font de manière analogue à l'exécution de code JavaScript.
  • WebAssembly Web API — définit une interface de programmation basée sur le mécanisme Promise pour demander et exécuter des ressources « .wasm ». Le format des ressources WebAssembly est optimisé pour commencer l'exécution sans attendre le chargement complet du fichier, ce qui améliore la réactivité des applications web.

Les principaux changements dans WebAssembly 2.0 par rapport à la première version de la norme :

  • Support du type vectoriel v128 et des instructions vectorielles associées, permettant d'exécuter parallèlement des opérations sur plusieurs valeurs numériques (SIMD, single instruction multiple data).
  • Possibilité d'importer et d'exporter des variables globales modifiables, permettant d'appliquer un lien global pour des valeurs telles que les pointeurs de pile en C++.
  • Nouvelles instructions pour la conversion du type float en int, qui, au lieu de générer une exception lors d'un dépassement de résultat, renvoient la valeur minimale ou maximale possible (nécessaire pour SIMD).
  • Instructions pour l'extension du signe des entiers (augmentation de la taille de la valeur tout en conservant le signe et la valeur).
  • Support pour le retour de plusieurs valeurs par blocs et fonctions (en plus de la transmission de plusieurs paramètres dans les fonctions).
  • Implémentation des fonctions JavaScript BigInt64Array et BigUint64Array pour la conversion entre le type BigInt de JavaScript et la représentation des entiers de 64 bits en WebAssembly.
  • Support des types de référence (funcref et externref) et des instructions associées (select, ref.null, ref.func et ref.is_null).
  • Instructions memory.copy, memory.fill, memory.init et data.drop pour copier des données entre des zones de mémoire et effacer des régions de mémoire.
  • Instructions pour l'accès direct et la modification des tables (table.set, table.get, table.size, table.grow). Possibilité de créer, importer et exporter plusieurs tables dans un même module. Fonctions de copie/remplissage des tables en mode par lots (table.copy, table.init et elem.drop).

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster