Bienvenue sur IndexError.

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

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

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

webassembly et python

+1 vote

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 par pmp-p (112 points)
...