"PyPy là sự tái hiện của Python trong Python" là một cách khá sai lầm để mô tả PyPy, IMHO, mặc dù về mặt kỹ thuật là đúng.
Có hai phần chính của PyPy.
- Khung dịch thuật
- Thông dịch viên
Khung dịch là một trình biên dịch. Nó biên dịch mã RPython xuống C (hoặc các mục tiêu khác), tự động thêm vào các khía cạnh như bộ sưu tập rác và trình biên dịch JIT. Nó không thể xử lý mã Python tùy ý, chỉ RPython.
RPython là một tập hợp con của Python bình thường; tất cả mã RPython là mã Python, nhưng không phải là cách khác. Không có định nghĩa chính thức về RPython, vì về cơ bản RPython chỉ là "tập hợp con của Python có thể được dịch theo khung dịch của PyPy". Nhưng để được dịch, mã RPython phải được nhập tĩnh (các loại được suy ra, bạn không khai báo chúng, nhưng nó vẫn đúng một loại cho mỗi biến) và bạn không thể thực hiện những việc như khai báo / sửa đổi hàm / các lớp trong thời gian chạy hoặc.
Trình thông dịch sau đó là một trình thông dịch Python bình thường được viết bằng RPython.
Vì mã RPython là mã Python bình thường, bạn có thể chạy nó trên bất kỳ trình thông dịch Python nào. Nhưng không có tuyên bố tốc độ nào của PyPy đến từ việc chạy theo cách đó; đây chỉ là một chu kỳ kiểm tra nhanh, bởi vì việc dịch trình thông dịch mất nhiều thời gian.
Với sự hiểu biết đó, rõ ràng ngay lập tức rằng những suy đoán về PyPyPy hoặc PyPyPyPy thực sự không có ý nghĩa gì. Bạn có một thông dịch viên viết bằng RPython. Bạn dịch nó sang mã C thực thi Python nhanh chóng. Có quá trình dừng lại; không còn RPython để tăng tốc bằng cách xử lý lại.
Vì vậy, "Làm thế nào để PyPy có thể nhanh hơn CPython" cũng trở nên khá rõ ràng. PyPy có triển khai tốt hơn, bao gồm trình biên dịch JIT (nói chung nó không hoàn toàn nhanh như không có trình biên dịch JIT, điều đó có nghĩa là PyPy chỉ nhanh hơn đối với các chương trình dễ bị biên dịch JIT). CPython không bao giờ được thiết kế để trở thành một triển khai tối ưu hóa ngôn ngữ Python (mặc dù họ cố gắng biến nó thành một triển khai được tối ưu hóa cao , nếu bạn tuân theo sự khác biệt).
Điểm thực sự sáng tạo của dự án PyPy là họ không viết các lược đồ GC hoặc trình biên dịch JIT tinh vi bằng tay. Họ viết trình thông dịch tương đối đơn giản bằng RPython và với tất cả RPython ở mức thấp hơn Python, nó vẫn là ngôn ngữ thu thập rác hướng đối tượng, mức cao hơn nhiều so với C. Sau đó, khung dịch thuật sẽ tự động thêm các thứ như GC và JIT. Vì vậy, khung dịch thuật là rất lớnnỗ lực, nhưng nó cũng áp dụng tốt cho trình thông dịch python PyPy tuy nhiên họ thay đổi cách thực hiện, cho phép thử nghiệm nhiều hơn để cải thiện hiệu suất (mà không phải lo lắng về việc giới thiệu các lỗi của GC hoặc cập nhật trình biên dịch JIT để đối phó với các thay đổi). Điều đó cũng có nghĩa là khi họ bắt đầu triển khai trình thông dịch Python3, nó sẽ tự động nhận được các lợi ích tương tự. Và bất kỳ thông dịch viên nào khác được viết với khung PyPy (trong đó có một số ở các giai đoạn đánh bóng khác nhau). Và tất cả các thông dịch viên sử dụng khung PyPy sẽ tự động hỗ trợ tất cả các nền tảng được khung hỗ trợ.
Vì vậy, lợi ích thực sự của dự án PyPy là tách biệt (càng nhiều càng tốt) tất cả các phần của việc thực hiện một trình thông dịch độc lập với nền tảng hiệu quả cho một ngôn ngữ động. Và sau đó đưa ra một triển khai tốt của chúng ở một nơi, có thể được sử dụng lại trên nhiều phiên dịch viên. Đó không phải là một chiến thắng ngay lập tức như "chương trình Python của tôi chạy nhanh hơn bây giờ", nhưng đó là một triển vọng lớn cho tương lai.
Và nó có thể chạy chương trình Python của bạn nhanh hơn (có thể).