Aperçu standard WebAssembly 2.0 disponible

Le W3C a publié un projet de nouvelle spécification qui standardise le middleware WebAssembly 2.0 et son API associée, permettant la création d'applications hautes performances portables sur tous les navigateurs et plates-formes matérielles. WebAssembly fournit un code intermédiaire de bas niveau, universel et indépendant du navigateur pour exécuter des applications compilées à partir de divers langages de programmation. En utilisant JIT pour WebAssembly, vous pouvez atteindre des niveaux de performances proches du code natif.

La technologie WebAssembly peut être utilisée pour effectuer des tâches hautes performances dans le navigateur, telles que l'encodage vidéo, le traitement audio, la manipulation graphique et 3D, le développement de jeux, les opérations cryptographiques et les calculs mathématiques en autorisant l'écriture de code dans des langages compilés tels que C/C++. .

L'un des principaux objectifs de WebAssembly est d'assurer la portabilité, un comportement prévisible et une exécution de code identique sur différentes plates-formes. Récemment, WebAssembly a également été présenté comme une plate-forme universelle permettant d'exécuter du code en toute sécurité sur n'importe quelle infrastructure, système d'exploitation et appareil, sans se limiter aux navigateurs.

Le W3C a publié trois projets de spécifications pour WebAssembly 2.0 :

  • WebAssembly Core - Décrit une machine virtuelle de bas niveau pour exécuter le code intermédiaire WebAssembly. Les ressources associées à WebAssembly sont fournies dans un format « .wasm », similaire aux fichiers « .class » en Java, contenant des données statiques et des segments de code pour travailler avec ces données.
  • Interface JavaScript WebAssembly - Fournit une API pour l'intégration avec JavaScript. Permet d'obtenir des valeurs et de transmettre des paramètres aux fonctions WebAssembly. L'exécution de WebAssembly suit le modèle de sécurité JavaScript et toutes les interactions avec le système principal s'effectuent de la même manière que l'exécution du code JavaScript.
  • API Web WebAssembly - Définit une interface de programmation basée sur le mécanisme Promise pour demander et exécuter des ressources ".wasm". Le format de ressource 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 de WebAssembly 2.0 par rapport à la première version du standard :

  • Prise en charge du type de vecteur v128 et des instructions vectorielles associées qui vous permettent d'effectuer des actions sur plusieurs valeurs numériques en parallèle (SIMD, données multiples à instruction unique).
  • Possibilité d'importer et d'exporter des variables globales mutables, permettant une liaison globale pour des valeurs telles que les pointeurs de pile en C++.
  • Nouvelles instructions de conversion float en int qui, au lieu de lever une exception lorsque le résultat déborde, renvoient la valeur minimale ou maximale possible (nécessaire pour SIMD).
  • Instructions pour l'expansion du signe des entiers (augmentation de la profondeur de bits d'un nombre tout en conservant le signe et la valeur).
  • Prise en charge des blocs et fonctions renvoyant plusieurs valeurs (en plus de transmettre plusieurs paramètres aux fonctions).
  • Implémentation des fonctions JavaScript BigInt64Array et BigUint64Array pour convertir entre le type JavaScript BigInt et la représentation WebAssembly d'entiers 64 bits.
  • Prise en charge des types de référence (funcref et externref) et de leurs 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 régions de mémoire et effacer des régions de mémoire.
  • Instructions pour accéder et modifier directement les tables (table.set, table.get, table.size, table.grow). Possibilité de créer, importer et exporter plusieurs tables dans un seul module. Fonctions de copie/remplissage de tableaux en mode batch (table.copy, table.init et elem.drop).

Source: opennet.ru

Ajouter un commentaire