2009-10-29 17 views
9

Nie rozumiem pojęcia "interpretera kodu bajtowego" w kontekście CPython. Czy ktoś może rzucić trochę światła na cały obraz?CPython to interpreter kodu bajtowego?

Czy to oznacza, że ​​CPython skompiluje i uruchomi plik Pyc (kod bajtowy?). Następnie, co skompilować plik py do pliku Pyc? Czym różni się Jython od CPython (z wyjątkiem tego, że są one implementowane w różnych językach).

Czytałem również gdzieś, że Python jest interpretacją C++. Czy to jest poprawne? I co to znaczy?

Wciąż jestem nowy w Pythonie, więc wybacz mi, jeśli zadaję głupie pytania ... Dziękuję bardzo!

Odpowiedz

12

CPython jest implementacją języka Python w języku C. Jest to pierwsza implementacja i nadal najważniejsza, kiedy ludzie mówią o Pythonie. Kompiluje pliki .py do plików .pyc. Pliki .pyc zawierają kody bajtowe. Implementacja CPython interpretuje również te bajty. CPython nie jest napisany w C++, to jest C.

Kompilacja z .py do .pyc dzieje się przezroczyście w razie potrzeby. Po uruchomieniu pliku .py, w razie potrzeby zostanie najpierw skompilowany do pliku .pyc, a następnie plik .pyc zostanie zinterpretowany.

Jython różni się, ponieważ (oprócz implementacji w języku Java zamiast w języku C) kompiluje pliki .py do plików .class, aby mogły być wykonywane w JVM.

+0

Czy Jython konwertuje kod Pythona na język Java, a następnie kompiluje do kodu bajtowego Jave? – Nope

+0

Nie wiem, czy Java jest formą pośrednią. –

+3

AFAIK Jython może generować Javę jako formularz pośredni na żądanie, ale zwykle generuje kod bajtowy Java. – MAK

7

CPython to zarówno kompilator kodu bajtowego, jak i interpreter (maszyna wirtualna).

Automatycznie wykrywa, czy nie istnieje istniejący plik pre-kompilatora (.pyc), kompiluje kod i zapisuje go.

10

Po pierwsze: fakt, że CPython jest interpreterem kodu bajtowego, nie powinien mieć znaczenia dla ciebie jako użytkownika pythona. Śmiało, napisz kod i nie przejmuj się, jak to się zmieni.

Tak więc, aby odpowiedzieć na twoje pytanie i zaspokoić ciekawość, oto, co się dzieje: CPython odczytuje kod źródłowy Pythona i kompiluje go do kodu bajtowego Pythona, który jest przechowywany w pliku .pyc. Następnie wykonuje ten kod za pomocą interpretera kodu bajtowego. Ten projekt oddziela parsowanie pythona od wykonania, dzięki czemu obie części interpretera są prostsze.

Jython jest tylko przednią połówką - odczytuje źródło Pythona i podaje kody bajtowe Java, które są następnie interpretowane przez maszynę JVM. Jest to ta sama architektura co CPython, z dwiema godnymi zauważenia różnicami: Jedna: kod bajtowy java jest ustandaryzowany i udokumentowany, podczas gdy kod bajtowy CPython jest uważany za wewnętrzny dla Pythona i może się zmienić w dowolnym momencie. Po drugie: JVM jest dużo bardziej skomplikowana niż interpreter CPython. JVM ma jeden z najbardziej zaawansowanych silników JIT na świecie, podczas gdy interpreter CPython jest dość prosty.

+1

Chociaż późno, ale jest to bardzo szczegółowe wyjaśnienie. Dziękuję Ci! – huy

Powiązane problemy