Seite 1 von 2

PyPy.js

Verfasst: Donnerstag 18. September 2014, 11:01
von jens
Also wenn das nicht mal abgefahren ist: Man nehme PyPy und LLVM und generiere eine PyPy.js Datei... Die ist dann zwar ~140MB groß (die komprimierte Version schrumpft allerdings auf ~14MB), aber es funktioniert, siehe die DEMO: http://pypyjs.org/demo/

Details: https://www.rfk.id.au/blog/entry/pypy-js-first-steps/

Projekt Webseite: https://github.com/rfk/pypyjs

Re: PyPy.js

Verfasst: Donnerstag 18. September 2014, 11:03
von Hyperion
Wow. Das ist echt cool 8)

Re: PyPy.js

Verfasst: Donnerstag 18. September 2014, 11:21
von jens
Schade ist, das die DEMO Seite die kleinere/komprimierte "pypy.vm.js" Datei, per XMLHttpRequest() zieht. Keine Ahnung warum...

So kann man nicht einfach hingehen und die HTML Demo Seite "komplett" speichern, um damit Lokal ein wenig zu spielen :(

Hab dafür mal ein Ticket gemacht: https://github.com/rfk/pypyjs/issues/25

Würde mich ja reizten, darin dann mein DragonPy Emulator laufen zu lassen. Nicht mit TkInter GUI, sondern eine Konsolen-Version...

Re: PyPy.js

Verfasst: Donnerstag 18. September 2014, 12:44
von jens
Es gibt da noch so einige andere Versuche:

In-Browser Implementationen:

http://www.brython.info/ bzw. https://github.com/brython-dev/brython
http://www.skulpt.org/ bzw. https://github.com/skulpt/skulpt

JS compiler:
https://github.com/PythonJS/PythonJS
https://github.com/chrivers/pyjaco
Pyjamas bzw. Pyjs: http://pyjs.org/

Wahrscheinlich gibt es noch ein paar mehr...

Re: PyPy.js

Verfasst: Donnerstag 18. September 2014, 13:09
von BlackJack
@jens: Wobei zumindest Brython und Skulpt nicht so wirklich kompatibel sind, und bei Brython das auch nicht angestrebt wird. PyPy ist halt ”echtes” Python. Und nicht nur etwas sehr ähnliches.

Re: PyPy.js

Verfasst: Donnerstag 18. September 2014, 15:55
von jens
Hast recht... Aber https://github.com/replit/empythoned nicht:
Empythoned

Empythoned is a build script that uses Emscripten to compile CPython for use in a browser. It attempts to compile the main interpreter as a single small executable and the whole standard library as dynamically loaded libraries.

The project is in its infancy. Right now the core interpreter works very well, but many of the libraries either don't work at all or contain various bugs.
Letzte Änderungen sind allerdings von 2012... Also nur ein Versuch, mehr nicht?

DEMO hier: http://repl.it/languages/Python



Nun kommt mir spontan eine andere Idee: Kann man Cython nehmen, C generieren und dann über Emscripten JS generieren?

Re: PyPy.js

Verfasst: Dienstag 23. September 2014, 12:06
von jens
Habe mal https://github.com/rfk/pypyjs genommen und nur den DEMO Teil extrahiert... Denn das original Repro ist echt sehr groß...

-> https://github.com/jedie/pypyjs-standalone

Darin ist auch der Bugfix, das es lokal läuft, siehe: https://github.com/jedie/pypyjs-standal ... 484b75bc74

Und hier findet sich auch mein "throttled_html_server.py" wieder (noch nicht verbessert), damit man die Ladezeit einschätzten kann: https://github.com/jedie/pypyjs-standal ... _server.py Siehe auch: http://www.python-forum.de/viewtopic.php?f=11&t=34726



Nun Frage ich mich, wie man die Ladezeit noch optimieren kann... Dazu ist mir eingefallen, das es LZMA implementierungen in JavaScript gibt, wie z.B.: https://github.com/nmrugg/LZMA-JS/

Darauf hin hab ich mal eben die 13,7MB große "pypy.vm.js" mit 7-Zip komprimiert. Die schrumpft auf 1MB... Das wäre doch eine Idee, oder?
Dazu kommt, das man nicht nur diese, sondern auch eine reihe anderer, nötige Dateien einpacken könnte...
Die gepackte LZMA Datei müßte man auch per JavaScript als Binäredaten vom Server abrufen können, siehe https://github.com/jDataView/jDataView bzw. https://developer.mozilla.org/en-US/doc ... inary_data

Hat jemand sowas schon mal gemacht?

Re: PyPy.js

Verfasst: Dienstag 23. September 2014, 12:35
von jerch
Dieses emscripten ist eines der Projekte, wo einem schnell mal die Kinnlade runterklappt ;)
jens hat geschrieben:Hat jemand sowas schon mal gemacht?
Was erreichst Du denn mit "normaler" gzip-Auslieferung? Dann könnten Server und Browser das transparent vornehmen. Die Binärsache ist ansonsten kein Hexenwerk, Du nimmst einfach den Binärstring aus dem Response und arbeitest damit weiter (in Deinem Fall halt entpacken usw.)

Re: PyPy.js

Verfasst: Dienstag 23. September 2014, 13:05
von Sirius3
@jens: Du solltest nicht die ungepackte Variante mit der LZMA-gepackten vergleichen, sondern die gzippte Version, und dann ist der Unterschied nur noch 1.85 zu 1.14 Megabytes. Da bringt es wirklich nicht mehr viel, dem Browser ein neues Packverfahren beizubringen.

Re: PyPy.js

Verfasst: Dienstag 23. September 2014, 14:31
von jens
Hm. Ja stimmt, das mach nicht mehr so viel aus...

Hab wärenddessen mal ein wenig an der Ausgabe geschraubt... Sieht dann so aus:
Init PyPy.js, it's big, so this might take a while...

Request: 'pypy.vm.js' ...
2.0 MBytes loaded
3.9 MBytes loaded
5.9 MBytes loaded
8.2 MBytes loaded
10.2 MBytes loaded
12.5 MBytes loaded
100% loaded (13.7 MBytes)
Request: 'pypy.vm.js', done (status:200)
Request: 'modules/index.json' ...
evaluating asmjs code...
run() called, but dependencies remain, so not running
evaluating asmjs, done.
488.5 kBytes loaded
100% loaded (488.5 kBytes)
Request: 'modules/index.json', done (status:200)
initialising the vm...
loading module index...
pypy.js is ready.

Python v2.7.6 (?, Sep 18 2014, 09:21:40)
[PyPy 2.3.1]
>>>
-> https://github.com/jedie/pypyjs-standal ... 70b8a066e8


Zum selbst ausprobieren: http://jedie.github.io/pypyjs-standalone/

Re: PyPy.js

Verfasst: Samstag 16. Mai 2015, 19:42
von jens
Hab das Projekt wieder entdeckt und gesehen, das es noch aktiv ist.

Gibt eine neue Webseite zum probieren: http://pypyjs.org/
Startet direkt den Python Interpreter ;)

Ich arbeite gerade an Selenium tests: https://github.com/rfk/pypyjs/pull/96
Stoße aber noch auf einige Probleme...

Re: PyPy.js

Verfasst: Samstag 16. Mai 2015, 21:35
von jens
Gerade gesehen, gibt einen recht Aktuellen Vortrag vom Autor "Ryan Kelly" auf der PyCon 2015:

https://www.youtube.com/watch?v=PiBfOFqDIAI

EDIT: Hier die Pläsentation: https://speakerdeck.com/nzpug/ryan-kell ... at-how-why

Re: PyPy.js

Verfasst: Samstag 16. Mai 2015, 23:18
von jens
Nu hab ich auch noch eine kleine Editor Seite gemacht: https://github.com/rfk/pypyjs/pull/102

Sieht so aus:
Bild

Re: PyPy.js

Verfasst: Dienstag 19. Mai 2015, 16:12
von jens

Re: PyPy.js

Verfasst: Dienstag 26. Mai 2015, 08:54
von jens

Re: PyPy.js

Verfasst: Mittwoch 27. Mai 2015, 17:54
von jens
WIP: https://jedie.github.io/pypyjs-examples ... anced.html :lol:

Rendert selbst auf meinem alten S3 Handy :wink:

Re: PyPy.js

Verfasst: Mittwoch 27. Mai 2015, 18:50
von jens
Bild

Re: PyPy.js

Verfasst: Montag 1. Juni 2015, 11:34
von jens
Es tut sich was...

Nun gibt es: https://github.com/pypyjs

Und mein "Editor" ist online: http://pypyjs.org/editor.html

Re: PyPy.js

Verfasst: Montag 1. Juni 2015, 15:12
von jens
Mein "mandelbrot" mit PyPyJS ist auch aktualisiert:

mit JIT: https://jedie.github.io/pypyjs-examples ... anced.html
ohne JIT: https://jedie.github.io/pypyjs-examples ... nojit.html

Re: PyPy.js

Verfasst: Freitag 12. Juni 2015, 17:40
von jens
Ein großes Problem sind die Ladezeiten... Alleine zum "init" sind zwei Dateien zu ziehen, die zusammen 19,2MB groß sind.

Nun hatte ich die Idee LZMA zu verwenden. Denn damit bleiben von den 19,2MB nur noch 2,88MB über!

Details dazu hier: https://github.com/pypyjs/pypyjs.github.io/issues/4 :D


EDIT: Achja, das hier:
jens hat geschrieben:Mein "mandelbrot" mit PyPyJS ist auch aktualisiert:

mit JIT: https://jedie.github.io/pypyjs-examples ... anced.html
ohne JIT: https://jedie.github.io/pypyjs-examples ... nojit.html
Ist nun auch unter https://github.com/pypyjs/ zu finden:

https://github.com/pypyjs/pypyjs-examples