Từ những gì tôi đã xem và đọc trên blog, PyPy là một dự án rất đầy tham vọng. Một số lợi thế nó sẽ mang lại cho bảng trên anh chị em của nó (CPython, Jython, và IronPython) là gì? Có tốc độ, khả năng tương thích đa nền tảng (bao gồm cả nền tảng di động), khả năng sử dụng phần mở rộng c không có GIL, hay đây là một bài tập kỹ thuật về những gì có thể làm được?PyPy cung cấp những gì cho CPython, Jython và IronPython?
Trả lời
PyPy thực sự là hai dự án:
- Một thông dịch viên compiler toolchain cho phép bạn viết các trình thông dịch trong RPython (một tập con tĩnh của Python) và có trình biên dịch phiên dịch đa nền tảng d độc lập, cho JVM, cho .NET (vv)
- An thực hiện Python trong RPython
Hai dự án này cho phép nhiều thứ.
- Duy trì Python Python là dễ dàng hơn nhiều so với việc duy trì nó trong C
- Từ một codebase duy nhất bạn có thể tạo ra thông dịch Python chạy trên JVM, NET và độc lập - thay vì phải triển khai nhiều hơi không tương thích
- một phần của trình biên dịch toolchain bao gồm một máy phát điện JIT thực nghiệm (bây giờ trong hiện thân thứ năm của nó và bắt đầu làm việc thực sự tốt) - mục tiêu là dành cho một JITed PyPy để chạy nhiều nhanh hơn CPython
- Đó là mu ch dễ dàng hơn để thử nghiệm với các tính năng ngôn ngữ cơ bản - như loại bỏ GIL, thu gom rác tốt hơn, tích hợp ngăn xếp và như vậy trên
Vì vậy, thực sự có rất nhiều lý do khiến PyPy thú vị và cuối cùng cũng bắt đầu sống đến tất cả các lời hứa của nó.
Tôi muốn thêm một cái vào danh sách tuyệt vời này: không cần phải lấy phiên bản mới của thư viện Python của bạn (tức là phần mở rộng C) mỗi khi bạn di chuyển đến phiên bản mới .X. Thật là một chiến thắng lớn. – Brandon
PyPy sẽ cải thiện tình huống bằng phần mở rộng C như thế nào? Trong thực tế, phần mở rộng C là một trong những nhược điểm chính (hiện tại) với PyPy - chúng không hoạt động chút nào trừ khi chúng được chuyển đặc biệt. – fuzzyman
Với tốc độ bổ sung từ PyPy JIT (đặc biệt nếu chúng có thể áp dụng hiệu quả cho mã 'ctypes'), sẽ có ít hơn đáng kể các phần mở rộng C trong hỗn hợp ở vị trí đầu tiên. – ncoghlan
Tính năng quan trọng nhất dĩ nhiên là trình biên dịch JIT. Trong các tệp CPython được biên dịch sang bytecode (.pyc
) hoặc bytecode được tối ưu hóa (.pyo
) và sau đó được giải thích. Với PyPy chúng sẽ được biên dịch thành mã gốc. PyPy cũng bao gồm Stackless Python các bản vá lỗi, bao gồm ấn tượng features (tuần tự hóa công việc, chuỗi ánh sáng, v.v.)
Trong trường hợp đó Python sẽ thực hiện nhanh như bất kỳ triển khai nào khác.
Lợi thế là việc triển khai các tính năng mới dễ dàng hơn nhiều. Người ta có thể thấy điều này ngày hôm nay bằng cách quan sát thư viện. Thông thường các module được viết bằng Python đầu tiên và sau đó dịch sang C.
khả năng tương thích đa nền tảng
Có
Đây là một link để trình bày một trong những tác giả PyPy đưa ra tại PyCon 2009. Nó rất thông tin.
Ngoài ra kiểm tra torrent của EuroPython 2012 cuộc đàm phán, một vài trong số đó là trên PyPy (và stackless, mà bây giờ là một phần của PyPy) –
- 1. Một số chiến lược để viết mã python hoạt động trong CPython, Jython và IronPython
- 2. CPython hoặc IronPython?
- 3. Các tập lệnh CPython, IronPython, Jython có tương thích với nhau không?
- 4. IronPython ScriptRuntime tương đương với CPython PYTHONPATH
- 5. khả năng tương thích giữa CPython và IronPython cPickle
- 6. PyPy - Làm sao nó có thể đánh bại CPython?
- 7. Visual Studio cung cấp những gì Monodevelop thiếu?
- 8. Tại sao C# và VB có Generics? Họ cung cấp những lợi ích gì? Generics, FTW
- 9. Sự khác nhau giữa Python vs Jython vs IronPython vs wxPython là gì?
- 10. Cách đơn giản nhất để cung cấp/tiêu thụ các dịch vụ web trong jython là gì?
- 11. CPython - Nội bộ, những gì được lưu trữ trên ngăn xếp và đống?
- 12. Stackless trong PyPy và PyPy + greenlet - sự khác biệt
- 13. Unicode, cụm từ thông dụng và PyPy
- 14. Sass cung cấp những lợi thế gì hơn CSS thông thường?
- 15. WPF vẫn phải cung cấp gì cho Silverlight 4?
- 16. Thư viện tùy chọn trong bản dựng OpenCV cung cấp những gì?
- 17. pgAdmin mang lại cho tôi những lỗi: không có mật khẩu được cung cấp
- 18. Lithium cung cấp những tính năng và cải tiến mới nào trên CakePHP?
- 19. IronPython so sánh Python gốc. Những gì tôi có thể mong đợi từ cái đầu tiên?
- 20. Có ai đã sử dụng GWT và có thể nói nó thực sự cung cấp những gì nó hứa hẹn?
- 21. cài đặt zeromq dưới pypy
- 22. IronPython và ASP.NET
- 23. Ví dụ về Nhà cung cấp nội dung và Nhà cung cấp nội dung?
- 24. PyPy - SWIG - Kết hợp QuickFix
- 25. Nhà cung cấp OpenID cung cấp thông tin cá nhân nào cho người tiêu dùng?
- 26. Nhà cung cấp thành viên Active Directory và Nhà cung cấp hồ sơ SQL
- 27. Cung cấp kho khóa cho webService client
- 28. CPython là phiên dịch viên bytecode?
- 29. IronPython và pdb.set_trace()
- 30. fast-ish python/jython IPC?
FWIW bạn đã có thể sử dụng phần mở rộng c trên CPython không có GIL. Đó là mã Python bình thường (khi chạy với các luồng) thực sự bị GIL. – fuzzyman