C++ prend désormais officiellement en charge WASI : une nouvelle étape dans le développement multiplateforme
Le comité de normalisation du langage C++ (ISO/IEC JTC1/SC22/WG21), en collaboration avec le groupe de développeurs LLVM et le projet WebAssembly, a annoncé un événement très attendu : le langage C++ a obtenu un support officiel et documenté de la plateforme WebAssembly System Interface (WASI). Cela signifie que les développeurs peuvent désormais écrire du code système en C++ qui fonctionnera non seulement sur les systèmes d'exploitation traditionnels (Windows, Linux, macOS), mais aussi dans l'environnement WebAssembly en dehors du navigateur — sur les serveurs, les appareils IoT et les systèmes edge cloud.
Qu'est-ce que WASI et pourquoi est-ce important pour C++ ?
WASI (WebAssembly System Interface) est une interface système standardisée qui permet aux modules WebAssembly d'accéder au système de fichiers, aux sockets réseau, à l'heure et à d'autres ressources du système d'exploitation. Auparavant, C++ pouvait être compilé en WebAssembly, mais l'interaction avec le monde extérieur était limitée à l'environnement du navigateur. Désormais, avec le support officiel de WASI, C++ bénéficie d'un environnement isolé complet pour une exécution sécurisée du code en dehors du navigateur.
- Sécurité : Les modules C++ s'exécutent dans un bac à sable avec contrôle d'accès aux ressources — idéal pour les services multi-utilisateurs.
- Portabilité : Un seul fichier binaire .wasm fonctionne sur n'importe quel système d'exploitation disposant d'un environnement d'exécution WASI (Wasmer, Wasmtime, WAMR).
- Performance : La compilation de C++ directement en code WebAssembly natif (via Clang/LLVM) offre une vitesse d'exécution quasi native, sans les frais généraux d'une machine virtuelle.
Qu'est-ce qui a changé dans l'écosystème C++ ?
La principale nouveauté est l'apparition d'un guide officiel pour le portage du code C++ vers WASI et l'inclusion du support WASI dans le dépôt principal de LLVM. Désormais, tout projet en C++ peut être compilé pour WASI à l'aide d'un simple indicateur de compilateur :
clang++ --target=wasm32-wasi -O3 my_program.cpp -o my_program.wasm
De plus, les bibliothèques standard C++ (libc++, libc++abi) ont été mises à jour pour fonctionner correctement avec les appels système WASI. Les développeurs n'ont plus besoin de configurer manuellement la liaison avec des bibliothèques externes — tout fonctionne « prêt à l'emploi ».
Où cela est-il déjà appliqué ?
- Calcul cloud : Exécution de microservices C++ dans des conteneurs WASI isolés (par exemple, dans Fastly Compute@Edge ou Cloudflare Workers avec support WASI).
- Systèmes embarqués : Utilisation de WASI pour la mise à jour sécurisée des micrologiciels d'appareils IoT écrits en C++.
- Calculs scientifiques : Transfert de modules C++ à forte intensité de calcul (bibliothèques d'algèbre linéaire, simulations) vers WASI pour une exécution multiplateforme sans recompilation.
Quelle est la prochaine étape ?
Les plans immédiats incluent le support complet du multithreading C++ dans WASI (actuellement seul le modèle monothread est disponible) et l'intégration avec les coroutines C++20/23. La communauté travaille déjà à l'adaptation des bibliothèques populaires (Boost, Qt, OpenCV) pour la compilation sous WASI. Suivez les mises à jour sur le site officiel wasi.dev et dans le dépôt LLVM.
Si vous programmez en C++ et souhaitez