Grumpy é um "transpiler" de Python para Golang, uma maneira de usar a velocidade, concorrência e paralelismo de Go escrevendo com a produtividade do código Python. Está sendo desenvolvido no Google pelas pessoas ligadas ao Youtube como alternativa a reescrever manualmente grande quantidade de código Python existente.
CPython oferece concorrência assíncrona via coroutines, gevent e async (PEP 492, à partir de CPython 3.5). Isso funciona muito bem para códigos I/O-Bound, como acesso à rede e ao disco. Mas não consegue usar mais de 1 processador em sua aplicação CPU-Bound, como moedores de números. Não consegue porque só tem 1 thread no Sistema Operacional, mesmo com várias coroutines na fila e vários processadores ociosos. E mesmo se você abrir várias threads, só 1 vai usar CPU ao mesmo tempo, devido ao famigerado GIL (Global Interpreter Lock).
Golang é uma linguagem feita para atender demandas de alta concorrência. Não tem GIL e automaticamente aloca as Goroutines nos processadores disponíveis, usando bem mais do hardware disponível.
Grumpy "traduz" seu código Python para ser compilado em Go. Isso funciona muito bem mas introduz certos desafios, como incompatibilidade com a C-API do CPython e ausência das chamadas exec, eval e compile, por exemplo.
Será apresentado em 3 partes, com comparativos, exemplos e demonstrações:
- Concorrência e Paralelismo no CPython e Go Runtime
- Grumpy Transpiler como alternativa ao CPython Runtime
- Internals e desafios do runtime Grumpy
Esta talk foi apresentada na PythonBrasil 2017 e em um Gophers Meetup em São Paulo.