Nota: Não confundir com
PyPI.
PyPy é uma implementação alternativa da linguagem Python[1] 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.[2][3]
RPython
O próprio interpretador PyPy é escrito num subconjunto restrito de Python chamado RPython (Restricted Python)[4] RPython coloca algumas restrições na linugagem Python para que o tipo de variáveis possa ser inferido durante a compilação.[5]
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.[6]
RPython é agora usada para escrever implementações de linguagens que não sejam Python, como Pixie.[7]
Status do Projeto
Na versão 7.3.17 PyPy é compativel com duas versões do CPython: 2.7 e 3.10[8][9]. A primeira versão do PyPy compatível com CPython v3 é PyPy v2.3.1 (2014)[10]. 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[11]. 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[12].
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[13] 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[14], 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[15]. 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[16]. Um port para a arquitetura ARM foi patrocinando em parte pela Raspberry Pi Foundation.[17][18]
O projeto PyPy também aceita doações através do seu blog de status.[19] 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.[17]
Ver também
Referências
- ↑ Ohri, Author Ajay (29 de novembro de 2015). «Interview Maciej Fijalkowski PyPy» (em inglês)
- ↑ Samuele Pedroni (março de 2007). «PyPy – Goals and Architecture Overview». Cópia arquivada em 14 de junho de 2012
- ↑ «PyPy – Goals and Architecture Overview – Mission Statement». Consultado em 11 de outubro de 2013
- ↑ Our runtime interpreter is “RPython”, Coding Guide – PyPy documentation
- ↑ "It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation", Ancona et al., 2007.
- ↑ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Tracing the Meta-Level: PyPy's Tracing JIT Compiler. ICOOOLPS '09. doi:10.1145/1565824.1565827
- ↑ Timothy Balridge interview.
- ↑ «PyPy – Python compatibility». pypy.org. 28 de dezembro 2019. Consultado em 15 de dezembro de 2020
- ↑ «PyPy v7.3.7: bug-fix release of 3.7, 3.8». pypy.org. 25 de outubro de 2021. Consultado em 10 de novembro de 2021
- ↑ the PyPy team (20 de junho de 2014). «PyPy3 2.3.1 – Fulcrum». PyPy blog
- ↑ «PyPy v7.2.0: release of 2.7, and 3.6». pypy.org. 16 de outubro de 2019
- ↑ «PyPy – Python compatibility». 28 de dezembro de 2019
- ↑ «EU Community Research and Development Information Service Entry»
- ↑ «Eurostars – Aim Higher»
- ↑ «Project Page on Eureka Network». Consultado em 17 de outubro de 2011. Cópia arquivada em 3 de abril de 2012
- ↑ «A thank you to the PSF». 22 de março de 2011
- ↑ a b Jake Edge (15 de maio de 2013). «A look at the PyPy 2.0 release». LWN.net
- ↑ «PyPy 2.0 – Einstein Sandwich». 9 de maio de 2013
- ↑ «PyPy Status Blog: Oh, and btw: PyPy gets funding through "Eurostars"». 10 de dezembro de 2010
- Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. RPython: a Step Towards Reconciling Dynamically and Statically Typed OO Languages. In Proc. Dynamic Language Symposium (DLS), 2007. ACM Press.
- Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. Tracing the meta-level: PyPy's Tracing JIT Compiler. In Proc. ICOOOLPS, 2009. ACM Press.
- Corbet, Jonathan (11 de maio de 2011). «A brief experiment with PyPy». LWN.net
- von Eitzen, Chris (21 de novembro de 2011). «PyPy 1.7 widens the performance "sweet spot"». The H. Heinz Heise
- Rose, John (2 de dezembro de 2011). «A Day with PyPy». Oracle developer blog
- «Interview Maciej Fijalkowski pypy». Decisionstats blog. 29 de novembro de 2015