Mối quan hệ giữa trình thông dịch meta, máy ảo và hiệu suất tăng là gì?


12

Tôi đã đọc về các thông dịch viên vòng tròn trên web (bao gồm cả SICP) và tôi đã xem xét mã của một số triển khai (như PyPy và Narcissus).

Tôi đã đọc khá nhiều về hai ngôn ngữ sử dụng đánh giá siêu vòng tròn, Lisp và Smalltalk. Theo như tôi hiểu thì Lisp là trình biên dịch tự lưu trữ đầu tiên và Smalltalk đã thực hiện JIT "thật" đầu tiên.

Một điều tôi chưa hiểu hết là làm thế nào những trình thông dịch / trình biên dịch đó có thể đạt được hiệu suất tốt như vậy hay nói cách khác, tại sao PyPy lại nhanh hơn CPython? Có phải vì suy tư?

Ngoài ra, nghiên cứu về Smalltalk của tôi khiến tôi tin rằng có mối quan hệ giữa JIT, máy ảo và sự phản chiếu. Các máy ảo như JVM và CLR cho phép rất nhiều loại hướng nội và tôi tin rằng chúng sử dụng nó rất tốt trong quá trình biên dịch Just-in-Time (và AOT, tôi cho là vậy?). Nhưng theo như tôi biết, Máy ảo là loại giống như CPU, ở chỗ chúng có một bộ hướng dẫn cơ bản. Máy ảo có hiệu quả không vì chúng bao gồm thông tin về loại và tham chiếu, cho phép phản ánh ngôn ngữ không thể tin được?

Tôi hỏi điều này bởi vì nhiều ngôn ngữ được dịch và biên dịch hiện đang sử dụng mã byte làm mục tiêu (LLVM, Parrot, YARV, CPython) và các máy ảo truyền thống như JVM và CLR đã tăng hiệu suất đáng kinh ngạc. Tôi đã được thông báo rằng đó là về JIT, nhưng theo như tôi biết thì JIT không có gì mới vì Bản thân của Smalltalk và Sun đã làm điều đó trước Java. Tôi không nhớ các máy ảo hoạt động đặc biệt tốt trong quá khứ, không có nhiều máy tính không học thuật ngoài JVM và .NET và hiệu suất của chúng chắc chắn không tốt như bây giờ (tôi ước tôi có thể lấy nguồn này nhưng tôi nói từ kinh nghiệm cá nhân).

Sau đó, thật bất ngờ, vào cuối những năm 2000, một cái gì đó đã thay đổi và rất nhiều máy ảo bắt đầu bật lên ngay cả đối với các ngôn ngữ đã được thiết lập và với hiệu suất rất tốt. Có điều gì đó được phát hiện về việc triển khai JIT cho phép khá nhiều máy ảo hiện đại tăng vọt về hiệu suất không? Một tờ giấy hoặc một cuốn sách có thể?


3
Tiền bạc. Tiền đã từng được đổ vào C ++ và Fortran giờ được đổ vào HotSpot, CLR, Mono, V8, Nitro, SpiderMonkey, v.v.
Jörg W Mittag

Tôi chỉ có thể đoán, nhưng tôi nghĩ rằng đó chỉ là sự cải thiện theo thời gian, như được mô tả ở đây joelonsoftware.com/articles/fog0000000017.html
Doc Brown


1
@Gomi Không phải là ngôn ngữ thực hiện giống với ngôn ngữ được triển khai như thế nào. Có các trình thông dịch JavaScript, Lisp, Prolog, SmallTalk và Ruby được viết bằng RPython và họ nhận được chính xác các ưu đãi mà PyPy cung cấp. Lý do duy nhất RPython dựa trên Python là nó được tạo ra bởi một nhóm những người đam mê Python. Các tính năng của RPython giúp PyPy nhanh chóng không liên quan gì đến Python: Tạo trình biên dịch JIT tự động, trình thu gom rác, v.v. - và vâng, hầu hết điều đó về nguyên tắc có thể được thực hiện bằng các ngôn ngữ khác. Bạn sẽ phải tạo một trình biên dịch hoàn toàn mới.

4
-1 bởi vì bạn dường như có ít nhất 3 câu hỏi khác nhau ở đây: (a) Tại sao việc triển khai siêu vòng tròn lại tốt như vậy? (b) Máy ảo có hiệu quả vì thông tin loại và nội quan có lợi cho hiệu suất không? (c) Làm thế nào phổ biến VM tăng lên vào cuối những năm 2000, và làm thế nào mà tất cả chúng đột nhiên có hiệu suất tốt? Tôi nghĩ tốt hơn là hỏi những câu hỏi đó một cách riêng biệt.
Sồi

Câu trả lời:


1

2 trên 3: Không có mối quan hệ nào giữa thời gian chạy ngôn ngữ "siêu vòng tròn" và "hiệu suất cao". Thời gian chạy siêu vòng tròn đạt được hiệu suất cao bằng cách biên dịch JIT thành mã gốc và chạy mã gốc. Không có lý do tại sao thời gian chạy Python hoàn hảo của bạn phải được viết bằng Python hoặc Lisp bằng Lisp, v.v. Nhưng nếu bạn nghĩ rằng ngôn ngữ của bạn mạnh mẽ hơn, biểu cảm, v.v. hơn những ngôn ngữ khác, tại sao không sử dụng nó để viết thời gian chạy riêng của nó? Hoặc nếu bạn không nghĩ rằng ngôn ngữ của bạn bằng cách nào đó "tốt" hơn những ngôn ngữ khác, tại sao bạn lại gặp rắc rối khi thực hiện nó?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.