Каковы возможные ловушки при портировании Psyco на 64-битный?

В документах Psyco говорится:

Просто для справки, Psyco вообще не работает на каких-либо 64-битных системах. Этот факт стоит отметить еще раз, теперь, когда последний Mac OS / X 10.6 «Snow Leopart» поставляется с Python по умолчанию, который является 64-разрядным на 64-битных машинах. Единственный способ использовать Psyco на OS / X 10.6 – это перекомпилировать пользовательский Python в 32-битном режиме.

В общем случае портирование программ с 32 до 64 бит – это действительно проблема, когда код предполагает определенный размер для типа указателя и других подобных мало (ish) проблем. Учитывая, что Psyco – это не очень много кода (~ 32K строк C + ~ 8K строк Python), насколько это сложно? Кто-нибудь пробовал это и ударил стену? У меня пока еще не было возможности хорошо взглянуть на источники Psyco, поэтому я бы очень признателен, зная, что я трачу свое время на изучение этого …

    4 Solutions collect form web for “Каковы возможные ловушки при портировании Psyco на 64-битный?”

    Поскольку psyco является компилятором, ему необходимо знать базовый язык ассемблера для генерации полезного кода. Это означало бы необходимость знать о 8 новых регистрах, новых кодах операций для 64-битного кода и т. Д.

    Кроме того, чтобы взаимодействовать с существующим кодом, ему нужно будет использовать те же соглашения о вызовах, что и 64-битный код. Соглашение о вызове AMD-64 аналогично старым соглашениям быстрого вызова в том, что некоторые параметры передаются в регистры (в 64-битном случае rcx, rdx, r8, r9 для указателей и Xmm0-Xmm3 для плавающей запятой), а остальные нажал на место разлива в стеке. В отличие от x86, это дополнительное пространство обычно выделяется один раз для всех возможных вызовов. Соглашения IA64 и язык ассемблера еще не определены.

    Короче говоря, я думаю, что это, вероятно, не так просто, как кажется.

    Кристиан Тисмер, один из разработчиков Psyco, также, по-видимому, не согласен с тем, «как сильно это может быть» – предположение (цитируется здесь ):

    Нужно прийти на x86-64? Почему так! Серьезно, я бы с удовольствием это сделал, но это было бы намного сложнее, чем можно было бы ожидать. Из-за того, как написано psyco, было бы действительно половина переписывать его от 32-го горечи. 32-битное предположение неявно происходит везде. Было бы прямо, если бы модель памяти была 64 бит. Но платформа Intel не проста. так долго, и спасибо за всех рыб – крис

    а также

    гул. Это будет стоить, по крайней мере, 3 или 4 месяца полной занятости, если это не так. Я сомневаюсь, что смогу получить спонсорство.

    Если вы хотите получить более подробную информацию (возможно, необходимо знать знание Psyco), я думаю, вы всегда можете попросить в одном из списков рассылки psyco …

    Psyco предполагает, что sizeof (int) == sizeof (void *) немного повсюду. Это намного сложнее, чем просто записать 64-битные вызовы и ассемблер. В sidenote, pypy поддерживает 64-битную поддержку в эти дни.

    Приветствия, фиджал

    +1 для «… как это сложно?».

    Взгляните сюда: http://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

    Все, что ASM нужно было бы портировать, и есть предположения повсюду о базовом процессоре.

    Я думаю, справедливо сказать, что если бы это было тривиально для порта (или не слишком сложного), это уже было бы сделано.

    Python - лучший язык программирования в мире.