Python В Go — Представляем Grumpy


Google разработала экспериментальную среду выполнения Python для Go, которая переводит код Python в Go, а затем запускает код во время выполнения Go.

Идея, лежащая в основе этой сумасшедшей схемы, заключается в том, чтобы найти способ обеспечить хорошую работу параллельных рабочих нагрузок. Как объясняет сообщение в блоге Google с открытым исходным кодом Дилан Троттер из YouTube Engineering:

«Google запускает миллионы строк кода на Python. Сервер переднего плана,который управляет youtube.com а API YouTube в основном написаны на Python, и он обслуживает миллионы запросов в секунду! Интерфейс YouTube работает на CPython 2.7, поэтому мы вложили массу усилий в улучшение среды выполнения и адаптацию нашего приложения для оптимальной работы в нем.»

Троттер объясняет, что, хотя работа была относительно успешной, проблема остается в том, что очень трудно заставить параллельные рабочие нагрузки хорошо работать на CPython. Все другие среды выполнения Python включали компромиссы, так что:

«мы задали себе безумный вопрос: что, если бы мы реализовали альтернативную среду выполнения, оптимизированную для обслуживания в режиме реального времени?»

Выбор Go в качестве платформы свелся к ряду преимуществ, включая легкие потоки и первоклассную совместимость языков.

Результатом стал Grumpy, экспериментальная среда выполнения Python для Go, которая переводит код Python в программы Go, и эти транспилированные программы легко запускаются в среде выполнения Go.

Цель состоит в том, чтобы Grumpy был заменяющей средой выполнения для любого чистого проекта Python. Есть два ограничения из-за выбора дизайна, сделанного разработчиками. Во-первых, поскольку нет поддержки модулей расширения C, Grumpy не может использовать существующие расширения Python C. Этот выбор был сделан потому, что он дал разработчикам гибкость в разработке API и представления объектов, которые масштабируются для параллельных рабочих нагрузок.

Второе ограничение заключается в том, что Grumpy не является интерпретатором; программы Grumpy компилируются и связываются так же, как и любая другая программа Go. Это ограничивает гибкость разработки и развертывания, но создает возможности для оптимизации производительности во время компиляции с помощью статического анализа программ. Это также означает, что взаимодействие с кодом Go становится одновременно мощным и простым.: Сварливые программы могут импортировать пакеты Go так же, как модули Python.

Ограничение, которое может иметь большее значение для разработчиков Python, заключается в том, что Grumpy запускает Python 2.7, а не Python 3. Разработчики из Google говорят, что это связано с тем, что у них есть большая кодовая база в Python 2.7 для поддержки. В разговоре на Github Дилан Троттер сказал::

«Я определенно хотел бы поддержать Python 3. Это просто куча работы. Вероятно, требуется разветвление grumpy и создание всех функций v3.»

«Другой путь может заключаться в поддержке функций Python 3 в существующей среде выполнения Grumpy и транспилере, рискуя сделать вещи менее ремонтопригодными.»

Grumpy по-прежнему является альфа-программным обеспечением, но большинство языковых конструкций и многие основные встроенные типы работают так, как вы и ожидали. Троттер говорит, что:

«есть еще дыры, которые нужно заполнить — во многих встроенных типах отсутствуют методы и атрибуты, встроенные функции отсутствуют, а стандартная библиотека практически пуста. Если вы обнаружите, что вещи, которые вы хотели бы, работали, подайте заявку, чтобы мы знали, какие приоритеты расставить. Или, еще лучше, отправьте запрос на вытягивание.»


Добавить комментарий