2013-06-04 3 views
3

Я читаю pypy's document, который имеет раздел Перевод переводчика PyPy Python. Но я не понимаю, что означает слово перевод. Это то же самое, что компилируется?Что означает перевод в pypy?

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

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

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

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

ответ

3

Я не понимаю, что означает слово translate mean. Это то же самое, что и компиляция?

Что означает «перевод», подробно описано в The RPython Toolchain. Также есть несколько вводных данных более высокого уровня в Coding Guide и FAQ.

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

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

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

ли PyPy-с создано в переводе то же самое, как бен/PyPy в двоичном?

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

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

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

+0

Итак, правильный способ перевести - это 'pypy ../../rpython/bin/rpython --opt = jit targetpypystandalone.py' вместо использования' python ../../rpython/bin/rpython - opt = jit targetpypystandalone.py'? – amazingjxq

+1

@amazingjxq: Ну, документы на шаге 1 говорят, что вы должны использовать предварительно построенный PyPy вместо CPython, если это вообще возможно, а затем на шаге 4 показать, используя свой Python по умолчанию (который, вероятно, CPython). Какое право? Ну, я не делал этого с 1,2 или около того, но IIRC, 'pypy' произвел точно такой же результат примерно в 25% случаев, поэтому ... Я бы сказал, если вы только собираетесь это сделать один раз, попробуйте 'pypy'; если вы собираетесь делать это неоднократно, попробуйте оба и посмотрите. – abarnert

+2

Переводчик * не * оптимизирован для работы на PyPy. Пару лет назад мы пытались использовать PyPy вместо CPython, и это было в два раза быстрее, вот и все. В противном случае вывод будет таким же. Не имеет смысла знать, точно ли это * то же самое: выполнение одной и той же вещи дважды в строке не создает идентичный вывод (есть заметные зависимости от словарного порядка, который не воспроизводится). Но это по-прежнему «одно и то же», для некоторого определения да. –

2

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

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

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

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).