Đối với mã như thế A = A + B
, có thể biên dịch xuống một hoặc hai hướng dẫn máy, mỗi lệnh thực hiện một số chu kỳ nhất định. Không có thông dịch viên có thể làm điều tương tự trong số chu kỳ đó vì một lý do đơn giản.
Trình thông dịch cũng thực thi một tập lệnh của riêng nó (gọi chúng là mã byte, mã p, ngôn ngữ trung gian, bất cứ thứ gì). Mỗi lần nó nhìn thấy một mã byte như ADD, nó phải tìm kiếm nó bằng cách nào đó và phân nhánh đến mã thực hiện phép cộng.
Lần sau khi nhìn thấy nó, nó phải lặp lại việc tra cứu đó, trừ khi nó có cách để nhớ lần tra cứu trước. Nếu nó có cách để nhớ tra cứu trước đó, thì đó không còn là cái mà chúng ta gọi là "trình thông dịch", mà là một trình biên dịch chỉ trong thời gian, hoặc JITter.
Mặt khác...
Đối với mã như thế callSomeFunction( ... some args ...)
, có bao nhiêu chu kỳ được sử dụng giữa việc nhập mã đó và để lại mã? Tất cả phụ thuộc vào những gì xảy ra bên trong callSomeFunction
. Nó có thể là một vài, và nó có thể là hàng nghìn tỷ, ngay cả khi callSomeFunction
nó được biên dịch. Nếu đó là rất nhiều, không có gì phải bàn cãi về chi phí giải thích của dòng mã đó - tiền ở nơi khác.
Hãy nhớ các ngôn ngữ được dịch có một giá trị của riêng chúng, chẳng hạn như, không cần phải biên dịch chúng. (Việc "biên dịch" cú pháp bề mặt thành mã byte mất thời gian không đáng kể. Lấy R hoặc MATLAB chẳng hạn.)
Ngoài ra, có sự linh hoạt cần thiết cho các cấp độ lập trình thông minh. Trong Hiệp hội Tâm trí của Minsky , Chương 6.4 B -Brains, có các chương trình A liên quan đến thế giới, và có các chương trình B liên quan đến các chương trình A, và có thể có các cấp độ khác. Các chương trình viết và quản lý các chương trình khác có thể được thực hiện dễ dàng hơn trong các hệ thống diễn giải.
Trong Lisp, bạn có thể viết (+ A B)
để thêm A và B, nhưng một khi nó được viết, bạn chỉ có lựa chọn để chạy nó hay không. Bạn cũng có thể viết (eval (list '+ 'A 'B))
mà xây dựng chương trình và sau đó thực hiện nó. Nó có thể xây dựng một cái gì đó khác nhau.
Chủ đề của chương trình là một chương trình khác . Điều này dễ dàng hơn để viết bằng ngôn ngữ được dịch (mặc dù, như Jorg chỉ ra, các phiên bản mới hơn của Lisp, trong khi chúng có eval
, biên dịch nhanh, do đó chúng không bị phạt tốc độ khi phiên dịch).