Рекомендации по написанию быстрого кода для PyPy JIT

PyPy JIT может сделать код Python намного быстрее, чем CPython. Есть ли набор рекомендаций для написания кода, который может быть оптимизирован JIT-компилятором? Например, Cython может скомпилировать некоторый статический код в С++, и он имеет рекомендации для написания эффективного кода. Есть ли набор хороших методов для PyPy? Я знаю, что проект PyPy имеет рекомендации по включению подсказок при написании собственных интерпретаторов с поддержкой JIT для других динамических языков, но это не относится к большинству конечных пользователей структуры, которые просто используют интерпретатор. Вопросы, которые меня интересуют, включают:

  • Упаковка script в функции
  • Явное удаление переменных
  • Возможные способы предоставления или указания типов переменных
  • Написание петель определенным способом

Ответ 1

PyPy wiki в BitBucket содержит раздел JIT Friendliness. Некоторые сообщения в блоге предлагают дальнейшие советы о том, как быстро выполнить код в PyPy, но AFAIK предполагает, что идиоматический код, который не заставляет интерпретировать/реализовывать кадры, должен быть быстрым и ошибка, если это не так.

Я знаю, что для 3 некоторые "assert x > 0" или подобные утверждения могут быть полезны, но я не помню, где я это видел. Я также считаю, что я видел некоторое предложение о рефакторинг условных путей в циклах, связанных с 4 (редактирование: похоже, это устарел сейчас.)

Вот поток с некоторым обсуждением. Вы можете проверить, насколько хорошо JIT работает с вашим кодом с jitviewer, но он несколько продвинулся. Присоединение #pypy на Freenode поможет вам с jitviewer и вашим конкретным кодом.