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:
- Python (język programowania)
- JIT – kompilacja Just‑In‑Time
- CPython – referencyjna implementacja Pythona
- RPython – podzbiór Pythona używany w PyPy
- NumPy – biblioteka numeryczna dla Pythona
- Garbage Collection – techniki zarządzania pamięcią