Introduction à web assembly

jbuget 519 views 26 slides Nov 10, 2017
Slide 1
Slide 1 of 26
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26

About This Presentation

Une courte présentation à WebAssembly, des avantages et cas d'usages associés, des concepts techniques derrière (cf. AOT vs JIT), de l'état actuel du marché et de l'avenir de cette tendance / technologie


Slide Content

Introduction à
WebAssembly
9 novembre 2017

Définition :
WebAssembly, ou wasm, est
un langage de programmation
binaire de bas niveau pour le
développement d’applications
dans les navigateurs Web.
https://fr.wikipedia.org/wiki/WebAssembly

Standard by design



https://www.w3.org/community/webassembly/
Apple
Google
Microsoft
Mozilla
Opera Software
Safari
Chrome
Edge
Firefox
Opera

“Rendre le Web
aussi performant
que le Natif”

Avantages


●Portabilité cross-browsers
●Poids des fichiers réduit
●Temps de chargement réduit
●Lisibilité pour un humain
●Facilement débuggable
●Sécurité en mode sandbox
●Compatibilité avec l’existant

Use cases
●Applications de traitement (image, son, vidéo, fichiers, données)
●Jeux vidéos : casuals (fast boot), AAA (heavy assets), portals / MMO
●Peer-to-peer
●Streaming
●Editeurs (online IDE) et interpréteurs (JSFiddle- & code-school- like)
●Clients lourds web-ifiés
●Logiciels de CAO (médical, architecture, industrie, transports & flux, etc.)
●Applications hybrides (mobiles)
●Opérations de calcul distribué
●Server-side applications (le futur des Services Workers ?)

http://webassembly.org/docs/faq/

Définition (bis) :
WebAssembly, ou wasm, est
un langage de programmation
binaire de bas niveau pour le
développement d’applications
dans les navigateurs Web.
https://fr.wikipedia.org/wiki/WebAssembly

“asm.js est mort !
longue vie à wasm !”
https://brendaneich.com/2015/06/from-asm-js-to-webassembly/

asm.js by Mozilla - Firefox, depuis 2013

asm.js is an intermediate programming language designed to allow computer software
written in languages such as C to be run as web applications while maintaining performance
characteristics considerably better than standard JavaScript, the typical language used for
such applications.

asm.js consists of a strict subset of JavaScript, into which code written in statically-typed
languages with manual memory management (such as C) is translated by a source-to-source
compiler such as Emscripten (based on LLVM). Performance is improved by limiting language
features to those amenable to ahead-of-time optimization and other performance
improvements.
http://asmjs.org/faq.html

Exemple de code
asm.js
http://asmjs.org/spec/latest/

NaCl & PNaCl by Google - Chrome, dès 2011

Native Client is a sandbox for running compiled C and C++ code in the browser
efficiently and securely, independent of the user’s operating system.

Portable Native Client extends that technology with architecture independence, letting
developers compile their code once to run in any website and on any architecture
with ahead-of-time (AOT) translation.

In short, Native Client brings the performance and low-level control of native code to modern
web browsers, without sacrificing the security and portability of the web. Watch the video
below for an overview of Native Client, including its goals, how it works, and how Portable
Native Client lets developers run native compiled code on the web.
https://developer.chrome.com/native-client

FTL JIT by Apple - Safari, depuis 2014

Le machin d’Apple, qui donne l’impression que les gars n’ont jamais vraiment cru à la
tendance / au concept.
https://trac.webkit.org/wiki/FTLJIT

AOT vs. JIT
https://hacks.mozilla.org/2017/02/what-makes-webassembly-fast/
cf. “Dans les entrailles de JavaScript”
by FRO

Just-in-Time (JiT) vs Ahead-of-Time (AoT) compilation
https://stackoverflow.com/questions/41450226/angular-2-just-in-time-jit-vs-ahead-of-time-aot-compilation

WebAssembly : le bytecode du Web
https://hacks.mozilla.org/2017/02/what-makes-webassembly-fast/

From: C / C++ / Rust / Python
To: JS + WASP + WAST + HTML

Glossaire
●Emscripten : un compilateur open source développé par Mozilla permettant de
compiler du bitcode LLVM en Javascript pour pouvoir l'exécuter dans n'importe
quel navigateur web. Le JS généré peut être du asm.js ou du wasm.
●LLVM : Low Level Virtual Machine. Architecture de compilateur. Equivalent de la
JVM pour Java. Son but est de transformer du code écrit dans un langage typé
dans un autre langage de plus haut niveau (Intermediate Representation).
●Clang : compilateur & optimiseur de code C / C++. Il s’agit d’une alternative
réputée plus rapide (lancement et exécution) et efficace (taille de l’output obtenu)
que gcc / g++.
●wast : abréviation pour WebAssembly Text Format. Format textuel de wasm.
http://webassembly.org/roadmap/

https://wasdk.github.io/WasmFiddle/
code.c -> code.wast

https://wasdk.github.io/WasmFiddle/
code.c -> code.wasm

Next steps
●Unifier / centraliser les bases de code et de documentation
●Basculer le niveau de spec de “expérimental” à “stable”
●Établir un nouveau véhicule de gouvernance au sein du W3C
●Améliorer l’outillage de développement (IDE, automation- & debug- tools)
●Enrichir la norme
●Augmenter le nombre de langages supportés (C / C++, Rust, Go, Python, etc.)
●Pouvoir appeler WebAssembly directement depuis HTML
http://webassembly.org/roadmap/

Faut-il dès à présent investir sur
WebAssembly ?

I usually finish with a joke:
« Always bet on JS ».
•••
Brendan Eich

Articles :
●[TL;DR] WebAssembly: A New Hope – by PSPDFKit [lien]
●[TL;DR] Getting Started With WebAssembly – [lien]
●WebAssembly concepts – on Mozilla MDN [lien]
●WebAssembly: An initial view – by JC Bayler, Intel [lien]
●A cartoon intro to WebAssembly – by Lin Clark, Mozilla [lien]

Code & outils :
●emscripten – convertisseur C / C++ en asm.js [lien]
●WasmFiddle – éditeur en ligne de code wasm [lien]
●MASSIVE - the web computation benchmark – benchmark [lien]
●JS vs. WASM – benchmark [lien]

Démos & vidéos :
●Tanks! Demo – démo officielle & cross-browser d’un jeu vidéo [lien]
●AngryBots – jeu 3D développé par Microsoft [lien]
●Compiling for the Web with WebAssembly – Google I/O '17 [lien]

Questions ?

Merci :-)