Psyco医生说:
仅供参考,Psyco没有 完全适用于任何64位系统。 这个事实值得再次注意, 现在最新的Mac OS / X 10.6 “Snow Leopart”附带默认值 64位64位的Python 机器。使用Psyco的唯一方法 OS / X 10.6是通过重新编译自定义 Python采用32位模式。
通常,当代码假定指针类型和其他类似的小(ish)问题具有特定大小时,将程序从32位移植到64位只是一个问题。考虑到Psyco不是很多代码(大约32K行的C + ~8K系列的Python),它有多难?有没有人试过这个并撞墙?我还没有机会好好看看Psyco的来源,所以我真的很感激知道我是否在浪费时间来研究这个......
答案 0 :(得分:4)
Psyco开发商之一Christian Tismer似乎也不同意“它有多难” - 假设(引自here):
需要来x86-64?为什么! 说真的,我很乐意这样做, 但这会比这更难 任何人都会期待。由于方式 psyco写的,它会是真的 重写一半,以便从中重新分配 32苦味。 32位假设 无处不在。这将是 直截了当,如果是记忆模型 全是64位。但没有英特尔平台 就这么简单。这么久,谢谢 对于所有的鱼 - 克里斯
和
的嗡嗡声。如果不是更多的话,至少要花3到4个月的全职工作。我怀疑我可以获得赞助。
如果你想了解更多细节(可能需要Psyco的内部知识),我猜你总是可以尝试在其中一个psyco邮件列表上询问......
答案 1 :(得分:3)
由于psyco是一个编译器,因此需要了解底层汇编语言以生成有用的代码。这意味着它需要知道8个新寄存器,64位代码的新操作码等。
此外,为了与现有代码互操作,它需要使用与64位代码相同的调用约定。 AMD-64调用约定类似于旧的快速调用约定,因为一些参数在寄存器中传递(在64位情况下,rcx,rdx,r8,r9用于指针,Xmm0-Xmm3用于浮点),其余的是推到堆栈上的溢出空间。与x86不同,这个额外的空间通常为所有可能的调用分配一次。 IA64惯例和汇编语言不同。
简而言之,我认为这可能不像听起来那么简单。
答案 2 :(得分:3)
Psyco假设sizeof(int)== sizeof(void *)遍布整个地方。这比写下64位调用约定和汇编程序要困难得多。在旁注中,pypy现在有64位的jit支持。
干杯, fijal
答案 3 :(得分:1)
+1代表“......它有多难?”
看看这里:http://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c
所有ASM都必须被移植,并且关于底层处理器的所有地方都存在假设。
我认为可以公平地说,如果港口(或不太困难)是微不足道的,那就已经完成了。