Vâng, nó là cả ngôn ngữ biên dịch và giải thích. Vậy thì tại sao chúng ta thường gọi nó là ngôn ngữ diễn giải?
xem nó được biên dịch và giải thích như thế nào?
Trước hết tôi muốn nói rằng bạn sẽ thích câu trả lời của tôi hơn nếu bạn đến từ thế giới Java.
Trong Java, mã nguồn trước tiên được chuyển đổi thành mã byte thông qua trình biên dịch javac sau đó được chuyển hướng đến JVM (chịu trách nhiệm tạo mã gốc cho mục đích thực thi). Bây giờ tôi muốn cho bạn thấy rằng chúng tôi gọi Java là ngôn ngữ được biên dịch bởi vì chúng ta có thể thấy rằng nó thực sự biên dịch mã nguồn và cung cấp tệp. Class (không có gì ngoài mã byte) thông qua:
javac Hello.java -------> tạo tệp Hello. class
java Xin chào --------> Chuyển mã byte sang JVM cho mục đích thực thi
Điều tương tự cũng xảy ra với python, tức là đầu tiên mã nguồn được chuyển đổi sang mã byte thông qua trình biên dịch sau đó được chuyển đến PVM (chịu trách nhiệm tạo mã gốc cho mục đích thực thi). Bây giờ tôi muốn cho bạn thấy rằng chúng ta thường gọi Python là ngôn ngữ được dịch bởi vì quá trình biên dịch xảy ra đằng sau cảnh
và khi chúng ta chạy mã python thông qua:
python Hello.py -------> trực tiếp mã hóa và chúng ta có thể thấy đầu ra chứng minh rằng mã là đúng về mặt cú pháp
@ python Hello.py có vẻ như nó trực tiếp thực thi nhưng thực sự đầu tiên nó tạo mã byte được phiên dịch bởi trình thông dịch để tạo mã gốc cho mục đích thực thi.
CPython - Chịu trách nhiệm về cả biên dịch và giải thích.
Nhìn vào các dòng dưới đây nếu bạn cần thêm chi tiết :
Như tôi đã đề cập rằng CPython biên dịch mã nguồn nhưng quá trình biên dịch thực sự xảy ra với sự trợ giúp của cython thì việc giải thích xảy ra với sự trợ giúp của CPython
Bây giờ chúng ta hãy nói một chút về vai trò của trình biên dịch đúng lúc trong Java và Python
Trong JVM, Trình thông dịch Java tồn tại để phiên dịch dòng mã byte theo từng dòng để lấy mã máy gốc cho mục đích thực thi nhưng khi mã byte Java được trình thông dịch thực thi, việc thực thi sẽ luôn chậm hơn. vậy giải pháp là gì? giải pháp là trình biên dịch Just-In-Time tạo ra mã gốc có thể được thực thi nhanh hơn nhiều so với trình biên dịch. Một số nhà cung cấp JVM sử dụng Trình thông dịch Java và một số sử dụng trình biên dịch Just-In-Time . Tham khảo: bấm vào đây
Trong python để có được xung quanh trình thông dịch để đạt được việc thực thi nhanh, hãy sử dụng một triển khai python khác ( PyPy ) thay vì CPython .
bấm vào đây để thực hiện khác của python bao gồm PyPy .