# PyPy

PyPy é uma implementação alternativa da linguagem Python a CPython, que é a implementação padrão de Python. PyPy frequentemente roda mais rápido que que CPython, por usar uma JIT (Just In Time), enquanto CPython é interpretada. A maior parte do código Python roda bem na PyPy, com exceção de código que depende de extensões da CPython, que ou não funcionam ou causam algum overhead quando rodam na PyPy. Funcionalmente, PyPy é projetada em torno de uma técnica conhecida como meta-tracing, que transforma um interpretador num JIT. Já que interpretadores são mais fáceis de escrever que compiladores, mas rodam mais lentamente, essa técnica torna mais fácil produzir uma implementação eficiente de linguagens de programação. O toolchain meta-tracing usado pelo PyPy é chamado de RPython.

## Detalhes e motivações

PyPy tem o objetivo de prover um framework comum para tradução e suporte para produzir implementações de linguagens dinâmicas, com ênfase numa separação limpa entre a especificação da linguagem e aspectos da implementação. Ele também tem o objetivo de prover um implementação compatíveis, flexíveis e implementação rápida da linguagem da linguagem de programação Python usando o framework acima para habilitar novas features sem ter que codificar em detalhes de baixo nível.

### RPython

O próprio interpretador PyPy é escrito num subconjunto restrito de Python chamado RPython (Restricted Python) RPython coloca algumas restrições na linugagem Python para que o tipo de variáveis possa ser inferido durante a compilação.
O projeto PyPy desenvolveu um toolchain que analisa código RPython e o traduz para uma forma de bytecode, que pode ser reduzido em C. Haviam outros backends além do C (Java, C# e Javascript), mas eles sofreram de bitrot e foram removidos. Por isso a logo recursivo de PyPy é uma cobra engolindo a si mesma já que RPython é traduzido pelo interpretador Python. O código também pode ser rodar sem ser traduzido para teste e analises, o que provê um boa Plataforma de teste para pesquisa em linguagens dinâmicas.
Ele permite garbage collectors plugáveis, assim como habilitar o recurso Stackless Python. Finalmente ele inclui um gerador de just-in-time (JIT) que constrói um compilador just-in-time no interpretador, dadas algumas anotações no código fonte do interpretador. O compilador JIT gerado é um tracing JIT.
RPython é agora usada para escrever implementações de linguagens que não sejam Python, como Pixie.

## Status do Projeto

Na versão 7.3.17 PyPy é compativel com duas versões do CPython: 2.7 e 3.10. A primeira versão do PyPy compatível com CPython v3 é PyPy v2.3.1 (2014). O interpretador PyPy compatível com CPython v3 também é conhecido como PyPy3.
PyPy tem suporte at JIT em processadores de 32/64 bits x86 e 32/64 bits ARM. Ele é testado nightly no Windows, Linux, OpenBSD e Mac OS X. PyPy é capas de rodar software puramente Python que não depende de características especificas da implementação.
Há uma camada de compatibilidade com a API C para extensões do CPython chamada CPyExt, mas ela é incompatível e experimental. A maneira preferida de interagir com bibliotecas compartilhadas C é através da Interface de função externa C embutido (CFFI) ou bibliotecas ctypes.

## História
### Financiamento

PyPy foi financiado pela União Europeia sendo um Projetos de pesquisa direcionados específicos entre dezembro de 2004 e março de 2007. Em junho de 2008 o PyPy anunciou financimento sendo parte do programa Open Source do Google e concordou em focar em fazer o PyPy mais compatível com CPython. Em 2009 o Eurostars, um agencia do União Europeia para finaciamento espeilmente focada em PMEs, aceitou uma proposta de um membro do projeto entitulado "PYJIT" – a fast and flexible toolkit for dynamic programming languages based on PyPy". O financiamento da Eurostar durou até agosto de 2011. Na PyCon US de 2011, a Python Software Foundation proveu uma patrocínio de $10,000 para que o PyPy continuasse a trabalhar em performance compatibilidade com versões mais novas as linguagem. Um port para a arquitetura ARM foi patrocinando em parte pela Raspberry Pi Foundation.
O projeto PyPy também aceita doações através do seu blog de status. Em 2013, uma variedade de subprojetos tem financiado: compatibilidade com Python 3, suporte embutido otimizado ao NumPy cálculos numéricos e suporte a software transactional memory para permitir melhor paralelismo.