Что означает перевести в pypy?

Я читаю документ pypy, в котором есть раздел под названием < em>Перевод интерпретатора PyPy Python. Но я не понимаю, что означает слово перевести. Это то же самое, что и компилировать?

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

Сначала загрузите готовый PyPy для вашей архитектуры, который вы будете использовать для перевода интерпретатора Python.

Относится ли здесь готовый PyPy к исходному коду? Потому что в скачанном мной двоичном файле нет каталога pypy/goal. Если да, то с документом что-то не так. Это заблуждение.

Является ли pypy-c созданным в переводе тем же, что и bin/pypy в двоичном файле?


person amazingjxq    schedule 04.06.2013    source источник


Ответы (2)


Я не понимаю, что означает слово перевод. Это то же самое, что компилировать?

Что означает «перевод», подробно описано в цепочке инструментов RPython. В Руководстве по кодированию и Часто задаваемые вопросы.

Резюмируя их резюме:

  1. Скомпилируйте и импортируйте полную программу RPython.
  2. Динамически анализируйте программу и добавляйте к ней блок-схемы.
  3. Скомпилируйте графы потоков в графы потоков более низкого уровня.
  4. Оптимизируйте скомпилированные потоковые графы.
  5. Проанализируйте скомпилированные и оптимизированные графы потоков.
  6. Создайте исходный код C из блок-схем и анализа.
  7. Скомпилируйте и свяжите исходный код C с собственным исполняемым файлом.

Итак, на шаге 1 используется обычный компилятор Python, на шаге 7 используется обычный компилятор C (и компоновщик), а шаги 3 и 4 аналогичны тому, что обычно делает оптимизирующий компилятор. Но называть весь процесс «компиляцией» было бы неправильно. (Кроме того, люди, вероятно, интерпретируют это как что-то похожее на то, что делает Шедскин, что определенно неверно.)

Является ли pypy-c созданным в переводе тем же, что и bin/pypy в двоичном файле?

То, что заканчивается в двоичном дистрибутиве, в основном такое же, как если бы вы запускали процесс установки на цели перевода. Итак, да, goal/pypy-c и bin/pypy фактически одно и то же.

Является ли предварительно созданный PyPy ссылкой на исходный код?

Нет. Это относится к bin/pypy из бинарного дистрибутива. Как говорится в документации, на самом деле вы можете использовать любой Python 2.6+, включая CPython, или goal/pypy-c, оставшийся от предыдущей сборки, и т. д. Однако транслятор, вероятно, будет работать быстрее всего на стандартном бинарном дистрибутиве PyPy. , так что это то, что вы должны использовать, если у вас нет веской причины поступить иначе.

person abarnert    schedule 04.06.2013
comment
Значит, правильный способ перевода — pypy ../../rpython/bin/rpython --opt=jit targetpypystandalone.py вместо python ../../rpython/bin/rpython --opt=jit targetpypystandalone.py? - person amazingjxq; 04.06.2013
comment
@amazingjxq: Что ж, в документации на шаге 1 говорится, что вы должны использовать предварительно созданный PyPy вместо CPython, если это вообще возможно, а затем на шаге 4 показано использование вашего Python по умолчанию (вероятно, CPython). Какой из них прав? Что ж, я не делал этого с версии 1.2 или около того, но IIRC, pypy, выдавал точно такой же результат примерно в 25% случаев, так что… я бы сказал, если вы собираетесь сделать это один раз, попробуйте pypy ; если вы собираетесь делать это неоднократно, попробуйте оба и посмотрите. - person abarnert; 04.06.2013
comment
Переводчик не оптимизирован для работы на PyPy. Пару лет назад мы попробовали использовать PyPy вместо CPython, и это было в два раза быстрее, вот и все. Выход в остальном такой же. Нет смысла знать, что это точно одно и то же: выполнение одной и той же операции два раза подряд не приводит к идентичному результату (существуют, в частности, зависимости от порядка словаря, который не воспроизводимый). Но это все равно то же самое, для некоторых определений, да. - person Armin Rigo; 04.06.2013
comment
Хорошо, я думаю, дело не в том, что переводчик оптимизирован для PyPy, а в том, что PyPy быстрее для перевода только потому, что PyPy обычно быстрее для многих вещей в CPython? Спасибо за исправление. - person abarnert; 04.06.2013

Позвольте мне дать вам то, что я могу - PyPy состоит из нескольких вещей:

  1. Быстрая реализация Python с использованием компилятора Just-In-Time (написана на RPython).
  2. Компилятор JIT-компилятора RPython

Когда в документации говорится о переводе интерпретатора, они говорят о создании JIT-компилятора для Python из RPython-реализации компилятора Python.

Python Compiler (Written in RPython)
    |--[RPython to JIT compiler compiler]--> 
        PyPy (JIT'ed Python Interpreter)

Важно отметить, что "компилятор компилятора" не опечатка. RPython является частью цепочки инструментов, используемой для создания JIT-компиляторов. Вместо того, чтобы писать компилятор для вашего языка, а затем писать слой JIT для вашего компилятора (что может быть сложным и занимать много времени), вместо этого вы реализуете свой язык в RPython, а цепочка инструментов перевода RPython пишет вам JIT-компилятор для ваш язык.

Самый простой способ подумать об этом — представить, что команда PyPy не написала свой собственный компилятор JIT-компилятора. Вместо этого представьте, что Topaz (JIT Ruby) появился первым, и эта команда написала компилятор JIT-компилятора на Ruby (мы назову его RRuby). Затем команда PyPy должна была написать компилятор PyPy на RRuby (вместо этого, поскольку PyPy появился первым, команда Topaz реализует свой компилятор JIT Ruby в RPython).

person Sean Vieira    schedule 04.06.2013