2009-10-29 21 views
9

Tôi không thực sự có khái niệm "thông dịch viên bytecode" trong ngữ cảnh của CPython. Ai đó có thể làm sáng tỏ toàn bộ bức tranh?CPython là phiên dịch viên bytecode?

Có nghĩa là CPython sẽ biên dịch và thực thi tệp pyc (tệp bytecode?). Sau đó, những gì biên dịch py tập tin pyc tập tin? Và làm thế nào là Jython khác nhau từ CPython (ngoại trừ chúng được thực hiện trong các ngôn ngữ khác nhau).

Tôi cũng đọc ở đâu đó rằng Python là bản dịch C++. Điều này có đúng không? Và thế có nghĩa là gì?

Tôi vẫn còn rất mới với Python, vì vậy hãy tha thứ cho tôi nếu tôi hỏi những câu hỏi ngu ngốc ... Cảm ơn bạn rất nhiều!

Trả lời

12

CPython là triển khai Python trong C. Đây là lần triển khai đầu tiên và vẫn là phương pháp chính mà mọi người có ý nghĩa khi họ nói về Python. Nó biên dịch các tệp .py thành tệp .pyc. Tệp .pyc chứa bytecode. Việc triển khai CPython cũng diễn giải các bytecode đó. CPython không được viết bằng C++, nó là C.

Việc biên dịch từ .py thành .pyc diễn ra trong suốt khi cần. Khi bạn thực thi tệp .py, tệp đầu tiên sẽ được biên dịch thành tệp .pyc nếu cần, sau đó tệp .pyc sẽ được diễn giải.

Jython là khác nhau vì (ngoài việc được triển khai trong Java thay vì C), nó biên dịch các tệp .py thành tệp .class để chúng có thể được thực hiện trong JVM.

+0

Jython có chuyển đổi mã Python sang Java và sau đó biên dịch sang bytecode Jave không? – Nope

+0

Tôi không biết liệu nó có tạo ra Java dưới dạng biểu mẫu trung gian hay không. –

+3

AFAIK Jython có thể sản xuất Java dưới dạng biểu mẫu trung gian nếu được yêu cầu, nhưng nó thường chỉ tạo ra bytecode Java. – MAK

7

CPython vừa là trình biên dịch bytecode và trình thông dịch (máy ảo).

Nó tự động phát hiện nếu không tồn tại tệp biên dịch trước (.pyc), biên dịch mã và lưu nó ra.

10

Đầu tiên: Thực tế là CPython là một trình thông dịch bytecode không quan trọng đối với bạn như một người dùng của python. Hãy tiếp tục và viết mã và đừng lo lắng về cách nó biến thành hành động. Vì vậy, để trả lời câu hỏi của bạn và thỏa mãn sự tò mò của bạn, đây là những gì sẽ xảy ra: CPython đọc mã nguồn python, và biên dịch nó thành mã byte python, được lưu trữ trong tệp .pyc. Sau đó nó thực thi mã đó bằng cách sử dụng một trình thông dịch bytecode. Thiết kế này tách phân tích cú pháp của python khỏi thực thi, cho phép cả hai phần của trình thông dịch trở nên đơn giản hơn.

Jython chỉ là nửa trước - nó đọc nguồn Python và xuất ra các mã Java bytecode, sau đó được JVM giải thích. Đó là kiến ​​trúc tương tự như CPython, với hai sự khác biệt đáng chú ý: Một: bytecode java được chuẩn hóa và ghi lại, trong khi mã byte bytecode được xem là nội bộ cho python và có thể thay đổi bất cứ lúc nào. Hai: JVM phức tạp hơn nhiều so với thông dịch viên CPython. JVM có một trong những động cơ JIT tiên tiến nhất trên thế giới, trong khi trình thông dịch CPython thì khá đơn giản.

+1

Mặc dù muộn, nhưng đây là một lời giải thích rất chi tiết. Cảm ơn bạn! – huy