Google представил Grumpy, транслятор кода Python на язык Go
4 января 2017 года
Компания Google открыла исходные тексты проекта Grumpy, в рамках которого развивается экспериментальный Python runtime для языка Go. Grumpy обеспечивает трансляцию кода на языке Python в представление на языке Go и позволяет бесшовно запускать оттранслированные Python-программы в runtime-окружении языка Go. Отмечается, что одной из основных целей проекта является обеспечение высокого уровня совместимости с CPython и достижение возможности применения Grumpy в качестве полноценной замены Python runtime для проектов на языке Python. Код транслятора написан на языке Python и поставляется под лицензией Apache 2.0.
Grumpy нацелен на использование в качестве прозрачной замены CPython 2.7 и позволяет решить проблемы с плохой работой CPython в условиях обработки массовых параллельных запросов. В частности, одной из поставленных перед Grumpy задач была оптимизация работы API YouTube, написанного на Python и обрабатывающего миллионы запросов в секунду. Grumpy не формирует байткод и не использует виртуальную машину. На выходе генерируется набор обычных исходных текстов на языке Go, которые затем могут быть преобразованы в машинный код при помощи штатного компилятора Go. В полученных после компиляции исходных текстах продолжают использоваться специфичные для Python структуры данных, но реализация структур оптимизирована для хорошей масштабируемости в условиях массовой параллельной обработки данных.
Grumpy избавлен от ключевой проблемы Python - глобальной блокировки интерпретатора (GIL, Global Interpreter Lock), не допускающей параллельного выполнения нескольких нитей кода. Grumpy также использует сборщик мусора Go для управления жизнью объектов вместо применяемой в Python системы на основе подсчёта ссылок. В сочетании с компиляцией в исполняемый код, подобные улучшения позволяют добиться существенного прироста производительности. Уровень масштабируемости Grumpy хорошо демонстрирует нижеприведённый график, отражающий результаты прохождения теста производительности Fibonacci:
Grumpy состоит из трёх основных компонентов:
- grumpc - компилятор, выполняющий разбор кода на языке Python и генерацию кода на языке Go. Для разбора используется модуль ast (Abstract Syntax Trees);
- Grumpy Runtime. Сформированный код на языке Go оперирует структурами данных, представляющими Python-объекты. Данные структуры и операции с ними определены в runtime-библиотеке grumpy, реализованной по аналогии с Python C API;
- Стандартная библиотека Grumpy. Большинство штатных библиотек Python написаны на языке Python и без проблем работают в Grumpy. Стандартная библиотека Grumpy является незначительно модифицированной копией stdlib из состава CPython 2.7. Python-библиотеки в которых используются модули на языке Си переписаны на Python, но используют родные расширения языка Go (напрямую Grumpy не поддерживает Python C API).
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.