Tôi không nghĩ rằng có thể triển khai thông dịch viên cho ngôn ngữ đó (gọi A), sau đó chạy nó trên một trình thông dịch hiện có khác (gọi B) cho ngôn ngữ đó và thực hiện chương trình P này, và có P chạy trên (A chạy trên B) nhanh hơn P chạy trên B.
Mọi hoạt động của A sẽ phải được thực hiện với ít nhất một phép toán B. Vì vậy, ngay cả khi B là xấu xa và A, là tối ưu tốt, thực tế là A đang được chạy trên B có nghĩa là xấu B sẽ làm chậm A. Một số điện thoại của J , nơi JIT trình biên dịch tạo ra một số mã nhanh hơn trong thời gian chạy, và có P chạy trên (A chạy trên B) nhanh hơn P chạy trên B. Phần thời gian chạy của P không phải là JIT được biên dịch sẽ chậm hơn (nhiều hơn chậm hơn, thông thường) nhưng nếu trình biên dịch JIT xác định thành công các phần "nóng" của P và thực hiện chúng nhanh hơn B thì toàn bộ hệ thống có thể chạy nhanh hơn tổng thể.
Nhưng điều đó không thực sự thú vị. Cũng có thể triển khai trình biên dịch cho một ngôn ngữ trong ngôn ngữ đó (C), biên dịch nó bằng một trình biên dịch hiện có (D), và có ngôn ngữ trình biên dịch mới tạo mã nhanh hơn trình biên dịch gốc đã tạo ra. Tôi hy vọng điều đó không làm bạn giật mình; cần phải rõ ràng rằng tốc độ của mã được phát ra bởi D sẽ chỉ có ảnh hưởng đến thời gian thực hiện của C, không phải trên thời gian thực hiện của các chương trình khác được biên soạn với C.
Viết trình biên dịch bằng ngôn ngữ mà chúng biên dịch đã được được thực hiện trong nhiều thập kỷ (GCC được viết bằng C), và không thực sự liên quan đến câu hỏi thực sự mà tôi nghĩ bạn đang hỏi; JIT cũng không biên dịch một ngôn ngữ bằng chính nó. Trong cả hai trường hợp, việc thực hiện bên dưới là một thứ khác với ngôn ngữ bạn đang xem xét; thường là mã máy.
Tuy nhiên, nguồn câu hỏi của bạn là một quan niệm sai lầm. Trình thông dịch Python của PyPy không thực sự được triển khai bằng Python. Dự án PyPy có một thông dịch viên cho Python được viết bằng RPython. RPython là một tập hợp con của Python, được chọn để nó có thể được biên dịch một cách hiệu quả thành mã máy; như một ngôn ngữ RPython là nhiều hơn như Java với suy luận kiểu và khối thụt lề thay vì niềng răng. Dự án PyPy cũng có một trình biên dịch cho RPython được viết bằng Python, và có khả năng (chủ yếu) tự động thêm trình biên dịch JIT vào bất kỳ trình biên dịch nào mà nó biên dịch.
Khi bạn đang sử dụng trình thông dịch PyPy trong sản xuất, bạn đang sử dụng trình thông dịch mã máy được biên dịch từ các nguồn RPython, giống như khi bạn đang sử dụng trình thông dịch CPython, bạn sử dụng trình thông dịch mã máy được biên dịch từ Mã nguồn C. Nếu bạn thực thi trình thông dịch PyPy trên một trình thông dịch Python khác (bạn có thể làm vì mã RPython hợp lệ cũng là mã Python hợp lệ; nhưng không phải là theo cách khác), thì nó chạy chậm hơn rất nhiều so với trình thông dịch CPython.
Tôi không biết pyton, nhưng để thực hiện JVM trong java, bạn sẽ cần phải viết nhiều phương thức gốc bằng ngôn ngữ khác (ví dụ: C++). – vulkanino
Tại sao không được chấp nhận? – Marcin
Xin lỗi. Tôi chỉ làm nó để xem xét câu trả lời mới nhất cho một chấp nhận có thể. Nhìn qua câu trả lời mới ngay bây giờ, nếu tốt hơn tôi sẽ chấp nhận, nếu không tôi sẽ phản ứng trước đó. – ApprenticeHacker