Đây chỉ là một thắc mắc tôi đã có trong khi đọc về các ngôn ngữ được giải thích và biên dịch.
Ruby chắc chắn là một ngôn ngữ được thông dịch vì mã nguồn được xử lý bởi một trình thông dịch tại điểm thực thi.
Ngược lại, C là ngôn ngữ được biên dịch, vì người ta phải biên dịch mã nguồn trước theo máy và sau đó thực thi. Kết quả này được thực hiện nhanh hơn nhiều.
Bây giờ đến với Python :
- Mã python ( somefile.py ) khi được nhập sẽ tạo một tệp ( somefile.pyc ) trong cùng thư mục. Hãy để chúng tôi nói việc nhập được thực hiện trong một mô-đun python shell hoặc django. Sau khi nhập, tôi thay đổi mã một chút và thực hiện lại các chức năng đã nhập để thấy rằng nó vẫn đang chạy mã cũ. Điều này cho thấy rằng các tệp * .pyc được biên dịch các tệp python tương tự như tệp thực thi được tạo sau khi biên dịch tệp C, mặc dù tôi không thể thực thi trực tiếp tệp * .pyc.
- Khi tệp python (somefile.py) được thực thi trực tiếp (./somefile.py hoặc python somefile.py) không có tệp .pyc được tạo và mã được thực thi như thể hiện hành vi được diễn giải.
Những điều này cho thấy rằng một mã python được biên dịch mỗi khi nó được nhập vào trong một quy trình mới để tạo .pyc trong khi nó được diễn giải khi được thực thi trực tiếp.
Vì vậy, loại ngôn ngữ nào tôi nên xem nó là? Giải thích hay tổng hợp? Và làm thế nào để hiệu quả của nó so với các ngôn ngữ được giải thích và biên dịch?
Theo trang Ngôn ngữ diễn giải của wiki , nó được liệt kê là ngôn ngữ được biên dịch thành Mã máy ảo, điều đó có nghĩa là gì?
RUN
. Như thể bạn có một trình biên dịch đã thực hiện bước lexing và sau đó xuất ra một luồng mã thông báo phải được sửa lại mỗi khi chương trình được chạy. Hoàn toàn không giống như quá trình biên dịch mã byte hiện đại như được thực hiện bởi, giả sử, javac
bao gồm lexing, phân tích cú pháp và tối ưu hóa.