Publication du projet de norme WebAssembly 2.0 

Le W3C dévoilé Récemment via un post un projet de nouveau cahier des charges qui normalise le code de préparation des WebAssembly 2.0 et API associée pour permettre la création d'applications hautes performances portables sur les navigateurs et les plates-formes matérielles.

Pour ceux qui découvrent WebAssembly, sachez que cela fournit un middleware générique, bas niveau 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 un niveau de performance proche du code natif.

À propos de WebAssembly

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

Parmi les tâches principales de WebAssembly figure la fourniture de la portabilité, la prévisibilité du comportement et l'identité de l'exécution du code sur différentes plates-formes. Récemment, WebAssembly a également été présenté comme une plate-forme universelle pour l'exécution de code en toute sécurité sur n'importe quelle infrastructure, système d'exploitation et appareil, sans se limiter aux navigateurs.

À propos du brouillon de WebAssembly 2.0

Parmi les modifications apportées depuis WebAssembly, les propositions finales pour WebAssembly 2.0 sont le SIMD à largeur fixe, les opérations de mémoire de masse, les types de référence, la prise en charge de JavaScript BigInt pour WebAssembly i64, la prise en charge de plusieurs valeurs de retour et l'importation/exportation de mutable. variables globales.

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

  1. Noyau d'assemblage Web : décrit une machine virtuelle de bas niveau pour exécuter du code WebAssembly intermédiaire. Les ressources liées à WebAssembly sont au format ".wasm", similaire aux fichiers Java ".class", qui contiennent des données statiques et des segments de code pour travailler avec ces données.
  2. Interface JavaScript WebAssembly: fournit une API pour l'intégration avec JavaScript. Permet d'obtenir des valeurs et de passer des paramètres aux fonctions WebAssembly. L'exécution de WebAssembly suit le modèle de sécurité JavaScript et toutes les interactions avec l'hôte sont effectuées d'une manière similaire à l'exécution de code JavaScript.
  3. API Web WebAssembly: définit une API basée sur le mécanisme Promise pour demander et exécuter des ressources ".wasm". Le format de ressource WebAssembly est optimisé pour démarrer l'exécution sans attendre le téléchargement complet du fichier, ce qui améliore la réactivité des applications Web.

Différences entre WebAssembly et WebAssembly 2.0

Aussi, il convient de noter qu'il y a quelques changements importants dans WebAssembly 2.0 par rapport à la première version de la norme :

  • prise en charge du type de vecteur v128 et des instructions vectorielles associées qui vous permettent d'effectuer des opérations sur plusieurs valeurs numériques en parallèle (SIMD, instruction unique, données multiples).
  • Possibilité d'importer et d'exporter des variables globales mutables, qui permet une liaison globale pour les valeurs en tant que pointeurs de pile en C++.
  • Nouvelles instructions pour convertir float en int, qui au lieu de lever une exception en cas de dépassement de résultat, renvoie la valeur minimale ou maximale possible (requise pour SIMD).
  • Instructions pour développer le signe des nombres entiers (augmenter la profondeur de bits d'un nombre en gardant le signe et la valeur).
  • Prise en charge du retour de plusieurs valeurs par blocs et fonctions (ainsi que le passage de plusieurs paramètres aux fonctions).
  • Implémenter les fonctions JavaScript BigInt64Array et BigUint64Array pour convertir entre le type JavaScript BigInt et la représentation WebAssembly des entiers 64 bits.
  • Prise en charge des types de référence (funcref et externref) et 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 supprimer 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 seul module. Fonctions pour copier/remplir des tables en mode batch (table.copy, table.init et elem.drop).

Enfin, si vous souhaitez en savoir plus, vous pouvez consulter les détails dans le lien suivant.


Soyez le premier à commenter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.