Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

webassembly et python

+3 votes

quelqu'un peu nous expliquer comment tuliser python et webassembly
doit on compiler python et quel impact aura webassembly sur python.

demandé 13-Mar-2017 par anonyme
edité 13-Mar-2017 par max

Ce genre de question a plus sa place ici : http://sametmax.com/subreddit-sam-et-max/

1 Réponse

+1 vote

La question est passionnante mais un peu imprécise ( et donc la réponse le sera aussi ), en effet s'agit il de compiler python ( 2 ou 3 ?) afin d'obtenir un REPL ou simplement lancer un script précis dans le browser ?

  • pour lancer un script précis il suffit* de compiler libpython.wasm grace a emscripten (emconfigure & emmake make , depuis un systeme GNU/Linux https://github.com/juj/emsdk ) toutefois quelques options vitales à ajouter sont à noter:

-s EMULATE_FUNCTION_POINTER_CASTS=1 -s USE_ZLIB=1 -s EXTRA_EXPORTED_RUNTIME_METHODS=[\"loadDynamicLibrary\",\"stringToUTF32\"]

Module._loadDynamicLibrary(blob_de_libpython.js) permettra de charger libpython en mémoire

Module._Py_InitializeEx(0) préparera un interpréteur python

apres s'être débarrassé des problems de CORS pour accéder au code source ( ceci peut se faire en javascript dans la page hôte). il suffira d'éxécuter le contenu avec les commandes reservées à l'embedding ( cf https://docs.python.org/3/c-api/veryhigh.html )

code = <débrouillez vous avec fetch ou XHR>
code = allocate(intArrayFromString(code), 'i8', ALLOC_STACK);
Module._PyRun_SimpleString(code)
Module._free(code)  

démo:
http://pmpp.pagesperso-orange.fr/python_em.html?https://wyz.fr/paste/1EQ/raw

  • pour un REPL actuellement il vaut mieux s'en tenir à ASM.js au lieu de webassembly et compter un nombre indécents de hacks sur les I/O: c'est actuellement beaucoup plus compliqué et lié au futur repl async de python3.8 ( cf https://bugs.python.org/issue34616 )

pour l'impact ce serait pure spéculation que de tenter de répondre voir la note de pied de page concernant la compilation.

*le processus de compilation est aisé mais python3.7+ nécessite toujours quelques patches "officieux" pour config.site / Setup.local et configure ( le programme de démo affichera un lien à la fin de son exécution sinon vous pouvez demander + d'info sur #python-fr, les canaux/ml officiels de cpython n'étant pas adaptés car ***wasm n'est pas une plateforme supportée officiellement *** )

répondu 1-Jan-2019 par pmp-p (130 points)
...