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
PyPy.js
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wow. Das ist echt cool
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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...
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...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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...
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...
@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.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hast recht... Aber https://github.com/replit/empythoned 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?
Letzte Änderungen sind allerdings von 2012... Also nur ein Versuch, mehr 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.
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?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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?
-> 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?
Dieses emscripten ist eines der Projekte, wo einem schnell mal die Kinnlade runterklappt
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.)jens hat geschrieben:Hat jemand sowas schon mal gemacht?
@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.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hm. Ja stimmt, das mach nicht mehr so viel aus...
Hab wärenddessen mal ein wenig an der Ausgabe geschraubt... Sieht dann so aus:
Zum selbst ausprobieren: http://jedie.github.io/pypyjs-standalone/
Hab wärenddessen mal ein wenig an der Ausgabe geschraubt... Sieht dann so aus:
-> https://github.com/jedie/pypyjs-standal ... 70b8a066e8Init 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]
>>>
Zum selbst ausprobieren: http://jedie.github.io/pypyjs-standalone/
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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...
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...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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
https://www.youtube.com/watch?v=PiBfOFqDIAI
EDIT: Hier die Pläsentation: https://speakerdeck.com/nzpug/ryan-kell ... at-how-why
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Nu hab ich auch noch eine kleine Editor Seite gemacht: https://github.com/rfk/pypyjs/pull/102
Sieht so aus:
Sieht so aus:
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
WIP: https://jedie.github.io/pypyjs-examples ... anced.html
Rendert selbst auf meinem alten S3 Handy
Rendert selbst auf meinem alten S3 Handy
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Es tut sich was...
Nun gibt es: https://github.com/pypyjs
Und mein "Editor" ist online: http://pypyjs.org/editor.html
Nun gibt es: https://github.com/pypyjs
Und mein "Editor" ist online: http://pypyjs.org/editor.html
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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
mit JIT: https://jedie.github.io/pypyjs-examples ... anced.html
ohne JIT: https://jedie.github.io/pypyjs-examples ... nojit.html
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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
EDIT: Achja, das hier:
https://github.com/pypyjs/pypyjs-examples
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
EDIT: Achja, das hier:
Ist nun auch unter https://github.com/pypyjs/ zu finden: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
https://github.com/pypyjs/pypyjs-examples