PyPy

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Samstag 6. August 2005, 19:28

Kennt jemand PyPy. Hat jemand schon erfahrung gesammelt. Kann man damit schon was anfangen???

Hört sich sehr interessant an: http://www.wikiservice.at/dse/wiki.cgi?PyPy

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 6. August 2005, 20:25

jens hat geschrieben:Kennt jemand PyPy.
Sicher, seitdem sie es in der c't mal vorgestellt haben. Ich habe es noch nicht benutzt, jedoch hat es erst letztens auch noch Fördergelder bekommen (und ich glaube auch paar Google Summer of Code Tasks).

Also für richtige Arbeit ist CPython geeigneter, jedoch soll die "py"-Lib ga nicht schlecht sein.

Die Homepage ist bei codespeak und die Entwickler glaube ich von Stackless her zu kennen ;)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Sonntag 7. August 2005, 12:30

Kurze Frage zum Verständnis:
Ich hab mir das mal kurz angeguckt, also das ist ein Python-Interpreter in Python, wenn ich das richtig verstanden habe.
Also nimmt man das "normale" Python, welches dass PyPy ausführt, welches wiederum ein beliebiges Python-Programm interpretiert?!
Was genau bringt das, mal abgesehen von der 2000-fachen Ausführungsdauer?
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 7. August 2005, 12:34

Ich denke der clou dabei ist, das man Python-Programme nach LLVM "konvertieren" lassen kann... Aber das scheint noch nicht wirklich fertig zu sein.

Zu LLVM hab ich das gefunden:
http://codespeak.net/pypy/index.cgi?get ... arted#llvm
http://www.golem.de/0505/38143.html

Wie das genau funktioniert weiß ich auch nicht... Ich stell mir da so vor, das PyPy das Python-Programm nach LLVM-Sourcen konvertiert und das man dann mittels LLVM das ganze compiliert zu einem echten Programm...

Angedeutet ist das ganze Verfahren hier: http://codespeak.net/pypy/index.cgi?doc ... l#overview

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 7. August 2005, 13:25

Ich teste es gerade mal. Hab PyPy runtergeladen und entpackt. Im Hauptverzeichnis von PyPy habe ich folgendes Skript geschrieben:

Code: Alles auswählen

from pypy.translator.translator import Translator


filename = "test.c"


def test():
    print "Ein Test:"
    for i in range(10):
        print "x",i


t = Translator(test)

f = file( filename, "wb" )
f.write( t.c() ) # C translation schreiben
f.close()
Das Übersetzt die Funktion test() nach C... Nun installiere ich mal MingGW und versuche den C code zu compilieren... Bin mal gespannt...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 7. August 2005, 14:04

So, habe nun ein Versuch unternommen mit gcc den C-Code zu übersetzten... Aber es hagelt nur von "undefined reference" Fehlern:

Code: Alles auswählen

...
d:\temp/cckpbaaa.o(.text+0x209c):test.c: undefined reference to `_imp__PyObject_CallFunctionObjArgs'
d:\temp/cckpbaaa.o(.text+0x2176):test.c: undefined reference to `_imp__PyObject_GetAttr'
d:\temp/cckpbaaa.o(.text+0x219b):test.c: undefined reference to `_imp__PyErr_ExceptionMatches'
d:\temp/cckpbaaa.o(.text+0x21be):test.c: undefined reference to `_imp__PyErr_Fetch'
d:\temp/cckpbaaa.o(.text+0x21cb):test.c: undefined reference to `_imp___Py_NoneStruct'
d:\temp/cckpbaaa.o(.text+0x21d3):test.c: undefined reference to `_imp___Py_NoneStruct'
d:\temp/cckpbaaa.o(.text+0x226b):test.c: undefined reference to `_imp__PyObject_CallFunctionObjArgs'
d:\temp/cckpbaaa.o(.text+0x228d):test.c: undefined reference to `_imp__PyInstance_Type'
d:\temp/cckpbaaa.o(.text+0x22bc):test.c: undefined reference to `_imp__PyObject_IsSubclass'
d:\temp/cckpbaaa.o(.text+0x22d7):test.c: undefined reference to `_imp__PyBool_FromLong'
d:\temp/cckpbaaa.o(.text+0x22e7):test.c: undefined reference to `_imp__PyObject_IsTrue'
d:\temp/cckpbaaa.o(.text+0x2302):test.c: undefined reference to `_imp__PyBool_FromLong'
d:\temp/cckpbaaa.o(.text+0x230c):test.c: undefined reference to `_imp___Py_ZeroStruct'
...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 7. August 2005, 14:12

Hast du denn die Python.h eingebunden?

Ab der nächsten Version will sich PyPy ja selbt ausführen können, frag mich nicht wie das gehen soll, so viel Zeit hatte ich bisher nicht miralles genau anzusehen.

Aber seit dem letzten Mal als ich es mir angeschaut habe, ist die Dokumentation um einiges besser geworden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 7. August 2005, 14:21

Leonidas hat geschrieben:Hast du denn die Python.h eingebunden?
In CPATH habe ich neben PyPy v0.6.1\pypy\translator\genc auch Python's \include Verzeichnis angegeben. Darin ist die Python.h

Es kommt auch kein Fehler das irgendwelche *.h Dateien nicht gefunden werden...

Hier nochmal die Fehler mit Anfang und Ende:

Code: Alles auswählen

In file included from /Python/PyPy v0.6.1/pypy/translator/genc/g_include.h:18,
                 from test.c:1:
/Python/PyPy v0.6.1/pypy/translator/genc/int_include.h:200:2: warning: no newline at end of file
d:\temp/ccMzbaaa.o(.text+0x7):test.c: undefined reference to `_imp___Py_NoneStruct'
d:\temp/ccMzbaaa.o(.text+0x2c):test.c: undefined reference to `_imp__PyMethod_New'
d:\temp/ccMzbaaa.o(.text+0x47):test.c: undefined reference to `_imp__PyList_New'
[...]
D:/Programme/tools/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to `WinMain@16'
collect2: ld returned 1 exit status

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 7. August 2005, 14:24

Versuch mal in test.c oder g_include.h noch die Python.h einzubinden. Sowas hat mir ab und zu beim kompilieren von Windows-Binaries geholfen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 7. August 2005, 14:27

In g_include.h ist eh ein #include "Python.h" drin...
Habs auch mal in test.c reingepackt... Bringt aber keine Änderung...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 7. August 2005, 14:39

Aber eigentlich ist der Sinn von PyPy auch nicht, funktionen in C zu übersetzen sondern ein Python-Interpreter in Python zu sein.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Sonntag 7. August 2005, 15:12

Leonidas hat geschrieben:Aber eigentlich ist der Sinn von PyPy auch nicht, funktionen in C zu übersetzen sondern ein Python-Interpreter in Python zu sein.
Genau da verstehe ich den Sinn nicht. Was bringt mir denn ein Interpreter der selbst interprtiert werden muss und dann ja auch noch praktisch dasselbe macht wie der Interpreter der den Interpreter interpretiert?
(Ui, lustiger Satz)
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Sonntag 7. August 2005, 15:50

Leonidas hat geschrieben:Hast du denn die Python.h eingebunden?
Würd er wohl haben, sonst würde er keine Linker Fehlermeldungen bekommen, wenn das compilieren fehlschlagen würde. Du musst die Python libs mit einbinden... Am besten du übersetzt dein Programm mit den Python distutils...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 7. August 2005, 15:55

Anonymous hat geschrieben:Genau da verstehe ich den Sinn nicht. Was bringt mir denn ein Interpreter der selbst interprtiert werden muss und dann ja auch noch praktisch dasselbe macht wie der Interpreter der den Interpreter interpretiert?
(Ui, lustiger Satz)
Das man ihn in Python schreiben kann? Das ist eine coole Sache, so kannst du viel einfacher die Bugs deines Interpreters fixen oder Features einbauen.

Jens, vielleicht fehlt beim gcc noch das -lpython?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Sonntag 7. August 2005, 21:15

Anonymous hat geschrieben:
Leonidas hat geschrieben:Aber eigentlich ist der Sinn von PyPy auch nicht, funktionen in C zu übersetzen sondern ein Python-Interpreter in Python zu sein.
Genau da verstehe ich den Sinn nicht. Was bringt mir denn ein Interpreter der selbst interprtiert werden muss und dann ja auch noch praktisch dasselbe macht wie der Interpreter der den Interpreter interpretiert?
(Ui, lustiger Satz)
Ein Ziel ist es den C-Anteil im Interpreter auf ein Minimum zu drücken. Damit wird der Interpreter, was die Quelltexte angeht viel kleiner und damit auch besser wartbar und auch leichter zu portieren. Und dann gibt es eine Python-Untermenge, so ähnlich wie Pyrex, die vom Interpreter zur Laufzeit in Machinensprache übersetzt wird. Dieser Code wird dann deutlich schneller ausgeführt als "heutiges" Python. Armin Rigo, der den Psyco JIT-Compiler geschrieben hat, ist mit beim PyPy-Team. Man kann da also durchaus schnellere Programmausführung erwarten, wenn das Projekt weiter fortschreitet.

Momentan liegt der Fokus erstmal darauf PyPy zu Python kompatibel zu machen. Also erstmal den Code zum laufen zu bekommen und ihn dann erst schneller zu machen.
Antworten