Gdy mówimy o Pythonie, często mamy na myśli nie tylko język, ale także jego implementację. Python jest właściwie specyfikacją języka, który może być zaimplementowany na wiele różnych sposobów.
Tło
Zanim przejdziemy dalej, zrozumiemy różnicę między kodem bajtowym a maszynowym (kod natywny).
Kod maszynowy (aka kod natywny)
Kod maszynowy jest zestawem instrukcji, które są bezpośrednio wykonywane przez procesor. Każda instrukcja wykonuje bardzo unikalne zadanie, takie jak ładowanie lub operacja logiczna na danych w pamięci procesora. Prawie wszystkie języki wysokiego poziomu, takie jak C, tłumaczą kod źródłowy na wykonywalny kod maszynowy za pomocą kompilatorów, loaderów i linkerów. Każdy procesor lub rodzina procesorów ma swój własny zestaw instrukcji kodu maszynowego.
Bytecode
Bytecode jest również binarną reprezentacją wykonywaną przez maszynę wirtualną (nie bezpośrednio przez CPU). Maszyna wirtualna (która jest napisana inaczej dla różnych maszyn) konwertuje instrukcje binarne na konkretne instrukcje maszynowe. Jednym z języków, który wykorzystuje koncepcję Bajtkodu, jest Java.
Kod maszynowy jest znacznie szybszy w porównaniu z Bajtkodem, ale Bajtkod jest przenośny i bezpieczny w porównaniu z Kodem maszynowym.
Implementacje Pythona
Cpython
Domyślną implementacją języka programowania Python jest Cpython. Jak sama nazwa wskazuje, Cpython jest napisany w języku C. Cpython kompiluje kod źródłowy Pythona do pośredniego kodu bajtowego, który jest wykonywany przez maszynę wirtualną Cpythona. CPython jest dystrybuowany z dużą biblioteką standardową napisaną w mieszaninie C i Pythona. CPython zapewnia najwyższy poziom kompatybilności z pakietami Pythona i modułami rozszerzeń C. Wszystkie wersje języka Python są implementowane w C, ponieważ CPython jest implementacją referencyjną.
Kilka implementacji, które są oparte na CPython runtime core, ale z rozszerzonym zachowaniem lub funkcjami w niektórych aspektach to Stackless Python, wpython, MicroPython.
Stackless Python – CPython z naciskiem na współbieżność przy użyciu taskletów i kanałów (używany przez dspython dla Nintendo DS)
Inne implementacje
Istnieją też inne implementacje języka Python Jedyne implementacje, o których wiadomo, że są kompatybilne z daną wersją języka to IronPython, Jython i PyPy.
Jython
Jython jest implementacją języka programowania Python, która może działać na platformie Java. Programy Jython używają klas Java zamiast modułów Pythona .Jython kompiluje się do kodu bajtowego Java, który może być następnie uruchomiony przez maszynę wirtualną Java. Jython umożliwia korzystanie z funkcji biblioteki klas Java z poziomu programu Pythona. Jython jest powolny w porównaniu z Cpythonem i brakuje mu kompatybilności z bibliotekami CPythona.
IronPython
Aplikacja Pythona napisana w C# z myślą o frameworku .NET Microsoftu. Podobnie jak Jython, używa .Net Virtual Machine tj. Common Language Runtime. IronPython może korzystać z .NET Framework i bibliotek Pythona, a inne języki .NET mogą używać kodu Pythona bardzo wydajnie. IronPython radzi sobie lepiej w programach Pythona, które używają wątków lub wielu rdzeni, ponieważ ma JIT, a także dlatego, że nie ma Global Interpreter Lock.
PyPy
„Jeśli chcesz, aby twój kod działał szybciej, prawdopodobnie powinieneś po prostu użyć PyPy.” – Guido van Rossum (twórca Pythona)
Python jest dynamicznym językiem programowania. Mówi się, że Python jest powolny, ponieważ domyślna implementacja CPython kompiluje kod źródłowy pythona w kodzie bajtowym, który jest powolny w porównaniu z kodem maszynowym (kodem natywnym). Tutaj pojawia się PyPy.
PyPy jest implementacją języka programowania Python napisaną w Pythonie. Interpreter jest napisany w RPython (podzbiór Pythona).
PyPy używa (just-in-time compilation). W prostych słowach JIT używa metod kompilacji, aby uczynić system interpretera bardziej wydajnym i szybkim. Tak więc zasadniczo JIT umożliwia kompilację kodu źródłowego do natywnego kodu maszynowego, co czyni go bardzo szybkim.
PyPy jest również domyślnie dostarczany z obsługą trybu bez stosu, zapewniając mikrowątki dla ogromnej współbieżności. Mówi się, że Python jest około 7,5 razy szybszy niż Cpython.
Kilka innych implementacji Pythona to CLPython, Pyston, Psyco, Cython, IPython.
Ten artykuł został napisany przez Saurabh Daalia. Jeśli podoba Ci się GeeksforGeeks i chciałbyś się przyczynić do jego powstania, możesz również napisać artykuł korzystając z adresu contribute.geeksforgeeks.org lub wysłać go pocztą na adres [email protected]. Zobacz, jak twój artykuł pojawia się na stronie głównej GeeksforGeeks i pomóż innym Geekom.