<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Morgan.Crociati</id>
	<title>air - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Morgan.Crociati"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php/Special:Contributions/Morgan.Crociati"/>
	<updated>2026-05-30T16:12:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_2021_Artiphonie_(saison_2)&amp;diff=50721</id>
		<title>PROJET-INFO5 2021 Artiphonie (saison 2)</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_2021_Artiphonie_(saison_2)&amp;diff=50721"/>
		<updated>2021-03-16T09:45:28Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Le projet=&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif du projet est le développement d&#039;une application mobile pour une utilisation sur tablette à usage des enfants atteints de trouble du langage. Il a été proposé par une orthophoniste du CHU de Grenoble (Estelle Gillet-Perret). Le but de cette application est d&#039;aider les enfants à travailler leur prononciation de manière autonome, à la maison par l&#039;intermédiaire de mini-jeux et de la méthode Borel-Maisonny.&lt;br /&gt;
&lt;br /&gt;
Une première version de l&#039;application a été développer l&#039;année dernière par un groupe de projet d&#039;INFO5 et l&#039;application est actuellement à l&#039;essai auprès de quelques enfants. &lt;br /&gt;
&lt;br /&gt;
=Les objectifs=&lt;br /&gt;
&lt;br /&gt;
Cette année les objectifs sont : &lt;br /&gt;
* Une réflexion autour du backend de l&#039;application &lt;br /&gt;
* Une analyse critique de la version actuelle pouvant mener différents développements (refontes partielles, extensions, améliorations) &lt;br /&gt;
* Le développement d&#039;une nouvelle application dans le même domaine&lt;br /&gt;
&lt;br /&gt;
=L&#039;équipe=&lt;br /&gt;
* Morgan Crociati&lt;br /&gt;
* Gaëtan Rival&lt;br /&gt;
* Rémy Ruzafa&lt;br /&gt;
* Claire Velut&lt;br /&gt;
&lt;br /&gt;
Supervisé par : Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard&lt;br /&gt;
&lt;br /&gt;
=Sprints =&lt;br /&gt;
===Sprint 0===&lt;br /&gt;
Prise en main du projet&lt;br /&gt;
===Sprint 1===&lt;br /&gt;
&#039;&#039;&#039;Backend&#039;&#039;&#039;&lt;br /&gt;
* Schéma d&#039;architecture&lt;br /&gt;
* Schéma de BDD relationnelle&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frontend&#039;&#039;&#039;&lt;br /&gt;
* Review de code&lt;br /&gt;
* Critique constructive de l&#039;application actuelle&lt;br /&gt;
* Définition d&#039;une architecture pour l&#039;ajout de nouvelles applications facilement&lt;br /&gt;
&lt;br /&gt;
===Sprint 2===&lt;br /&gt;
&#039;&#039;&#039;Backend&#039;&#039;&#039;&lt;br /&gt;
* Poc de l&#039;API&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frontend&#039;&#039;&#039;&lt;br /&gt;
* Amélioration du code existant par rapport aux critiques soulevés dans le sprint 1&lt;br /&gt;
* Poc de la nouvelle application définit avec l&#039;orthophoniste&lt;br /&gt;
&lt;br /&gt;
=Journal=&lt;br /&gt;
&lt;br /&gt;
== Sprint 0 ==&lt;br /&gt;
&#039;&#039; Vendredi 29 Janvier &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Découverte du projet&lt;br /&gt;
* Installation des outils et du code déjà existant&lt;br /&gt;
* Réunion avec le client : Olivier Richard, pour préciser le projet et ses objectifs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Lundi 08 Février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Réunion avec le client Olivier Richard et les 2 anciens INFO5 ayant continué à travailler sur le projet pour définir ce qui a été fait et ce qui doit être fait.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Mercredi 10 Février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Retour sur la réunion et discutions autour de la gestion de projet &lt;br /&gt;
* Définition des objectifs principaux du projet et des milestones&lt;br /&gt;
* Planification du rétro planning et des sprints&lt;br /&gt;
* Répartition des rôles : &lt;br /&gt;
** Equipe Backend : Gaëtan et Rémy&lt;br /&gt;
** Equipe Frontend : Claire et Morgan&lt;br /&gt;
&lt;br /&gt;
* Réunion avec les 2 anciens INFO5 pour obtenir les fichiers manquants sur le git et les informations nécessaires à l&#039;exportation du projet godot sous Android afin de tester la version final. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Jeudi 11 Février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Prise en main de Godot Engine&lt;br /&gt;
* Création d&#039;un mini projet à part pour découvrir et tester les fonctionnalités de Godot Engine&lt;br /&gt;
* Elaboration diagramme de l&#039;architecture de l&#039;application Artiphonie&lt;br /&gt;
* Elaboration diagramme BDD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Vendredi 12 Février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Poursuite du travail de découverte de Godot&lt;br /&gt;
* Mise en place d&#039;une interface graphique sur le mini projet&lt;br /&gt;
* Découverte et mise en place de tests unitaires en Godot sur le mini projet qui pourraient être ajouté au projet Artiphonie&lt;br /&gt;
* Approfondissement diagramme de l&#039;architecture de l&#039;application Artiphonie&lt;br /&gt;
* Approfondissement diagramme BDD&lt;br /&gt;
* Elaboration de la preuve de concept (POC) sur le backend avec une application Godot liée à une base de donnée par requête HTTP&lt;br /&gt;
* Réflexion sur les choix de technos utilisées pour la POC sur l&#039;API et la BDD&lt;br /&gt;
* Commencement du développement de l&#039;API en Spring pour la POC&lt;br /&gt;
&lt;br /&gt;
== Sprint 1 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Lundi 22 Février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Revue de code&lt;br /&gt;
* Discussion sur le diagramme de BDD en groupe complet&lt;br /&gt;
* Mise en place d&#039;issues liées l&#039;amélioration de l&#039;application existante&lt;br /&gt;
* Peaufinement diagramme BDD avec l&#039;ajustement de certaines tables&lt;br /&gt;
* Réalisation de la doc sur le diagramme BDD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Mardi 23 Février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Revue de code&lt;br /&gt;
* Test de l&#039;exportation du projet sous Android&lt;br /&gt;
* Réalisation d&#039;une doc pour l&#039;exportation sous Android&lt;br /&gt;
* Réflexion sur la maintenance à long terme de l&#039;application&lt;br /&gt;
* Finition du développement de l&#039;API avec la liaison avec la BDD PostSQL pour la POC&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Mercredi 24 février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Résolutions d&#039;issues soulevées lors de la revue de code&lt;br /&gt;
* Développement de l&#039;application GODOT pour la POC avec l&#039;envoi de requetes HTTP POST et GET&lt;br /&gt;
* Mise à jour de la partie permission Android de l&#039;application, retirer la partie deprecated et faire avec les fonctions built-in&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Jeudi 25 Février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Résolutions d&#039;issues soulevées lors de la revue de code&lt;br /&gt;
* Réunion avec Estelle GILLET-PERRET pour parler de l&#039;application existante et de la nouvelle application.&lt;br /&gt;
* Fusion des deux parties de la POC avec l&#039;application GODOT communiquant avec la BDD par l&#039;intermédiaire de l&#039;API&lt;br /&gt;
* Redéfinition des entités de l&#039;application (à penser en lien avec la BDD)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Vendredi 26 Février &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Préparation de la soutenance intermédiaire&lt;br /&gt;
* Soutenance intermédiaire&lt;br /&gt;
* Réflexion autour de la RGPD accès sur le projet&lt;br /&gt;
* Création de l&#039;entité Word, Words, ... sur l&#039;application&lt;br /&gt;
&lt;br /&gt;
== Sprint 2 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Lundi 01 Mars&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Réunion avec le porteur de projet (M. Richard) pour redéfinir les objectifs suite à la réunion avec l&#039;orthophoniste&lt;br /&gt;
* Réalisation du poster de présentation du projet en anglais&lt;br /&gt;
* Finalisation de la POC avec l&#039;affichage du résultat d&#039;une requête GET sur Godot&lt;br /&gt;
* Adaptation du bouton &#039;&#039;à propos&#039;&#039; à la nouvelle architecture&lt;br /&gt;
* Mise en place des templates (shared dans le projet).&lt;br /&gt;
* Premier template réalisé home (menu des applications).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Mardi 02 Mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Redaction de la documentation (Markdown) de la POC Godot HTTP connectée à une base de donnée PostgreSQL par l&#039;intermédiaire d&#039;une API Spring&lt;br /&gt;
* Création de la scène partagé &#039;&#039;s&#039;entrainer&#039;&#039;&lt;br /&gt;
* Template &amp;quot;Learning&amp;quot; implémenté&lt;br /&gt;
* Template &amp;quot;playing&amp;quot; implémenté avec un système de difficulté&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Mercredi 03 Mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Mise en place de la VM Azure et configuration de cette dernière pour heberger notre base de donnée et API&lt;br /&gt;
* Deploiement de l&#039;API et BDD, puis phases de tests à distance&lt;br /&gt;
* Adaptation du memory à la nouvelle architecture&lt;br /&gt;
* Conversion du jeu goose game sur la nouvelle application.&lt;br /&gt;
* Création du template de prononciation utilisé pour Artiphonie&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Jeudi 04 Mars&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Correction du poster de présentation du projet en anglais&lt;br /&gt;
* Ajustement de l&#039;API avec correction de bug&lt;br /&gt;
* Basculement des requetes HTTP en HTTPS avec la mise en place d&#039;un certificat sur la VM Azure&lt;br /&gt;
* Adaptation de la scène de fin de jeu&lt;br /&gt;
* Implémentation de la partie learning (qui est non partagé)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Vendredi 05 Mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Rédaction de la spécification de l&#039;API&lt;br /&gt;
* Création des scores des jeux&lt;br /&gt;
* Implémentation d&#039;un système de liste de mot, changeable depuis le menu principal.&lt;br /&gt;
* Définition des difficultés pour les jeux existant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Lundi 08 Mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Mise à jour de la structure de la BDD avec l&#039;avancé et les changements de l&#039;application Artiphonie&lt;br /&gt;
* Adaptation du jeu &#039;&#039;écoute et choisis&#039;&#039; à la nouvelle architecture&lt;br /&gt;
* Réflexion autour de la façon de trouver si un mot prononcé est correct, la méthode employé précédemment était d&#039;entrer tous les homonymes d&#039;un mot (ce qui n&#039;est pas envisageable pour la version finale)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Mardi 09 Mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;un espace de création de mot en lien avec Lexique sur l&#039;application (Fonctionnalité supprimé post-réunion).&lt;br /&gt;
* Découverte de l&#039;API ARASAAC.&lt;br /&gt;
* Réunion avec M. Richard sur l&#039;avancé du projet&lt;br /&gt;
* Redéfinition de Word, pour savoir si un mot prononcé est correct on se fit à sa phonétique obtenue grâce à Lexique.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mercredi 10 Mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Amélioration de l&#039;ergonomie de la BDD pour stocker des images&lt;br /&gt;
* Modification de l&#039;entitée Mot sur le front-end et back-end (normalisation avec les données de Lexique)&lt;br /&gt;
* Création d&#039;un script d&#039;export pour les mots lexiques.&lt;br /&gt;
* Création d&#039;un script d&#039;export pour les images d&#039;ARASAAC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Jeudi 11 Mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Elaboration du POC HTTPS avec une application GODOT&lt;br /&gt;
* Développement des fonctions dans l&#039;API&lt;br /&gt;
* Création de la page principal de l&#039;application qui mène vers les sous application tel qu&#039;Artiphonie&lt;br /&gt;
* L&#039;espace avatar est repensé et recréer avec des objets que le joueur peut acheter avec des étoiles qui viennent améliorer l&#039;avatar&lt;br /&gt;
* Création d&#039;un script exportant tous les données nécessaire à la BDD (Lexique + ARASAAC)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Vendredi 12 Mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Déboggage certificat HTTPS sur le serveur Artiphonie&lt;br /&gt;
* Développement des fonctions dans l&#039;API&lt;br /&gt;
* Travail sur l&#039;espace d&#039;avatar&lt;br /&gt;
* Redéfinition de la relation mot - image, un mot peut être lié à une image et une image peut être lié à plusieurs mot&lt;br /&gt;
* Pour limiter le nombre d&#039;image dans la BDD, création d&#039;un algorithme de regroupement des mots (manger, mangé, mangerais == même image)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Lundi 15 mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Déboggage certificat HTTPS sur le serveur Artiphonie&lt;br /&gt;
* Ajout des instructions&lt;br /&gt;
* Création de liste de mot par défaut (générale, monosyllabique, bisyllabique, ...)&lt;br /&gt;
* Redéfinition du nom des fichiers images généré par la fonctionnalité d&#039;export car non supporté sur Android (nom donné en ASCII)&lt;br /&gt;
* Affichage de l&#039;avatar sur les menus&lt;br /&gt;
* Ajout de la difficulté phonétique&lt;br /&gt;
* Insertion et conversion des fichiers vidéos dans la partie Learning&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Mardi 16 mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Mercredi 17 mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Jeudi 18 mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; Vendredi 19 mars &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Soutenance finale sur le projet Artiphonie&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
* Depôt Git: https://github.com/WriteInGesturesProject&lt;br /&gt;
* Diapo soutenance intermédiaire : [[Media:Presentation_Intermediaire_INFO5_ProjetS10_groupe_13.pdf|Présentation Mi-Projet]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_2021_Artiphonie_(saison_2)&amp;diff=50400</id>
		<title>PROJET-INFO5 2021 Artiphonie (saison 2)</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_2021_Artiphonie_(saison_2)&amp;diff=50400"/>
		<updated>2021-01-29T11:32:27Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Journal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Le projet= &lt;br /&gt;
=L&#039;équipe=&lt;br /&gt;
* Morgan Crociati&lt;br /&gt;
* Gaëtan Rival&lt;br /&gt;
* Rémy Ruzafa&lt;br /&gt;
* Claire Velut&lt;br /&gt;
&lt;br /&gt;
Supervisé par : Bastien De Araujo, Guillaume Denis, Estelle Gillet-Perret et Olivier Richard&lt;br /&gt;
&lt;br /&gt;
=Journal=&lt;br /&gt;
&lt;br /&gt;
== Vendredi 29 Janvier ==&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48824</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48824"/>
		<updated>2020-11-27T15:36:43Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Démonstration des performances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
= Code utilisé =&lt;br /&gt;
[[File:Code_exemple_demo.PNG|thumb|center|800px| Code utilisé pour calculer la suite de Fibonacci lors de la démo]]&lt;br /&gt;
Site web pour compilé le code C et pouvoir lire le code assembleur: https://mbebenita.github.io/WasmExplorer/&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Copiez le code C dans la partie C++ du site&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Cliquez sur compiler&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Site web utilisé pour créer une alerte &amp;quot;Hello World&amp;quot; en Rust: https://webassembly.studio/&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Créer  un nouveau projet de type &amp;quot;Hello World Rust Project&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Vous pouvez regarder les sources&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Cliquez sur &amp;quot;build &amp;amp; run&amp;quot;, normalement une alerte apparait&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Vous avez maintenant accès aux sources compilé en WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
Comme on peut le voir dans les graphiques ci-dessus, le WebAssembly est plus rapide que le Javascript majoritairement.&lt;br /&gt;
Mais on remarque aussi quelque chose d&#039;autre, le Javascript n&#039;est pas toujours stable dans ses performances car il doit être compilé en JIT tandis que le WebAssembly est stable dès le premier lancement comme celui est compilé AOT.&lt;br /&gt;
&lt;br /&gt;
Site pour montrer les différences de performances utilisé pendant la démo: https://fib.johnny.sh/ &amp;amp; http://aws-website-webassemblyskeletalanimation-ffaza.s3-website-us-east-1.amazonaws.com/&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
[[File:Canvas_ink_webassembly.PNG|thumb|center|1200px| Application de dessin faites en WebAssembly par Google ([https://canvas.apps.chrome/| lien])]]&lt;br /&gt;
[[File:Doom3_webassembly.PNG|thumb|center|1200px| Portage de Doom 3 en WebAssembly ([https://wasm.continuation-labs.com/d3demo/| lien])]]&lt;br /&gt;
[[File:Made_with_webassembly.PNG|thumb|center|1200px| Site web regroupant un ensemble d&#039;application réalisé en WebAssembly ([https://madewithwebassembly.com/| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48823</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48823"/>
		<updated>2020-11-27T15:34:17Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Code utilisé */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
= Code utilisé =&lt;br /&gt;
[[File:Code_exemple_demo.PNG|thumb|center|800px| Code utilisé pour calculer la suite de Fibonacci lors de la démo]]&lt;br /&gt;
Site web pour compilé le code C et pouvoir lire le code assembleur: https://mbebenita.github.io/WasmExplorer/&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Copiez le code C dans la partie C++ du site&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Cliquez sur compiler&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Site web utilisé pour créer une alerte &amp;quot;Hello World&amp;quot; en Rust: https://webassembly.studio/&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Créer  un nouveau projet de type &amp;quot;Hello World Rust Project&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Vous pouvez regarder les sources&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Cliquez sur &amp;quot;build &amp;amp; run&amp;quot;, normalement une alerte apparait&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Vous avez maintenant accès aux sources compilé en WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
[[File:Canvas_ink_webassembly.PNG|thumb|center|1200px| Application de dessin faites en WebAssembly par Google ([https://canvas.apps.chrome/| lien])]]&lt;br /&gt;
[[File:Doom3_webassembly.PNG|thumb|center|1200px| Portage de Doom 3 en WebAssembly ([https://wasm.continuation-labs.com/d3demo/| lien])]]&lt;br /&gt;
[[File:Made_with_webassembly.PNG|thumb|center|1200px| Site web regroupant un ensemble d&#039;application réalisé en WebAssembly ([https://madewithwebassembly.com/| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48822</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48822"/>
		<updated>2020-11-27T15:31:31Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Code utilisé */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
= Code utilisé =&lt;br /&gt;
[[File:Code_exemple_demo.PNG|thumb|center|800px| Code utilisé pour calculer la suite de Fibonacci lors de la démo]]&lt;br /&gt;
Site web pour compilé le code C et pouvoir lire le code assembleur: https://mbebenita.github.io/WasmExplorer/&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
[[File:Canvas_ink_webassembly.PNG|thumb|center|1200px| Application de dessin faites en WebAssembly par Google ([https://canvas.apps.chrome/| lien])]]&lt;br /&gt;
[[File:Doom3_webassembly.PNG|thumb|center|1200px| Portage de Doom 3 en WebAssembly ([https://wasm.continuation-labs.com/d3demo/| lien])]]&lt;br /&gt;
[[File:Made_with_webassembly.PNG|thumb|center|1200px| Site web regroupant un ensemble d&#039;application réalisé en WebAssembly ([https://madewithwebassembly.com/| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48821</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48821"/>
		<updated>2020-11-27T15:24:57Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Exemple d&amp;#039;utilisation du WebAssembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
= Code utilisé =&lt;br /&gt;
[[File:Code_exemple_demo.PNG|thumb|center|800px| Code utilisé pour calculer la suite de Fibonacci lors de la démo]]&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
[[File:Canvas_ink_webassembly.PNG|thumb|center|1200px| Application de dessin faites en WebAssembly par Google ([https://canvas.apps.chrome/| lien])]]&lt;br /&gt;
[[File:Doom3_webassembly.PNG|thumb|center|1200px| Portage de Doom 3 en WebAssembly ([https://wasm.continuation-labs.com/d3demo/| lien])]]&lt;br /&gt;
[[File:Made_with_webassembly.PNG|thumb|center|1200px| Site web regroupant un ensemble d&#039;application réalisé en WebAssembly ([https://madewithwebassembly.com/| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Doom3_webassembly.PNG&amp;diff=48820</id>
		<title>File:Doom3 webassembly.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Doom3_webassembly.PNG&amp;diff=48820"/>
		<updated>2020-11-27T15:23:40Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Canvas_ink_webassembly.PNG&amp;diff=48819</id>
		<title>File:Canvas ink webassembly.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Canvas_ink_webassembly.PNG&amp;diff=48819"/>
		<updated>2020-11-27T15:19:30Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48818</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48818"/>
		<updated>2020-11-27T15:16:30Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
= Code utilisé =&lt;br /&gt;
[[File:Code_exemple_demo.PNG|thumb|center|800px| Code utilisé pour calculer la suite de Fibonacci lors de la démo]]&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
[[File:Made_with_webassembly.PNG|thumb|center|1200px| Site web regroupant un ensemble d&#039;application réalisé en WebAssembly ([https://madewithwebassembly.com/| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Code_exemple_demo.PNG&amp;diff=48817</id>
		<title>File:Code exemple demo.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Code_exemple_demo.PNG&amp;diff=48817"/>
		<updated>2020-11-27T15:15:39Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48816</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48816"/>
		<updated>2020-11-27T15:12:54Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
= Code utilisé =&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
[[File:Made_with_webassembly.PNG|thumb|center|1200px| Site web regroupant un ensemble d&#039;application réalisé en WebAssembly ([https://madewithwebassembly.com/| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48815</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48815"/>
		<updated>2020-11-27T15:12:19Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Exemple d&amp;#039;utilisation du WebAssembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
[[File:Made_with_webassembly.PNG|thumb|center|1200px| Site web regroupant un ensemble d&#039;application réalisé en WebAssembly ([https://madewithwebassembly.com/| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Made_with_webassembly.PNG&amp;diff=48814</id>
		<title>File:Made with webassembly.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Made_with_webassembly.PNG&amp;diff=48814"/>
		<updated>2020-11-27T15:11:33Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48813</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48813"/>
		<updated>2020-11-27T15:09:47Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Démonstration des performances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|600px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48812</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48812"/>
		<updated>2020-11-27T15:09:27Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Démonstration des performances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|1200px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|1000px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|1000px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48811</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48811"/>
		<updated>2020-11-27T15:09:11Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Démonstration des performances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|1200px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
[[File:WebAssembly-Performance-Firefox-1024x625.png|thumb|center|1200px| Comparaison du Javascript et du WebAssembly sur un algorithme de cryptographie]]&lt;br /&gt;
[[File:WebAssembly-Performance-Consecutive-Runs.png|thumb|center|1200px| Comparaison du Javascript et du WebAssembly sur des benchmarks cryptographiques consécutifs]]&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:WebAssembly-Performance-Consecutive-Runs.png&amp;diff=48810</id>
		<title>File:WebAssembly-Performance-Consecutive-Runs.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:WebAssembly-Performance-Consecutive-Runs.png&amp;diff=48810"/>
		<updated>2020-11-27T15:08:28Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:WebAssembly-Performance-Firefox-1024x625.png&amp;diff=48809</id>
		<title>File:WebAssembly-Performance-Firefox-1024x625.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:WebAssembly-Performance-Firefox-1024x625.png&amp;diff=48809"/>
		<updated>2020-11-27T15:08:02Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48808</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48808"/>
		<updated>2020-11-27T15:03:14Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Référence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
=== WebAssembly et Javascript ===&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM et doit donc se reposer sur le Javascript pour interagir avec celui-ci.&lt;br /&gt;
&lt;br /&gt;
L&#039;écart de performance entre le Javascript et le WebAssembly vient du faites que le WebAssembly est généralement compilé &amp;quot;ahead of time&amp;quot; tandis que le Javascript est compilé &amp;quot;just in time&amp;quot;..&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exemple ===&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Langage officiellement supporté ===&lt;br /&gt;
[[File:Webassembly_official_language.PNG]]&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
=== Guerre des standards ===&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Création du WebAssembly ===&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
# https://github.com/appcypher/awesome-wasm-langs&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48807</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48807"/>
		<updated>2020-11-27T14:57:57Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
[[File:Array_reverse_perf.png|thumb|center|1200px| Comparaison du Javascript et du WebAssembly sur un algorithme d&#039;inversion de tableau]]&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Array_reverse_perf.png&amp;diff=48806</id>
		<title>File:Array reverse perf.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Array_reverse_perf.png&amp;diff=48806"/>
		<updated>2020-11-27T14:57:09Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48805</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48805"/>
		<updated>2020-11-27T14:56:07Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Outils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
* [https://emscripten.org/| Emscripten], un &amp;quot;compilateur&amp;quot; pour le C/C++ pour compiler en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48804</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48804"/>
		<updated>2020-11-27T14:54:28Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Outils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
* [https://mbebenita.github.io/WasmExplorer/| WebAssembly Explorer], un outil pour explorer le code générer en WebAssembly.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48803</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48803"/>
		<updated>2020-11-27T14:53:42Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Outils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio], un outil pour essayer le WebAssembly en ligne supportant le C/C++ et Rust.&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48802</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48802"/>
		<updated>2020-11-27T14:52:35Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Outils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
* [https://webassembly.studio/| WebAssembly Studio]&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48801</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48801"/>
		<updated>2020-11-27T14:51:30Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Exemple d&amp;#039;utilisation du WebAssembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google ([https://squoosh.app/index.html| lien])]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48800</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48800"/>
		<updated>2020-11-27T14:50:51Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Exemple d&amp;#039;utilisation du WebAssembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|thumb|center|1200px| Application de compression d&#039;image faites en WebAssembly par Google]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48799</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48799"/>
		<updated>2020-11-27T14:50:31Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Exemple d&amp;#039;utilisation du WebAssembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|frameless|1000px| Application de compression d&#039;image faites en WebAssembly par Google]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48798</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48798"/>
		<updated>2020-11-27T14:50:24Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Exemple d&amp;#039;utilisation du WebAssembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|frame|1000px| Application de compression d&#039;image faites en WebAssembly par Google]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48797</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48797"/>
		<updated>2020-11-27T14:50:16Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Exemple d&amp;#039;utilisation du WebAssembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|1000px| Application de compression d&#039;image faites en WebAssembly par Google]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48796</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48796"/>
		<updated>2020-11-27T14:50:09Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Exemple d&amp;#039;utilisation du WebAssembly */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|100px| Application de compression d&#039;image faites en WebAssembly par Google]]&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48795</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48795"/>
		<updated>2020-11-27T14:49:52Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG| Application de compression d&#039;image faites en WebAssembly par Google]]&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48794</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48794"/>
		<updated>2020-11-27T14:49:39Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|frame|1000px| Application de compression d&#039;image faites en WebAssembly par Google]]&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48793</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48793"/>
		<updated>2020-11-27T14:49:23Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
[[File:Squoosh_app.PNG|frame| Application de compression d&#039;image faites en WebAssembly par Google]]&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Squoosh_app.PNG&amp;diff=48792</id>
		<title>File:Squoosh app.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Squoosh_app.PNG&amp;diff=48792"/>
		<updated>2020-11-27T14:48:25Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48791</id>
		<title>VT2020-WebAssembly-Demo</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Demo&amp;diff=48791"/>
		<updated>2020-11-27T14:42:43Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Démonstration du WebAssembly&lt;br /&gt;
&lt;br /&gt;
= Démonstration des performances =&lt;br /&gt;
&lt;br /&gt;
= Exemple d&#039;utilisation du WebAssembly =&lt;br /&gt;
&lt;br /&gt;
= Outils =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[VT2020-WebAssembly-Fiche|Fiche]]&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48790</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48790"/>
		<updated>2020-11-27T14:41:23Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Historique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
=== WebAssembly et Javascript ===&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM et doit donc se reposer sur le Javascript pour interagir avec celui-ci.&lt;br /&gt;
&lt;br /&gt;
L&#039;écart de performance entre le Javascript et le WebAssembly vient du faites que le WebAssembly est généralement compilé &amp;quot;ahead of time&amp;quot; tandis que le Javascript est compilé &amp;quot;just in time&amp;quot;..&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exemple ===&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Langage officiellement supporté ===&lt;br /&gt;
[[File:Webassembly_official_language.PNG]]&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
=== Guerre des standards ===&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Création du WebAssembly ===&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Roadmap ===&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48789</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48789"/>
		<updated>2020-11-27T14:41:07Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
=== WebAssembly et Javascript ===&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM et doit donc se reposer sur le Javascript pour interagir avec celui-ci.&lt;br /&gt;
&lt;br /&gt;
L&#039;écart de performance entre le Javascript et le WebAssembly vient du faites que le WebAssembly est généralement compilé &amp;quot;ahead of time&amp;quot; tandis que le Javascript est compilé &amp;quot;just in time&amp;quot;..&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exemple ===&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Langage officiellement supporté ===&lt;br /&gt;
[[File:Webassembly_official_language.PNG]]&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48788</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48788"/>
		<updated>2020-11-27T14:37:31Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Langage supporté */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
== WebAssembly et Javascript ==&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM et doit donc se reposer sur le Javascript pour interagir avec celui-ci.&lt;br /&gt;
&lt;br /&gt;
L&#039;écart de performance entre le Javascript et le WebAssembly vient du faites que le WebAssembly est généralement compilé &amp;quot;ahead of time&amp;quot; tandis que le Javascript est compilé &amp;quot;just in time&amp;quot;..&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Langage officiellement supporté ==&lt;br /&gt;
[[File:Webassembly_official_language.PNG]]&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48787</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48787"/>
		<updated>2020-11-27T14:37:01Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Langage supporté */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
== WebAssembly et Javascript ==&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM et doit donc se reposer sur le Javascript pour interagir avec celui-ci.&lt;br /&gt;
&lt;br /&gt;
L&#039;écart de performance entre le Javascript et le WebAssembly vient du faites que le WebAssembly est généralement compilé &amp;quot;ahead of time&amp;quot; tandis que le Javascript est compilé &amp;quot;just in time&amp;quot;..&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Langage supporté ==&lt;br /&gt;
[[File:Webassembly_official_language.PNG]]&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48786</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48786"/>
		<updated>2020-11-27T14:36:49Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
== WebAssembly et Javascript ==&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM et doit donc se reposer sur le Javascript pour interagir avec celui-ci.&lt;br /&gt;
&lt;br /&gt;
L&#039;écart de performance entre le Javascript et le WebAssembly vient du faites que le WebAssembly est généralement compilé &amp;quot;ahead of time&amp;quot; tandis que le Javascript est compilé &amp;quot;just in time&amp;quot;..&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Langage supporté ==&lt;br /&gt;
&lt;br /&gt;
[[File:Webassembly_official_language.PNG|frame]]&lt;br /&gt;
Webassembly_official_language.PNG&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Webassembly_official_language.PNG&amp;diff=48785</id>
		<title>File:Webassembly official language.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Webassembly_official_language.PNG&amp;diff=48785"/>
		<updated>2020-11-27T14:36:08Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48784</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48784"/>
		<updated>2020-11-27T14:34:37Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
== WebAssembly et Javascript ==&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM et doit donc se reposer sur le Javascript pour interagir avec celui-ci.&lt;br /&gt;
&lt;br /&gt;
L&#039;écart de performance entre le Javascript et le WebAssembly vient du faites que le WebAssembly est généralement compilé &amp;quot;ahead of time&amp;quot; tandis que le Javascript est compilé &amp;quot;just in time&amp;quot;..&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48783</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48783"/>
		<updated>2020-11-27T14:25:45Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* WebAssembly et Javascript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
== WebAssembly et Javascript ==&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM.&lt;br /&gt;
En général ce langage est un compilé &amp;quot;ahead of time&amp;quot; (AOT) contrairement au Javascript qui est compilé &amp;quot;just in time&amp;quot; (JIT).&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48782</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48782"/>
		<updated>2020-11-27T14:25:33Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
== WebAssembly et Javascript ==&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM.&lt;br /&gt;
En général ce langage est un compilé &amp;quot;ahead of time&amp;quot; (AOT) contrairement au Javascript qui est compilé &amp;quot;just in time&amp;quot; (JIT).&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48781</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48781"/>
		<updated>2020-11-27T14:25:23Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
== WebAssembly et Javascript ==&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM.&lt;br /&gt;
En général ce langage est un compilé &amp;quot;ahead of time&amp;quot; (AOT) contrairement au Javascript qui est compilé &amp;quot;just in time&amp;quot; (JIT).&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
&lt;br /&gt;
[[File:javascript_vs_webassembly.png|thumb|right| Créé par [https://twitter.com/diekus| @diekus]]]&lt;br /&gt;
javascript_vs_webassembly.png&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Javascript_vs_webassembly.png&amp;diff=48780</id>
		<title>File:Javascript vs webassembly.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Javascript_vs_webassembly.png&amp;diff=48780"/>
		<updated>2020-11-27T14:23:31Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48779</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48779"/>
		<updated>2020-11-27T14:21:45Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie du web, elle vient s&#039;ajouter à la majorité des navigateurs et rejoins la famille des langages/technologies reconnue par des navigateurs (HTML, CSS et Javascript). &lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur. Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
La technologie a été créer pour ajouter à l&#039;arsenal des navigateurs une technologie permettant d&#039;avoir performances meilleurs que celle du Javascript, et permettre ainsi aux navigateurs d&#039;avoir accés à des applications hautes performances ou plus sécurisé en utilisant les ressources de l&#039;utilisateur et non pas d&#039;un serveur.&lt;br /&gt;
&lt;br /&gt;
== WebAssembly et Javascript ==&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM.&lt;br /&gt;
En général ce langage est un compilé &amp;quot;ahead of time&amp;quot; (AOT) contrairement au Javascript qui est compilé &amp;quot;just in time&amp;quot; (JIT).&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
== Exemple ==&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48778</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48778"/>
		<updated>2020-11-27T13:40:41Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Il vient s&#039;ajouter à l&#039;HTML, au CSS et au Javascript.&lt;br /&gt;
&lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur.&lt;br /&gt;
Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
C&#039;est pourquoi cette technologie vient s&#039;ajouter à l&#039;arsenal des navigateurs pour leur permettre d&#039;avoir des applications hautes performances.&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM.&lt;br /&gt;
En général ce langage est un compilé &amp;quot;ahead of time&amp;quot; (AOT) contrairement au Javascript qui est compilé &amp;quot;just in time&amp;quot; (JIT).&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
== Exemple ==&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48777</id>
		<title>VT2020-WebAssembly-Fiche</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2020-WebAssembly-Fiche&amp;diff=48777"/>
		<updated>2020-11-27T13:12:26Z</updated>

		<summary type="html">&lt;p&gt;Morgan.Crociati: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiche WebAssembly&lt;br /&gt;
&lt;br /&gt;
[[File:WebAssembly_Logo.png|400px|thumb|Logo du WebAssembly]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= TLDR =&lt;br /&gt;
Le WebAssembly est une nouvelle technologie ajouté à la majorité des navigateurs internet en 2017.&lt;br /&gt;
Il s&#039;apparente à de l&#039;assembleur pour le web.&lt;br /&gt;
Son objectif est de permettre l’exécution d&#039;application haute performances sur le navigateur.&lt;br /&gt;
Contrairement au Javascript, pour utiliser le WebAssembly nous devons passer (majoritairement) par une compilation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
Il vient s&#039;ajouter à l&#039;HTML, au CSS et au Javascript.&lt;br /&gt;
&lt;br /&gt;
WebAssembly vient de la concaténation de web et assembleur.&lt;br /&gt;
Cela reflète l&#039;objectif de cette technologie, obtenir des performances sur le web proche du natif.&lt;br /&gt;
C&#039;est pourquoi cette technologie vient s&#039;ajouter à l&#039;arsenal des navigateurs pour leur permettre d&#039;avoir des applications hautes performances.&lt;br /&gt;
Le WebAssembly n&#039;a pas pour objectif de venir perturber le Javascript, les deux langages sont complémentaire.&lt;br /&gt;
Cela est particulière vrai car le WebAssembly n&#039;a pas de moyen natif d’interagir avec le DOM.&lt;br /&gt;
En général ce langage est un compilé &amp;quot;ahead of time&amp;quot; (AOT) contrairement au Javascript qui est compilé &amp;quot;just in time&amp;quot; (JIT).&lt;br /&gt;
On peut soit écrire directement en WebAssembly, même si cela n&#039;est pas le but de la technologie en elle même.&lt;br /&gt;
Le but est d&#039;écrire dans un autre langage de programmation (C, C++, Rust, ...).&lt;br /&gt;
La technologie est encore assez jeune, donc seul un petit ensemble de langage possède un compilateur pour le WebAssembly.&lt;br /&gt;
&lt;br /&gt;
[[File:webassembly_example_compilation.PNG|frame|center| center| Exemple compilation de code C, en WebAssembly (.wat à gauche et .wasm à droite)]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Historique =&lt;br /&gt;
== Guerre des standards ==&lt;br /&gt;
Avant la création du WebAssembly, les grandes entreprises du web (Google, Mozilla, Microsoft, ...) avaient compris que les navigateurs manquaient d&#039;une technologie leur permettant d&#039;avoir de meilleur performance que le Javascript. Cette technologie permettrait de pouvoir faire fonctionner directement depuis un navigateurs des applications lourde, que l&#039;on aurait considéré comme native auparavant.&lt;br /&gt;
&lt;br /&gt;
L&#039;initiative de Google pour créer cette technologie se nomme [https://en.wikipedia.org/wiki/Google_Native_Client| Google Native Client (ou NaCl)]. NaCl fut créé en 2011 et fut. La technologie fonctionner sur un principe de sandboxing, permettant de faire fonctionner du code natif peut importe l&#039;architecture visé (x86, ARM, ...). L&#039;objectif de Google est de faire cette technologie un des piliers [https://en.wikipedia.org/wiki/Chrome_OS| Chrome OS], qui avait pour ambition d&#039;utiliser en majorité des web apps. En 2017, Google annonce l&#039;obsolescence de cette technologie. NaCl a tout de même était une assez belle réussite de Google, car avant son obsolescence on pouvait utiliser l’accélération matériel graphique pour pouvoir faire marcher des jeux par exemple.&lt;br /&gt;
&lt;br /&gt;
[[File:ActiveX_logo.png|thumb|100px|right]]&lt;br /&gt;
L&#039;initiative de Microsoft pour créer cette technologie ne fut pas quelque chose de direct, une évolution de leur technologie [https://en.wikipedia.org/wiki/ActiveX| ActiveX] (vieille de 1996) permet en soit de pouvoir faire tourner du code natif sur leur navigateur. ActiveX fut adopter par de nombreux navigateur en dehors de Microsoft de part son ancienneté, mais ses capacités étaient très limité. Les performances d&#039;ActiveX était très loin des performances d&#039;un code natif. Aujourd&#039;hui ActiveX n&#039;est plus utilisé pour le web par Microsoft, car la technologie n&#039;est plus accessible depuis Edge (leur nouveau navigateur). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:code_example_asmjs.png|thumb|550px|right| Exemple de code asm.js]]&lt;br /&gt;
L&#039;initiative de Mozilla est surement celle qui a eu le plus d&#039;impact sur WebAssembly. Leur technologie se nomme [https://en.wikipedia.org/wiki/Asm.js| asm.js], créé par une équipe à Mozilla (dont Alon Zakai) en 2013. Le but de cette technologie était d&#039;être compatible avec tous les navigateurs, car le code était toujours du Javascript mais que dans certain navigateur le code pouvait gagné en performance de part la façon dont il était écrit. Pour gagner en performance asm.js utilisait un espace mémoire modifiable (cf. MEM8 dans image ci-dessous) ainsi que du code pour inférer le type d&#039;une variable (cf. |0 permet de au navigateur de savoir que ptr est un entier sur 32bits dans l&#039;image ci-dessous). Pour créer du code compatible avec asm.js, soit on peut écrire directement en Javascript (un peu complexe car il faudra respecter scrupuleusement la nomenclature permettant de gagner en performance) ou plus communément en écrivant du code dans un autre langage (C, C++, Rust, ...) et compiler le code en asm.js. Les capacités de asm.js furent montré au travers d&#039;une implémentation d&#039;une démo technique (Citadel) tournant sous le moteur Unreal Engine 3, le moteur fut implémenté en 3 jours en asm.js. Les performances de asm.js pouvait atteindre 2 fois moins que du code native (beaucoup plus performant que du Javascript normal).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Création du WebAssembly ==&lt;br /&gt;
[[File:W3C_Icon.png|500px|right|thumb| Logo du World Wide Web Consortium]]&lt;br /&gt;
Ayant vue le potentiel de asm.js, Mozilla décide d&#039;ouvrir la discussion avec les autres acteurs majeur du web et de créer un standard commun gérer par le World Wide Web Consortium (cf. image ci-dessous).&lt;br /&gt;
Le WebAssembly fut introduit au monde le 17 juin 2015. La technologie entre en browser preview en novembre 2016, puis en mars 2017 elle est disponible au grand publique.&lt;br /&gt;
&lt;br /&gt;
La sortie de la technologie a poussé à l&#039;obsolescence la plus part des autres technologies ayant le même objectif.&lt;br /&gt;
&lt;br /&gt;
Google Chrome (desktop) et Firefox (desktop) étaient les deux seules navigateurs compatible lors de sa sortie. Maintenant la majorité des navigateurs desktop et mobile supporte la technologie.&lt;br /&gt;
&lt;br /&gt;
A sa sortie WebAssembly était un MVP (minimum viable product) en 1.0, aujourd&#039;hui la technologie en est à sa version 1.1.&lt;br /&gt;
&lt;br /&gt;
Le nombre de langage supportant le WebAssembly en 2017 était très faible on y retrouvais notamment:&lt;br /&gt;
* C&lt;br /&gt;
* C++&lt;br /&gt;
* Rust&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
Même si WebAssembly est maintenant disponible au publique, celui-ci continue son développement avec des mises à jours semi-régulière (plus fréquente que les autres langages natif des navigateurs). Voici une courte roadmap des fonctionnalités qui sont envisagé dans avenir plus ou moins proche:&lt;br /&gt;
[[File:webassembly_post_mvp.png|frame|right| Roadmap post-mvp du WebAssembly visualisé par [https://hacks.mozilla.org/2018/10/webassemblys-post-mvp-future/| Lin Clark]]]&lt;br /&gt;
* Support du GPU par WebAssembly&lt;br /&gt;
* Multithreading&lt;br /&gt;
* Unification des librairies&lt;br /&gt;
* Garbage Collector&lt;br /&gt;
* Gestion des exceptions&lt;br /&gt;
* Amélioration du tracing&lt;br /&gt;
* Meilleur outils de débogage&lt;br /&gt;
* SIMD&lt;br /&gt;
* Adressage sur 64-bit&lt;br /&gt;
* Streaming compilation&lt;br /&gt;
* Tiered compilation&lt;br /&gt;
* Coroutines&lt;br /&gt;
* Linear memory bigger than 4gb&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[https://github.com/WebAssembly/design/blob/master/FutureFeatures.md| Lien vers une partie de leur roadmap à court terme.]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;br /&gt;
Pour plus d&#039;information pratique sur l&#039;utilisation du WebAssembly voici le lien de la [[VT2020-WebAssembly-Demo|démonstration]].&lt;br /&gt;
= Contribuer =&lt;br /&gt;
Il est possible de contribuer au projet de WebAssembly si cela vous intéresse. Pour contribuer il faut se rendre sur leur page Github, où l&#039;on peut voir tout leur projet en cours.&lt;br /&gt;
[https://github.com/WebAssembly| Page Github].&lt;br /&gt;
&lt;br /&gt;
De plus, il est possible de contribuer pour majorité des compilateurs de WebAssembly notable, comme par exemple:&lt;br /&gt;
* Emscripten (C/C++): https://github.com/emscripten-core&lt;br /&gt;
* AssemblyScript (~TypeScript): https://github.com/AssemblyScript&lt;br /&gt;
* Rust: https://www.rust-lang.org/&lt;br /&gt;
* Blazor (C#): https://github.com/dotnet/blazor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
= Référence =&lt;br /&gt;
# https://webassembly.org/&lt;br /&gt;
# https://webassembly.org/roadmap/&lt;br /&gt;
# https://github.com/WebAssembly/design/blob/master/FutureFeatures.md&lt;br /&gt;
# https://webassembly.org/getting-started/developers-guide/&lt;br /&gt;
# https://en.wikipedia.org/wiki/WebAssembly&lt;br /&gt;
# https://wasmbyexample.dev/home.en-us.html&lt;br /&gt;
# https://medium.com/dfinity/why-webassembly-f21967076e4&lt;br /&gt;
# https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/&lt;br /&gt;
# https://hacks.mozilla.org/2017/02/where-is-webassembly-now-and-whats-next/&lt;br /&gt;
# https://medium.com/javascript-scene/what-is-webassembly-the-dawn-of-a-new-era-61256ec5a8f6&lt;br /&gt;
# https://rsms.me/wasm-intro&lt;br /&gt;
# https://wasm-talk.johnny.sh/#0&lt;br /&gt;
# https://www.youtube.com/watch?v=kUljgnOE5-A&amp;amp;t=544s&lt;br /&gt;
# https://www.youtube.com/watch?v=drRaRRZ5AJk&amp;amp;t=2273s&lt;br /&gt;
# https://www.youtube.com/watch?v=njt-Qzw0mVY&amp;amp;t=2060s&lt;br /&gt;
# https://www.youtube.com/watch?v=jGKjKx2vous&amp;amp;t=629s&lt;br /&gt;
# https://madewithwebassembly.com/&lt;br /&gt;
# https://github.com/mbasso/awesome-wasm&lt;br /&gt;
&lt;br /&gt;
= Veille Technologique 2020 =&lt;br /&gt;
* Année : [[VT2020|VT2020]]&lt;br /&gt;
* Sujet : WebAssembly&lt;br /&gt;
* [[Media:VT2020-WebAssembly-Presentation.pdf|Présentation]]&lt;br /&gt;
* [[VT2020-WebAssembly-Demo|Démonstration]]&lt;br /&gt;
* Auteurs : [[User:Morgan.Crociati|Morgan Crociati]]&lt;/div&gt;</summary>
		<author><name>Morgan.Crociati</name></author>
	</entry>
</feed>