Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

PyPy

Глава 19 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: PyPy
Автор: Benjamin Peterson
Перевод: А.Панин

19.8. Резюме

Интерпретатор языка Python рассматривает объекты как черные ящики и позволяет полностью описывать их поведение в рамках пространства объектов. Отдельные пространства объектов могут позволять объектам языка Python расширять свои возможности. Подход, заключающийся в использовании пространства объектов, позволяет использовать технику абстрактной интерпретации в процессе преобразования кода.

Система преобразования кода RPython позволяет реализовывать такие возможности, как сборка мусора и обработка исключений, абстрагированные от интерпретатора языка программирования. Она также делает возможным использование фреймворка PyPy на множестве различных платформ при использовании различных систем генерации кода.

Одним из наиболее важных методов применения архитектуры преобразования кода является возможность использования JIT-генератора. Обобщенная архитектура JIT-генератора позволяет использовать возможности JIT-компиляции для новых языков программирования и таких подвидов языков, как регулярные выражения. PyPy является быстрейшей реализацией языка программирования Python благодаря использованию встроенного JIT-генератора.

Хотя большая часть усилий в ходе разработки фреймворка PyPy направлена на развитие интерпретатора языка Python, фреймворк PyPy может использоваться для реализации интерпретатора любого динамического языка программирования. В течение многих лет на основе фреймворка PyPy создавались незаконченные интерпретаторы для языков JavaScript, Prolog, Scheme и IO.

19.9. Выученные уроки

Наконец, перечислим несколько уроков, извлеченных из процесса разработки проекта PyPy:

Повторяемый рефакторинг кода является обычно необходимым процессом. Например, изначально было выдвинуто предложение обработки высокоуровневых потоковых графов с помощью системы генерации кода на языке C! Прошло несколько рефакторингов кода до того момента, как был реализован текущий многофазный процесс преобразования кода.

Наиболее важным уроком, извлеченным из процесса разработки PyPy, является понимание мощности абстракции. В PyPy абстракции служат для разделения областей реализаций. Например, возможность автоматической сборки мусора языка RPython позволяет разработчику, работающему с интерпретатором, не беспокоиться об управлении памятью. В то же время, абстракции имеют подсознательную значимость. Работа с цепочкой преобразования кода подразумевает жонглирование различными фазами преобразования на уровне воображения. Поиск уровня абстракции, на котором допущена ошибка может быть также затруднен из-за применения абстракций; нарушение абстракций, когда происходит подмена низкоуровневых компонентов, которые должны быть взаимозаменяемыми приводит к нарушению работы высокоуровневого кода, что является извечной проблемой. Важно использовать тесты для проверки того, что все части системы работоспособны, поэтому изменение в одной системе не приведет к неработоспособности другой. Говоря более конкретно, абстракции могут замедлить программу, создавая большое количество косвенных преобразований.

Гибкость языка (R)Python, используемого в качестве языка реализации, позволяет проводить эксперименты с новыми возможностями языка Python (или даже с новыми языками) достаточно просто. Из-за своей уникальной архитектуры проект PyPy будет играть важную роль в будущей реализации языка Python и других динамических языков программирования.


Вернуться к началу статьи.