Fondamentaux
1.
Contexte
1.1.
Pourquoi Wasm ?
1.2.
Domaines d'application aujourd'hui
1.3.
Présentation de l'écosystème
2.
Wasm 101
2.1.
Modules, pile, types simples
2.2.
Variables globales, mémoire linéaire
2.3.
Flot de contrôle
2.4.
Différence entre le format binaire et textuel
2.5.
Écriture d'un module Wasm simple
3.
Premiers pas dans le navigateur ou l'hôte
3.1.
Compilation d'un programme C ou Rust simple vers Wasm
3.2.
Visualisation de modules binaires (wabt, wasm-tools)
3.3.
Wasmtime comme hôte
3.4.
Node comme hôte
3.5.
JavaScript comme ĥôte
4.
TP: jeu de la vie, calculatrice
4.1.
écriture d'un module qui effectue la majeure partie des calculs
4.2.
compilation, appel depuis JS ou WasmTime
Wasm aujourd'hui
5.
Évolution du langage
5.1.
Le comité de standardisation
5.2.
Interprète de référence, spécification, sémantique
5.3.
La vie d'un proposal
6.
Wasm 102
6.1.
Data
6.2.
Bulk memory operations, Fixed-width SIMD, multiple memories
6.3.
Reference, Table, Element
6.4.
Tail call, exception, GC, threads, memory64, JSPI, JS String builtins
7.
Interopérabilité
7.1.
WASI
7.2.
Compilation d'un script avec I/O
7.3.
Component Model
8.
TP: TBA
8.1.
qqchose d'avancé avec des appels dans les deux sens, voire entre plusieurs modules Wasm
Wasm avancé
9.
Écosystème avancé
9.1.
État de Wasm pour différents langages: C, C++, Rust, Zig, Go, Haskell, Java, Kotlin, Dart, OCaml, Guile
9.2.
Comparaison des toolchains (wasm-bindgen, wasm-pack, emscripten)
9.3.
no_std pour l'embarqué (C, Rust et Go)
9.4.
Déploiement dans le cloud (cloudflare, fastly)
10.
Optimisation de Wasm avec Binaryen et wasm-opt
10.1.
Utilisation simple
10.2.
wasm-merge
10.3.
Différentes passes, closed-world mode
10.4.
wasm-metadce
11.
Sécurité
11.1.
Garanties du langage
11.2.
Test de programmes Wasm
11.3.
Unikernels
TODO
12.
compilation vers Wasm (shadow stack? exceptions lentes?)
13.
extism