Patrzyłem na PyPy i zastanawiałem się, dlaczego nie został zaadaptowany do głównych dystrybucji Pythona. Czy takie rzeczy jak kompilacja JIT i mniejsze zużycie pamięci nie poprawią znacznie szybkości całego kodu Pythona?
Krótko mówiąc, jakie są główne wady PyPy, które powodują, że pozostaje oddzielnym projektem?
Odpowiedzi:
PyPy nie jest rozwidleniem CPythona, więc nigdy nie można go połączyć bezpośrednio z CPythonem.
Teoretycznie społeczność Pythona mogłaby uniwersalnie przyjąć PyPy, PyPy mogłoby stać się implementacją referencyjną, a CPython mógłby zostać przerwany. Jednak PyPy ma swoje słabości:
PyPy to świetny projekt, ale szybkość wykonywania zadań intensywnie wykorzystujących procesor to nie wszystko, aw wielu aplikacjach jest to najmniejszy problem. Na przykład Django może działać na PyPy, co przyspiesza tworzenie szablonów, ale sterowniki bazy danych CPythona są szybsze niż PyPy; ostatecznie to, która implementacja jest bardziej wydajna, zależy od tego, gdzie jest wąskie gardło w danej aplikacji.
Inny przykład: można by pomyśleć, że PyPy świetnie nadaje się do gier, ale większość strategii GC, takich jak te używane w PyPy, powoduje zauważalne wahania. W przypadku CPythona większość elementów gry wymagających dużej mocy obliczeniowej jest przenoszona do biblioteki PyGame, z której PyPy nie może skorzystać, ponieważ PyGame jest głównie zaimplementowany jako rozszerzenie C (choć zobacz: pygame-cffi). Nadal uważam, że PyPy może być świetną platformą do gier, ale nigdy nie widziałem, aby faktycznie była używana.
PyPy i CPython mają radykalnie różne podejścia do podstawowych pytań projektowych i dokonują różnych kompromisów, więc żadne z nich nie jest „lepsze” od innych w każdym przypadku.
źródło
Po pierwsze, nie jest w 100% kompatybilny z Pythonem 2.xi ma tylko wstępne wsparcie dla 3.x.
To też nie jest coś, co można by łączyć - implementacja Pythona dostarczana przez PyPy jest generowana przy użyciu stworzonego przez nich frameworka, który jest niesamowicie fajny, ale także całkowicie różni się od istniejącej implementacji CPythona. Musiałaby to być całkowita wymiana.
Istnieje kilka bardzo konkretnych różnic między PyPy i CPython, z których największa dotyczy modułów rozszerzeń obsługiwane są - co, jeśli chcesz wyjść poza standardową bibliotekę, to wielka sprawa.
Warto również zauważyć, że PyPy nie jest uniwersalnie szybszy.
źródło
Zobacz ten film Guido van Rossuma . Mówi o tym samym pytaniu, które zadałeś w 12 min i 33 sek.
Najważniejsze:
W końcu to on decyduje ...
źródło
Jednym z powodów może być to, że według strony PyPy , obecnie działa ona tylko na 32- i 64-bitowej architekturze Intel x86, podczas gdy CPython działa również na innych platformach. Wynika to prawdopodobnie z ulepszeń szybkości w PyPy specyficznych dla platformy. Chociaż szybkość to dobra rzecz, ludzie często chcą, aby implementacje językowe były jak najbardziej niezależne od platformy.
źródło
Polecam obejrzenie tego przemówienia Davida Beazleya, aby uzyskać więcej informacji. Odpowiada na Twoje pytanie, wyjaśniając naturę i zawiłości PyPy.
źródło
Oprócz wszystkiego, co zostało tutaj powiedziane, PyPy nie jest tak solidny jak CPython pod względem błędów. Dzięki SymPy w ciągu ostatnich kilku lat znaleźliśmy około tuzina błędów w PyPy, zarówno w wydanych wersjach, jak iw nightlies.
Z drugiej strony, kiedykolwiek znaleźliśmy tylko jeden błąd w CPythonie i był to wersja wstępna.
Ponadto nie pomijaj braku obsługi Python 3. Nikt w podstawowej społeczności Pythona już nawet nie dba o Python 2. Pracują nad kolejnymi dużymi rzeczami w Pythonie 3.4, które będzie piątym głównym wydaniem Pythona 3. Faceci z PyPy nadal nie mają żadnego z nich. Muszą więc nadrobić zaległości, zanim staną się rywalami.
Nie zrozum mnie źle. PyPy jest niesamowity. Ale nadal jest daleki od bycia lepszym niż CPython pod wieloma bardzo ważnymi względami.
A tak przy okazji, jeśli używasz SymPy w PyPy, nie zobaczysz mniejszego zużycia pamięci (ani też przyspieszenia). Zobacz https://bitbucket.org/pypy/pypy/issues/1447/ .
źródło