Was sind die möglichen Fallstricke bei der Portierung von Psyco auf 64-Bit?

Die Psyco-Dokumente sagen:

Nur als Referenz, Psyco arbeitet überhaupt nicht an 64-Bit-Systemen. Diese Tatsache lohnt sich wieder zu bemerken, jetzt, dass die neueste Mac OS / X 10.6 "Snow Leopart" kommt mit einem Standard-Python, die 64-Bit auf 64-Bit-Maschinen ist. Die einzige Möglichkeit, Psyco auf OS / X 10.6 zu verwenden, besteht darin, eine benutzerdefinierte Python im 32-Bit-Modus neu zu kompilieren.

Im Allgemeinen ist das Portieren von Programmen von 32 bis 64 Bits nur ein Problem, wenn der Code eine bestimmte Größe für einen Zeigertyp und andere ähnlich kleine (ish) Probleme annimmt. Wenn man bedenkt, dass Psyco nicht viel Code ist (~ 32K Zeilen C + ~ 8K Zeilen von Python), wie schwer könnte es sein? Hat jemand das versucht und eine Mauer geschlagen? Ich habe nicht wirklich eine Chance gehabt, einen guten Blick auf die Psyco-Quellen zu werfen, also würde ich wirklich schätzen zu wissen, ob ich meine Zeit verschwinde, um diese …

4 Solutions collect form web for “Was sind die möglichen Fallstricke bei der Portierung von Psyco auf 64-Bit?”

Da psyco ein Compiler ist, müsste man sich der zugrunde liegenden Assembler-Sprache bewusst sein, um nützlichen Code zu generieren. Das würde bedeuten, dass es über die 8 neuen Register wissen muss, neue Opcodes für 64-Bit-Code usw.

Darüber hinaus, um mit dem vorhandenen Code zu interopieren, müsste es die gleichen Aufrufkonventionen wie 64-Bit-Code verwenden. Die AMD-64-Aufrufkonvention ähnelt den alten Fast-Call-Konventionen, dass einige Parameter in Registern übergeben werden (im 64-Bit-Fall rcx, rdx, r8, r9 für Zeiger und Xmm0-Xmm3 für Gleitkomma) und der Rest sind Auf den Stapel gedrückt. Im Gegensatz zu x86 wird dieser zusätzliche Platz in der Regel einmal für alle möglichen Anrufe zugeteilt. Die IA64-Konventionen und die Assembler-Sprache sind noch unterschiedlich.

Also kurz, ich denke, das ist wohl nicht so einfach wie es klingt.

Christian Tismer, einer der Psyco-Entwickler scheint auch nicht mit dem "Wie schwer es sein" – Annahme (von hier zitiert)

Muss zu x86-64 kommen? Warum das! Im Ernst, ich würde es gerne tun, aber das wäre viel härter als jeder es erwarten würde. Wegen der Art, wie psyco geschrieben ist, wäre es wirklich ein halbes Umschreiben, um es von seiner 32-Bitterkeit zu lösen. Die 32-Bit-Annahme ist implizit überall. Es wäre einfach, wenn das Speichermodell alle 64 Bit war. Aber keine Intelplattform ist so einfach. So lange und danke für all die Fische – chris

und

summen. Es würde mindestens 3 oder 4 Monate Vollzeitarbeit tun, wenn nicht mehr. Ich bezweifle, dass ich dafür Sponsoring bekommen kann.

Wenn du mehr Details wünschst (feste Insider-Kenntnisse von Psyco vermutlich benötigt), schätze ich, dass du immer versuchen kannst, auf einer der Psyco-Mailinglisten zu fragen …

Psyco geht davon aus, dass sizeof (int) == sizeof (void *) ein bisschen über dem Platz ist. Das ist viel härter als nur schreiben 64bit rufen Kongresse und Assembler. Auf der sidenote hat pypy 64bit jit support in diesen Tagen.

Cheers, fijal

+1 für "… wie schwer könnte es sein?".

Schauen Sie hier: http://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

All das ASM müsste portiert werden, und es gibt Annahmen über den Platz über den zugrunde liegenden Prozessor.

Ich denke, es ist fair zu sagen, dass, wenn es trivial zum Hafen (oder nicht zu schwierig) wäre, wäre es schon getan worden.

Python ist die beste Programmiersprache der Welt.