Co to za zamieszanie w Python i CPython (Jython, IronPython) , nie rozumiem:
python.org wspomina, że CPython to:
„Tradycyjna” implementacja Pythona (pseudonim CPython)
jeszcze jedno pytanie przepełnienia stosu wspomina, że:
CPython to domyślny interpreter bajt-kodu Pythona, napisany w C.
Szczerze mówiąc, nie rozumiem, co właściwie oznaczają oba te wyjaśnienia, ale pomyślałem, że jeśli użyję CPython, oznacza to, że po uruchomieniu przykładowego kodu python kompiluje go do języka C, a następnie wykonuje tak, jakby to był C kod
Czym dokładnie jest CPython i czym różni się w porównaniu z Pythonem i czy powinienem prawdopodobnie używać CPython w porównaniu do Pythona, a jeśli tak, jakie są jego zalety?
Odpowiedzi:
Czym jest CPython?
CPython jest oryginalną implementacją języka Python. Jest to implementacja pobrana z Python.org. Ludzie nazywają to CPython, aby odróżnić go od innych, późniejszych implementacji języka Python i odróżnić implementację silnika językowego od samego języka programowania Python .
Druga część jest źródłem twojego zamieszania; musisz trzymać język Python oddzielnie od wszystkiego, co uruchamia kod Python.
CPython zdarza być realizowane w C. To właśnie szczegółów wdrażania, naprawdę. CPython kompiluje kod Pythona do kodu bajtowego (transparentnie) i interpretuje ten kod bajtowy w pętli ewaluacyjnej.
CPython jest także pierwszym, który wdrożył nowe funkcje; Programowanie w języku Python używa CPython jako podstawy; następują inne implementacje.
Co z Jythonem itp.?
Jython , IronPython i PyPy to obecne „inne” implementacje języka programowania Python; są one zaimplementowane odpowiednio w Javie, C # i RPython (podzbiór Pythona). Jython kompiluje kod Pythona do kodu bajtowego Java , dzięki czemu kod Pythona może działać na JVM. IronPython pozwala uruchomić Python na Microsoft CLR . A PyPy, zaimplementowany w (podzbiorze) Pythona, pozwala uruchamiać kod w Pythonie szybciej niż CPython, co słusznie powinno zaskoczyć. :-)
Właściwie kompilacja do C.
Więc CPython nie tłumaczy twojego kodu Python sam na siebie. Zamiast tego uruchamia pętlę tłumacza. Jest to projekt, który ma tłumaczyć Python-owski kod do C, który jest nazywany Cython . Cython dodaje kilka rozszerzeń do języka Python i pozwala kompilować kod do rozszerzeń C, kodu podłączanego do interpretera CPython.
źródło
Musisz odróżnić język od implementacji. Python to język,
Według Wikipedii „Język programowania jest zapisem do pisania programów, które są specyfikacjami obliczeń lub algorytmów”. Oznacza to, że są to po prostu reguły i składnia pisania kodu. Osobno mamy implementację języka programowania, która w większości przypadków jest faktycznym tłumaczem lub kompilatorem.
Python jest językiem. CPython to implementacja Pythona w C. Jython to implementacja w Javie i tak dalej.
Podsumowując: Używasz już CPython (jeśli pobierałeś stąd ).
źródło
Nawet ja miałem ten sam problem ze zrozumieniem, w jaki sposób CPython, JPython, IronPython, PyPy różnią się od siebie.
Tak więc jestem gotów wyjaśnić trzy rzeczy, zanim zacznę wyjaśniać:
Jeśli chcesz spojrzeć na kod bajtowy CPython, możesz. Oto jak możesz:
Teraz spójrzmy na powyższy kod. Linie od 1 do 6 są definicją funkcji. W linii 8 importujemy moduł „dis”, którego można użyć do wyświetlenia pośredniego kodu bajtowego Pythona (lub można powiedzieć, dezasemblera kodu bajtowego Pythona), który jest generowany przez CPython (interpreter).
UWAGA : Mam link do tego kodu z kanału #python IRC: https://gist.github.com/nedbat/e89fa710db0edfb9057dc8d18d979f9c
A potem jest Jython, który jest napisany w Javie i ostatecznie wytwarza kod bajtowy Java. Kod bajtu Java działa w środowisku Java Runtime Environment, które jest implementacją wirtualnej maszyny Java (JVM). Jeśli jest to mylące, podejrzewam, że nie masz pojęcia, jak działa Java. Mówiąc ogólnie, kod Java (język, a nie kompilator) jest pobierany przez kompilator Java i generuje plik (który jest kodem bajtu Java), który można uruchomić tylko przy użyciu środowiska JRE. Odbywa się to tak, że po skompilowaniu kodu Java można go przenieść na inne maszyny w formacie kodu bajtowego Java, który może być uruchamiany tylko przez JRE. Jeśli nadal jest to mylące, możesz rzucić okiem na tę stronę internetową .
Tutaj możesz zapytać, czy kod bajtowy CPython jest przenośny jak Jython, podejrzewam, że nie. Kod bajtowy wytworzony w implementacji CPython był specyficzny dla tego interpretera, aby ułatwić dalsze wykonywanie kodu (podejrzewam również, że taka pośrednia produkcja kodu bajtowego, dla ułatwienia przetwarzania odbywa się w wielu innych interpretatorach).
Tak więc w Jython, podczas kompilacji kodu Python, powstaje bajtowy kod Java, który można uruchomić na JVM.
Podobnie, IronPython (napisany w języku C #) kompiluje kod Pythona do Common Language Runtime (CLR), który jest technologią podobną do JVM opracowanej przez Microsoft.
źródło
W tym artykule dokładnie wyjaśniono różnicę między różnymi implementacjami języka Python. Jak ujął to artykuł:
źródło
Python to język: zestaw reguł, których można używać do pisania programów. Istnieje kilka implementacji tego języka.
Bez względu na to, jaką implementację wykonujesz, robią one prawie to samo: weź tekst swojego programu i zinterpretuj go, wykonując jego instrukcje. Żaden z nich nie kompiluje twojego kodu do C lub innego języka.
CPython to oryginalna implementacja napisana w C. (Część „C” w „CPython” odnosi się do języka, który został użyty do napisania samego interpretera Pythona).
Jython to ten sam język (Python), ale zaimplementowany w Javie.
Tłumacz języka IronPython został napisany w języku C #.
Istnieje również PyPy - interpreter języka Python napisany w języku Python. Wybierz swój wybór :)
źródło
implementation
oznacza, jakiego języka użyto do implementacji Pythona, a nie jak kod Pythona zostałby zaimplementowany. Zaletą korzystania z CPython jest dostępność czasu wykonania C, a także łatwa integracja z C / C ++.CPython został pierwotnie zaimplementowany przy użyciu
C
. Były inne rozwidlenia oryginalnej implementacji, które umożliwiły Pythonowi wykorzystanie Java (JYthon) lub .NET Runtime (IronPython).W zależności od używanej implementacji dostępność biblioteki może się różnić, na przykład Ctypes nie jest dostępna w Jython , więc żadna biblioteka, która używa ctypów, nie będzie działać w Jython. Podobnie, jeśli chcesz użyć klasy Java, nie możesz tego zrobić bezpośrednio z CPython. Potrzebujesz kleju (JEPP) lub musisz użyć Jython (Java Implementation of Python)
źródło
Powinieneś wiedzieć, że CPython tak naprawdę nie obsługuje wielowątkowości z powodu globalnej blokady interpretera . Nie ma również mechanizmów optymalizacji rekurencji i ma wiele innych ograniczeń, które inne implementacje i biblioteki starają się wypełnić.
Powinieneś spojrzeć na tę stronę na wiki python.
Spójrz na fragmenty kodu na tej stronie, da ci to dobre wyobrażenie o tym, czym jest tłumacz.
źródło
Oryginalna i standardowa implementacja Pythona jest zwykle wywoływana,
CPython
gdy chcesz go kontrastować z innymi opcjami (w przeciwnym razie po prostu zwykłym „Pythonem” ). Ta nazwa pochodzi od tego, że jest zakodowana w urządzeniu przenośnymANSI C language code
. To jest Python, który pobrać z http://www.python.org , get z ActivePython i Enthought rozkładów, i automatycznie na większości komputerów z systemem Linux i Mac OS X. Jeśli znalazłeś preinstalowaną wersję Pythona na swoim komputerze, prawdopodobnie tak jestCPython
, chyba że Twoja firma lub organizacja używa Pythona w bardziej wyspecjalizowany sposób.źródło
Implementacja języka programowania to system do wykonywania programów komputerowych.
Istnieją dwa ogólne podejścia do implementacji języka programowania:
Python jest interpretowanym językiem programowania wysokiego poziomu stworzonym przez Guido van Rossuma w 1991 roku.
CPython to referencyjna wersja języka obliczeniowego Python, napisanego w C, również przez Guido van Rossuma .
Inna lista implementacji języka Python
Źródło
źródło