Wasmer 3.0, une boîte à outils pour créer des applications basées sur WebAssembly, est disponible

La troisième version majeure du projet Wasmer est introduite, qui développe un runtime pour l'exécution de modules WebAssembly pouvant être utilisés pour créer des applications universelles pouvant s'exécuter sur différents systèmes d'exploitation, ainsi que pour exécuter du code non fiable de manière isolée. Le code du projet est écrit en Rust et est distribué sous licence MIT.

La possibilité d'exécuter une application sur différentes plates-formes est assurée par la compilation du code dans un code intermédiaire WebAssembly de bas niveau, qui peut s'exécuter sur n'importe quel système d'exploitation ou être intégré dans des programmes dans d'autres langages de programmation. Les programmes sont des conteneurs légers qui exécutent le pseudocode WebAssembly. Ces conteneurs ne sont pas liés au système d'exploitation et peuvent inclure du code écrit à l'origine dans n'importe quel langage de programmation. La boîte à outils Emscripten peut être utilisée pour compiler vers WebAssembly. Pour traduire WebAssembly en code machine de la plateforme actuelle, il prend en charge la connexion de divers backends de compilation (Singlepass, Cranelift, LLVM) et moteurs (utilisant JIT ou génération de code machine).

Les applications sont isolées du système principal dans un environnement sandbox et n'ont accès qu'à la fonctionnalité déclarée (un mécanisme de sécurité basé sur la gestion des capacités - pour les actions avec chacune des ressources (fichiers, répertoires, sockets, appels système, etc.), le la demande doit être dotée des pouvoirs appropriés). Le contrôle d'accès et l'interaction avec le système sont assurés à l'aide de l'API WASI (WebAssembly System Interface), qui fournit des interfaces de programmation pour travailler avec des fichiers, des sockets et d'autres fonctions fournies par le système d'exploitation.

La plateforme permet d'atteindre des performances d'exécution d'applications proches des assemblys natifs. À l'aide du moteur d'objets natif pour le module WebAssembly, vous pouvez générer du code machine (« wasmer compile -native » pour générer des fichiers objets .so, .dylib et .dll précompilés), qui nécessite un temps d'exécution minimal pour s'exécuter, mais conserve toute l'isolation du bac à sable. caractéristiques. Il est possible de fournir des programmes précompilés avec Wasmer intégré. L'API Rust et Wasm-C-API sont proposées pour créer des modules complémentaires et des extensions.

Pour lancer un conteneur WebAssembly, installez simplement Wasmer dans le système d'exécution, qui est livré sans dépendances externes (« curl https://get.wasmer.io -sSfL | sh »), et exécutez le fichier nécessaire (« wasmer test.wasm » ). Les programmes sont distribués sous la forme de modules WebAssembly classiques, qui peuvent être gérés à l'aide du gestionnaire de packages WAPM. Wasmer est également disponible sous forme de bibliothèque pouvant être utilisée pour intégrer du code WebAssembly dans des programmes Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir et Java.

Changements majeurs dans Wasmer 3.0 :

  • Ajout de la possibilité de créer des fichiers exécutables natifs pour n'importe quelle plateforme. La commande « wasmer create-exe » a été entièrement repensée pour convertir un fichier de code intermédiaire WebAssembly en exécutables autonomes pour les plates-formes Linux, Windows et macOS pouvant s'exécuter sans installer Wasmer lui-même.
  • Il est possible de lancer des packages WAPM situés dans le répertoire wapm.io à l'aide de la commande « wasmer run ». Par exemple, exécuter « wasmer run python/python » téléchargera le package python depuis le référentiel wapm.io et l'exécutera.
  • L'API Wasmer Rust a été entièrement repensée, modifiant le style de travail avec la mémoire et offrant la possibilité de sauvegarder en toute sécurité des objets Wasm dans la structure du Store. Une nouvelle structure MemoryView a été proposée qui permet de lire et d'écrire des données dans une zone mémoire linéaire.
  • Un ensemble de composants wasmer-js a été implémenté pour exécuter Wasmer dans un navigateur Web et interagir avec lui à partir de JavaScript à l'aide de la bibliothèque wasm-bindgen. Dans ses capacités, wasmer-js correspond aux composants wasmer-sys conçus pour exécuter Wasmer sur des systèmes d'exploitation classiques.
  • Les moteurs ont été simplifiés. Au lieu de moteurs séparés pour JIT, liaison dynamique et statique (Universal, Dylib, StaticLib), un moteur commun est désormais proposé, et le chargement et la sauvegarde du code sont contrôlés au niveau de la définition des paramètres.
  • Pour désérialiser les artefacts, le framework rkyv est utilisé, qui garantit un fonctionnement en mode zéro copie, c'est-à-dire qui ne nécessite aucune allocation de mémoire supplémentaire et effectue la désérialisation uniquement en utilisant le tampon initialement fourni. L'utilisation de rkyv a considérablement augmenté la vitesse de démarrage.
  • Le compilateur monopasse Singlepass a été amélioré, ajoutant la prise en charge des fonctions à valeurs multiples, une fiabilité améliorée et une prise en charge supplémentaire des trames de gestion des exceptions.
  • Implémentation améliorée de l'API WASI (WebAssembly System Interface). Les problèmes dans l'interface du logiciel WASI pour travailler avec le système de fichiers ont été résolus. Les types internes ont été repensés à l'aide de WAI (WebAssembly Interfaces), ce qui permettra une série de nouvelles fonctionnalités à l'avenir.

Source: opennet.ru

Ajouter un commentaire