Tại sao PyPy không có trong Python chuẩn?


165

Tôi đã xem xét PyPy và tôi chỉ tự hỏi tại sao nó không được chấp nhận vào các bản phân phối Python chính. Những thứ như biên dịch JIT và dung lượng bộ nhớ thấp hơn có cải thiện đáng kể tốc độ của tất cả mã Python không?

Nói tóm lại, những nhược điểm chính của PyPy khiến nó vẫn là một dự án riêng biệt là gì?


4
Ngoài ra, pypy không có hỗ trợ cho numpy, chưa. morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html
rthiago

Và hỗ trợ numpy chỉ làm trầy xước bề mặt của những gì ứng dụng máy tính khoa học sẽ cần trước khi chuyển sang PyPy. Dưới đây là một số suy nghĩ chung của tác giả numpy ban đầu: kỹ thuật khám
Stuart Berg

3
Tôi nghĩ những câu trả lời và bình luận này đã lỗi thời
Marlon Abeykoon

Câu trả lời:


249

PyPy không phải là một nhánh của CPython, vì vậy nó không bao giờ có thể được sáp nhập trực tiếp vào CPython.

Về mặt lý thuyết, cộng đồng Python có thể áp dụng PyPy trên toàn cầu, PyPy có thể được thực hiện tham chiếu và CPython có thể bị ngừng. Tuy nhiên, PyPy có điểm yếu riêng:

  • CPython dễ dàng tích hợp với các mô-đun Python được viết bằng C, theo truyền thống, cách các ứng dụng Python đã xử lý các tác vụ đòi hỏi nhiều CPU (ví dụ như dự án SciPy).
  • Bản thân bước biên dịch PyPy JIT tiêu tốn thời gian của CPU - chỉ qua việc chạy lặp lại mã được biên dịch mà nó trở nên nhanh hơn về tổng thể. Điều này có nghĩa là thời gian khởi động có thể cao hơn và do đó PyPy không nhất thiết phải hiệu quả để chạy mã keo hoặc các tập lệnh tầm thường.
  • Hành vi của PyPy và CPython không giống nhau về mọi phương diện, đặc biệt là khi nói đến "chi tiết thực hiện" (hành vi không được chỉ định bởi ngôn ngữ nhưng vẫn quan trọng ở mức độ thực tế).
  • CPython chạy trên nhiều kiến ​​trúc hơn PyPy và đã được điều chỉnh thành công để chạy trong các kiến ​​trúc nhúng theo những cách có thể không thực tế đối với PyPy.
  • Kế hoạch đếm tham chiếu của CPython để quản lý bộ nhớ được cho là có tác động hiệu suất có thể dự đoán được nhiều hơn các hệ thống GC khác nhau của PyPy, mặc dù điều này không nhất thiết đúng với tất cả các chiến lược "thuần túy".
  • PyPy chưa hỗ trợ đầy đủ Python 3.x, mặc dù đó là một mục công việc đang hoạt động.

PyPy là một dự án tuyệt vời, nhưng tốc độ thời gian chạy đối với các tác vụ nặng về CPU không phải là tất cả, và trong nhiều ứng dụng, đó là điều ít quan tâm nhất. Chẳng hạn, Django có thể chạy trên PyPy và điều đó giúp tạo khuôn mẫu nhanh hơn, nhưng trình điều khiển cơ sở dữ liệu của CPython nhanh hơn PyPy; cuối cùng, việc thực hiện nào hiệu quả hơn phụ thuộc vào nơi tắc nghẽn trong một ứng dụng nhất định.

Một ví dụ khác: bạn nghĩ PyPy sẽ rất tuyệt cho các trò chơi, nhưng hầu hết các chiến lược của GC như những chiến lược được sử dụng trong PyPy đều gây ra sự hốt hoảng đáng chú ý. Đối với CPython, hầu hết các trò chơi sử dụng nhiều CPU đều được chuyển đến thư viện PyGame, điều mà PyPy không thể tận dụng vì PyGame chủ yếu được triển khai dưới dạng tiện ích mở rộng C (mặc dù: pygame-cffi). Tôi vẫn nghĩ PyPy có thể là một nền tảng tuyệt vời cho các trò chơi, nhưng tôi chưa bao giờ thấy nó thực sự được sử dụng.

PyPy và CPython có cách tiếp cận hoàn toàn khác nhau đối với các câu hỏi thiết kế cơ bản và tạo ra sự đánh đổi khác nhau, vì vậy không ai "tốt hơn" so với người khác trong mọi trường hợp.


4
Sự thật là PyPy không phù hợp để chạy các tập lệnh. Thời gian khởi động của nó khá giống với CPython và tốc độ giải thích của nó là tương tự nhau.
Lucian

6
Điều đáng chú ý là PyPy giờ đây đi kèm với một GC tăng dần, và có khả năng phù hợp hơn cho các trò chơi như một hệ quả.
porgarmingduod

63

Đối với một, nó không tương thích 100% với Python 2.x và chỉ hỗ trợ sơ bộ cho 3.x.

Đây cũng không phải là thứ có thể hợp nhất - Việc triển khai Python do PyPy cung cấp được tạo bằng cách sử dụng một khung công tác mà họ đã tạo, cực kỳ hay, nhưng cũng hoàn toàn khác biệt với triển khai CPython hiện có. Nó sẽ phải là một sự thay thế hoàn toàn.

Có một số khác biệt rất cụ thể giữa PyPy và CPython, một vấn đề lớn là cách các mô-đun mở rộng được hỗ trợ - điều mà nếu bạn muốn vượt ra ngoài thư viện tiêu chuẩn, là một vấn đề lớn.

Cũng đáng lưu ý rằng PyPy không phải là phổ biến nhanh hơn.


54

Xem video này của Guido van Rossum . Anh ấy nói về cùng một câu hỏi mà bạn đã hỏi vào lúc 12 phút 33 giây.

Điểm nổi bật:

  • thiếu khả năng tương thích Python 3
  • thiếu hỗ trợ mở rộng
  • không thích hợp làm mã keo
  • tốc độ không phải là tất cả

Rốt cuộc, anh là người quyết định ...


3
+1 cho liên kết VỚI liên kết trực tiếp đến phần có liên quan của video! Cũng +1 cho cuộc thăm dò không chính thức của Guido van Rossum "có bao nhiêu người đang sử dụng PyPy trong sản xuất? ... không có tay? Ho , tôi đoán vẫn còn hy vọng [cho CPython]."
Trevor Boyd Smith

15

Một lý do có thể là theo trang web PyPy , hiện tại nó chỉ chạy trên kiến ​​trúc Intel x86 32 và 64 bit, trong khi CPython cũng chạy trên các nền tảng khác. Điều này có thể là do cải tiến tốc độ dành riêng cho nền tảng trong PyPy. Mặc dù tốc độ là một điều tốt, mọi người thường muốn việc triển khai ngôn ngữ càng "độc lập với nền tảng" càng tốt.


6
Lưu ý rằng phụ trợ ARM là "gần như" và phụ trợ PowerPC là WIP. Cũng lưu ý rằng điều này chỉ đề cập đến trình biên dịch JIT và chuyển JIT sang kiến ​​trúc mới chỉ yêu cầu triển khai trình tạo mã cho IR tương đối đơn giản và ở mức độ thấp, không có gì hơn.

1
Kể từ năm 2018, PyPy hiện chạy trên nhiều kiến ​​trúc x86 (32/64 bit trên Linunx, Windows, MacOS và BSD), nhưng cũng trên Linux, phần cứng ARM mới hơn (ARMv6 hoặc ARMv7, với VFPv3), lớn và nhỏ các biến thể của PPC64 và s390x.
Frédéric Grosshans

7

Tôi khuyên bạn nên xem bài phát biểu này của David Beazley để hiểu thêm. Nó trả lời câu hỏi của bạn bằng cách đưa ra sự rõ ràng về bản chất & sự phức tạp của PyPy.


6

Ngoài tất cả những gì đã nói ở đây, PyPy gần như không vững chắc như CPython về các lỗi. Với SymPy, chúng tôi đã tìm thấy khoảng một tá lỗi trong PyPy trong vài năm qua, cả trong các phiên bản được phát hành và trong các đêm.

Mặt khác, chúng tôi chỉ tìm thấy một lỗi trong CPython và đó là trong một bản phát hành trước.

Ngoài ra, đừng giảm giá khi thiếu hỗ trợ Python 3. Không ai trong cộng đồng Python cốt lõi thậm chí quan tâm đến Python 2 nữa. Họ đang nghiên cứu những thứ lớn tiếp theo trong Python 3.4, đây sẽ là bản phát hành lớn thứ năm của Python 3. Các anh chàng PyPy vẫn chưa nhận được một trong số họ. Vì vậy, họ đã có một số bắt kịp để làm trước khi họ có thể bắt đầu trở thành đối thủ.

Đừng hiểu lầm tôi. PyPy thật tuyệt vời. Nhưng nó vẫn còn lâu mới tốt hơn CPython theo nhiều cách rất quan trọng.

Và nhân tiện, nếu bạn sử dụng SymPy trong PyPy, bạn sẽ không thấy dấu chân bộ nhớ nhỏ hơn (hoặc tăng tốc). Xem https://bitbucket.org/pypy/pypy/issues/1447/ .


2
Kể từ năm 2018, tôi có thể xác nhận rằng tôi đã thấy sự tăng tốc gần như là một thứ tự cường độ trong các cách sử dụng khác nhau
Frédéric Grosshans

1
@ FrédéricGrosshans thú vị. Tôi sẽ phải thử điểm chuẩn lại.
asmeker
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.