encyklopedia.space

PyPy

PyPy to alternatywna implementacja języka Python, znana przede wszystkim ze swojego kompilatora Just‑In‑Time (JIT). Projekt ten powstał w 2003 roku, a pierwsza stabilna wersja 1.0 została wydana w 2007 roku.

Historia

Idea stworzenia szybszego interpretera Pythona pojawiła się w 2003 roku w wyniku potrzeb badaczy z Uniwersytetu w Cambridge oraz Uniwersytetu Londyńskiego. Projekt rozpoczął się jako PyPy – skrót od „Python in Python”, ponieważ początkowa wersja została napisana w języku Python, a następnie skompilowana przy użyciu własnego narzędzia RPython.

W kolejnych latach PyPy przeszło liczne przeglądy i optymalizacje, a od 2009 roku zyskało pełne wsparcie dla wersji 2.x języka Python. W 2015 roku wprowadzono wsparcie dla Python 3.x, co znacznie zwiększyło popularność projektu.

Architektura

Podstawą PyPy jest RPython – podzbiór języka Python, który można przetłumaczyć na wydajny kod maszynowy. Proces kompilacji przebiega w kilku etapach:

  • Analiza kodu źródłowego w RPython.
  • Generowanie intermediate representation (IR) oraz optymalizacji.
  • Tworzenie kompilatora JIT, który w czasie wykonania przekształca najczęściej wywoływane fragmenty kodu w natywny kod maszynowy.
  • Budowanie interpretera oraz zbieracza śmieci.

Główne cechy

  • Wydajność – dzięki JIT PyPy potrafi przyspieszyć typowe programy Python od 2‑ do 10‑krotnie w porównaniu z CPython.
  • Kompatybilność – PyPy stara się być w pełni kompatybilny z Python 2 oraz Python 3, w tym z najpopularniejszymi bibliotekami C‑extension, takimi jak NumPy i SciPy (poprzez cffi lub Cython).
  • Dynamiczny język – obsługa pełnej dynamiki Pythona, w tym dynamicznego ładowania kodu, introspekcji i metaprogramowania.
  • Portowalność – dostępny na wiele platform: Linux, Windows, macOS oraz niektóre systemy BSD.
  • Garbage Collection – wbudowany, generacyjny zbieracz śmieci, zoptymalizowany pod kątem krótkotrwałych i długotrwałych obiektów.

Porównanie z CPython

Poniższa tabela przedstawia najważniejsze różnice między PyPy a domyślną implementacją CPython:

Cecha CPython PyPy
Wykonanie kodu Interpretowany (bytecode) Interpretowany + JIT (kompilacja w czasie wykonania)
Wydajność Standardowa 2‑10× szybszy w typowych obciążeniach
Kompatybilność z bibliotekami C Pełna Ograniczona (wymaga cffi/Cython)
Rozmiar pamięci Mniejszy przy krótkich sesjach Większy początkowy narzut, ale lepsze zarządzanie przy długotrwałym działaniu
Wsparcie wersji Pythona Natychmiast po wydaniu Opóźnione (pierwsze wsparcie 3.x w 2015)

Zastosowania

Ze względu na wysoką wydajność, PyPy jest wykorzystywany w:

  • Systemach analizy danych i uczenia maszynowego, gdzie NumPy jest dostępny w wersji kompatybilnej z PyPy.
  • Serwisach internetowych i mikroserwisach, w których istotny jest szybki start i niski narzut pamięciowy.
  • Badaniach naukowych i symulacjach wymagających intensywnych pętli i obliczeń.
  • Projektach edukacyjnych, które chcą pokazać różnice pomiędzy różnymi implementacjami języka.

Wersje i dostępność

Aktualnie najnowsza stabilna wersja PyPy to 7.3.12 (stan na 2024 rok). Dostępne są wersje zarówno dla 64‑bitowych, jak i 32‑bitowych architektur, a także wersje z wbudowanym LLVM dla jeszcze lepszej optymalizacji.

Jak zacząć?

Instalacja PyPy jest prosta:

# Na systemach opartych na Debianie/Ubuntu
sudo apt-get install pypy3

# Na macOS przy użyciu Homebrew
brew install pypy3

# Instalacja ze źródeł
wget https://downloads.python.org/pypy/pypy3.9‑v7.3.12‑src.tar.bz2
tar -xjf pypy3.9‑v7.3.12‑src.tar.bz2
cd pypy3.9‑v7.3.12‑src
python3.9 ./rpython/bin/rpython -Ojit targetpypy.py

Po instalacji można uruchomić interpreter poleceniem pypy3 i używać go tak samo, jak python3.

Patenty i licencja

PyPy jest rozpowszechniany na licencji BSD (2‑klauzulowej), co umożliwia swobodne wykorzystywanie go w projektach komercyjnych i otwarto‑źródłowych.

Linki wewnętrzne

Więcej informacji można znaleźć w następujących artykułach encyklopedycznych:

Bibliografia

  1. David Beazley, “Python Cookbook”, 2002 – rozdział dotyczący optymalizacji.
  2. Armin Rigo, “RPython – a restricted subset of Python”, 2008.
  3. PyPy Documentation, 2024 – oficjalna dokumentacja projektu.