2009-03-06 27 views
28

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?

+1

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

Trả lời

38

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ó.

+0

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

+4

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

+2

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

4

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.)

+0

Tôi nghĩ bạn có nghĩa là mã nguồn gốc chứ không phải là thực thi gốc. – fuzzyman

+0

mã thực thi gốc ;-) – vartec

+2

Hmmm ... và không, PyPy không biên dịch các chương trình Python thành tệp thực thi gốc, điều đó không chính xác. – fuzzyman

0

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.

0

khả năng tương thích đa nền tảng

5

Đâ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.

+0

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) –

Các vấn đề liên quan