- Un compilateur qui transforme des programmes Python en WebAssembly
- Fonctionne 3 fois plus vite que CPython (WASM) en supprimant la surcharge de l’interpréteur
- La vitesse atteint environ 60 % de celle de CPython (natif)
- Il existe plusieurs façons d’exécuter rapidement Python sur WebAssembly
- Utiliser un sous-ensemble de Python pouvant être compilé en code performant : CPython, RPython (PyPy) et Codon
- Utiliser un JIT à l’intérieur de Python : PyPy
- Optimiser le code généré à l’aide d’analyses statiques : mypy & mypy-c, Nuitka
- Ici, le choix final s’est porté sur Nuitka, un compilateur Python optimisant
Nuitka
- Nuitka fonctionne en convertissant en C les appels Python effectués par le programme, en utilisant les appels internes de l’API CPython
- Il prend en charge la plupart des programmes Python et convertit le code Python en ces appels CPython correspondants
- Il peut aussi servir d’outil d’obfuscation de code (personne ne peut décompiler le programme !)
- Après une analyse approfondie de toutes les options, ils ont conclu que la méthode probablement la plus rapide pour exécuter Python sur WebAssembly était d’utiliser Nuitka
Compiler Python en WebAssembly avec Nuitka
- Comme l’essentiel du travail de conversion du code Python en appels à l’interpréteur CPython sous-jacent est déjà fait, Nuitka semble être l’option la plus simple pour accélérer Python dans un contexte WebAssembly
- Comme Nuitka ne fonctionne pas encore avec Python 3.12, il a fallu recompiler Python 3.11 pour WASI et utiliser l’archive
libpython.a générée
- En essayant d’exécuter le fichier Wasm généré, un autre problème est apparu, ce qui a conduit à la soumission d’une PR pour faire remonter les modifications dans l’amont de Nuitka
- Pour l’instant, py2wasm utilise un fork de Nuitka, mais le projet prévoit d’en faire une fine couche au-dessus de Nuitka une fois les modifications intégrées en amont
- Le besoin initial était d’accélérer au maximum l’exécution de Python afin de déplacer un backend Python Django de Google Cloud vers Wasmer Edge
- py2wasm rapproche d’un fonctionnement des applications backend Python sur l’Edge avec des performances remarquables, ce qui pourrait offrir une alternative bien moins coûteuse aux fournisseurs cloud actuels pour héberger ce type d’applications
Feuille de route
Aucun commentaire pour le moment.