2010-03-03 8 views
10

Los documentos Psyco dicen:¿Cuáles son los posibles escollos en la migración de Psyco a 64 bits?

Sólo como referencia, Psyco no trabajar en cualquiera de los sistemas de 64 bits en absoluto. Este hecho vale la pena señalar de nuevo, ahora que el último Mac OS/X 10.6 "Snow Leopart" viene con un predeterminado Python que es de 64 bits en 64-bit máquinas. La única forma de usar Psyco en OS/X 10.6 es mediante la recompilación de un Python personalizado en modo de 32 bits.

En general, portar programas de 32 a 64 bits solo es realmente un problema cuando el código asume un cierto tamaño para un tipo de puntero y otros problemas similares (ish). Teniendo en cuenta que Psyco no es una gran cantidad de código (~ 32K líneas de C + ~ 8K líneas de Python), ¿qué tan difícil podría ser? ¿Alguien ha intentado esto y golpeó una pared? Realmente no he tenido la oportunidad de echarle un vistazo a las fuentes de Psyco, así que realmente apreciaría saber si estoy perdiendo el tiempo investigando esto ...

Respuesta

3

Dado que psyco es un compilador, Tendría que ser consciente del lenguaje ensamblador subyacente para generar código útil. Eso significa que necesitaría saber sobre los 8 nuevos registros, nuevos códigos de operación para código de 64 bits, etc.

Además, para interoperar con el código existente, necesitaría usar las mismas convenciones de llamadas que el código de 64 bits. La convención de llamadas AMD-64 es similar a las antiguas convenciones de llamadas rápidas en que algunos parámetros se pasan en registros (en el caso de 64 bits rcx, rdx, r8, r9 para punteros y Xmm0-Xmm3 para coma flotante) y el resto empujado al espacio del derrame en la pila. A diferencia de x86, este espacio adicional generalmente se asigna una vez para todas las llamadas posibles. Las convenciones IA64 y el lenguaje ensamblador son diferentes aún.

En resumen, creo que esto probablemente no sea tan simple como parece.

+0

¿No debería el compilador de C para la plataforma de 64 bits atender la mayoría de esta? Parece que hay muy poco ensamblaje en línea en psyco (<5 líneas). –

+0

Bah. Ignora eso. Mis habilidades de guardado podrían usar un poco de pulido, obviamente ... –

1

+1 para "... ¿qué tan difícil podría ser?".

Echa un vistazo aquí: http://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

Todo lo que ASM tendría que ser portado, y hay supuestos por todo el lugar sobre el procesador subyacente.

Creo que es justo decir que si fuera trivial de puerto (o no demasiado difícil), ya estaría hecho.

+0

Lo suficiente. Sin embargo, me gustaría saber por qué esta es una tarea tan monumental. La búsqueda posterior me ha llevado a las publicaciones de la lista de correo donde incluso los ingenieros de Google parecen haber abandonado la portabilidad de Psyco para el proyecto Unladen Swallow. –

+0

PD: El comentario "¿qué tan difícil podría ser?" Fue firmemente irónico. Esperaba por completo que hubiera problemas que no había comprendido (lo cual fue un punto importante al publicar esto en primer lugar). De lo contrario, lo habría intentado. –

+0

Me encuentro diciendo "¿Qué tan difícil podría ser?" de la misma manera casi cada vez que hablo con marketing: P – Seth

4

Cristiano Tismer, uno de los desarrolladores Psyco también parece estar en desacuerdo con el "cómo difícil puede ser" - supuesto (citado de here):

tiene que venir a x86-64? ¡Por qué eso! En serio, me encantaría hacer eso, pero esto sería mucho más difícil que cualquiera podría esperar. Debido a la manera en que se escribe psyco, sería realmente medio reescribir para relegarlo de su 32-bitterness. La suposición de 32 bits está implícitamente en todas partes. Sería directo, si el modelo de memoria fuera todo de 64 bits. Pero ninguna plataforma intel es así de simple.tanto tiempo, y gracias para todos los peces - Chris

y

Hum. Costaría al menos 3 o 4 meses de trabajo a tiempo completo hacer eso, si no más. Dudo que pueda obtener patrocinio para eso.

Si quieres más detalles (conocimientos dentro de la empresa de Psyco probablemente necesitaba) Creo que siempre se puede tratar de preguntar en una de las listas de correo psyco ...

3

Psyco asume que sizeof (int) = = sizeof (void *) un poco por todos lados. Eso es mucho más difícil que simplemente escribir convenciones de llamadas de 64 bits y ensamblador. En la nota al margen, pypy tiene soporte de jit de 64 bits en estos días.

Saludos, Fijal

Cuestiones relacionadas