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 по-прежнему является альфа-программным обеспечением, но большинство языковых конструкций и многие основные встроенные типы работают так, как вы и ожидали. Троттер говорит, что:
«есть еще дыры, которые нужно заполнить — во многих встроенных типах отсутствуют методы и атрибуты, встроенные функции отсутствуют, а стандартная библиотека практически пуста. Если вы обнаружите, что вещи, которые вы хотели бы, работали, подайте заявку, чтобы мы знали, какие приоритеты расставить. Или, еще лучше, отправьте запрос на вытягивание.»