2009-02-26 36 views
117

Tôi đã đọc gần đây khoảng Stackless Python và dường như có nhiều ưu điểm so với villa cPython. Nó có tất cả những tính năng thú vị như đệ quy vô hạn, microthreads, continuations, vv và đồng thời nhanh hơn cPython (khoảng 10%, nếu the Python wiki là để được tin) tương thích với nó (ít nhất là 2.5, 2.6 và 3.0).Những hạn chế của Stackless Python là gì?

Tất cả các giao diện này gần như quá tốt là đúng. Tuy nhiên, TANSTAAFL, tôi không thấy nhiều sự nhiệt tình cho Stackless trong cộng đồng Python, và PEP 219 chưa bao giờ thành hiện thực. Tại sao vậy? Những hạn chế của Stackless là gì? Những bộ xương nào được giấu trong tủ quần áo của Stackless?

(Tôi biết Stackless không cung cấp đồng thời thực tế, chỉ là một cách dễ dàng hơn của chương trình theo cách đồng thời. Nó không thực sự làm phiền tôi.)

Trả lời

149

Tôi không biết nơi mà "Stackless nhanh hơn 10%" trên Wiki đến từ, nhưng sau đó một lần nữa tôi đã không bao giờ cố gắng để đo những con số hiệu suất. Tôi không thể nghĩ ra những gì Stackless làm để tạo sự khác biệt lớn.

Stackless là một công cụ tuyệt vời với một số vấn đề về tổ chức/chính trị.

Đầu tiên xuất phát từ lịch sử. Christian Tismer bắt đầu nói về những gì cuối cùng đã trở thành Stackless khoảng 10 năm trước. Anh có một ý tưởng về những gì anh muốn, nhưng đã có một thời gian khó giải thích những gì anh đang làm và tại sao mọi người nên sử dụng nó. Điều này một phần vì nền tảng của ông không được đào tạo CS về các ý tưởng như coroutines và bởi vì các bài thuyết trình và thảo luận của ông rất định hướng thực hiện, rất khó cho bất kỳ ai chưa từng tiếp cận sâu để hiểu cách sử dụng nó như một giải pháp vấn đề của họ.

Vì lý do đó, tài liệu ban đầu kém. Có một số mô tả về cách sử dụng nó, tốt nhất với những người đóng góp của bên thứ ba. Tại PyCon 2007, tôi đã nói chuyện về "Using Stackless" đã đi qua khá tốt, theo số liệu khảo sát của PyCon. Richard Tew đã thực hiện một công việc tuyệt vời để thu thập chúng, cập nhật stackless.com và duy trì phân phối khi các bản phát hành Python mới xuất hiện. Anh là nhân viên của CCP Games, nhà phát triển của EVE Online, sử dụng Stackless như một phần thiết yếu trong hệ thống chơi game của họ.

Trò chơi của ĐCSTQ cũng là ví dụ thực tế nhất mà mọi người sử dụng khi họ nói về Stackless. Các hướng dẫn chính cho Stackless là Grant Olson của "Introduction to Concurrent Programming with Stackless Python", đó cũng là trò chơi theo định hướng. Tôi nghĩ rằng điều này mang lại cho mọi người một ý tưởng sai lầm rằng Stackless là trò chơi theo định hướng, khi đó là nhiều hơn rằng các trò chơi được định hướng tiếp tục dễ dàng hơn.

Một khó khăn khác là mã nguồn.Ở dạng ban đầu, nó đòi hỏi phải thay đổi nhiều phần của Python, điều này khiến Guido van Rossum, người dẫn đầu của Python, cảnh giác. Một phần lý do, tôi nghĩ, là hỗ trợ cho cuộc gọi/cc mà sau này bị loại bỏ là "quá nhiều như hỗ trợ một goto khi có các hình thức cấp cao hơn tốt hơn." Tôi không chắc chắn về lịch sử này, vì vậy chỉ cần đọc đoạn này là "Stackless được sử dụng để đòi hỏi quá nhiều thay đổi."

Phiên bản sau không yêu cầu thay đổi, và Tismer tiếp tục đẩy để đưa nó vào Python. Trong khi có một số cân nhắc, lập trường chính thức (theo như tôi biết) là CPython không chỉ là triển khai Python mà còn có nghĩa là thực hiện tham chiếu, và nó sẽ không bao gồm chức năng Stackless bởi vì nó không thể được thực hiện bởi Jython hoặc Iron Python.

Có hoàn toàn không có kế hoạch cho "thay đổi quan trọng đối với cơ sở mã". Đó là báo giá và siêu liên kết tham chiếu từ Arafangion's (xem bình luận) là từ khoảng 2000/2001. Những thay đổi về cấu trúc từ lâu đã được thực hiện và đó là những gì tôi đã đề cập ở trên. Stackless vì nó bây giờ là ổn định và trưởng thành, chỉ với những điều chỉnh nhỏ cho cơ sở mã trong vài năm qua.

Giới hạn cuối cùng với Stackless - không có người ủng hộ mạnh mẽ cho Stackless. Tismer hiện đang tham gia sâu sắc với PyPy, là một triển khai Python cho Python. Ông đã thực hiện các chức năng Stackless trong PyPy và xem xét nó vượt trội hơn nhiều so với Stackless chính nó, và cảm thấy rằng PyPy là con đường của tương lai. Tew duy trì Stackless nhưng anh không quan tâm đến vận động. Tôi được coi là trong vai trò đó, nhưng không thể thấy làm thế nào tôi có thể kiếm được thu nhập từ nó.

Mặc dù nếu bạn muốn đào tạo trong Stackless, vui lòng contact me! :)

3

Tôi cũng quan tâm đến các câu trả lời ở đây. Tôi đã chơi một chút với Stackless và có vẻ như nó sẽ là một bổ sung vững chắc tốt cho Python chuẩn.

PEP 219 không đề cập đến những khó khăn tiềm ẩn khi gọi mã Python từ mã C, nếu Python muốn thay đổi sang một ngăn xếp khác. Sẽ cần phải có cách để phát hiện và ngăn chặn điều này (để tránh trashing C stack). Tôi nghĩ rằng điều này là có thể xử lý mặc dù, vì vậy tôi cũng tự hỏi tại sao Stackless phải đứng một mình.

+3

PEP 219 là 9 tuổi và hết hạn. Những khó khăn của việc "gọi mã Python từ mã C" chỉ trong việc thực hiện được thảo luận trong PEP, và không có trong Stackless. Tên của PEP ("Stackless Python") là một bit của một misnomer; nó đã lấy cảm hứng từ Stackless và thế là xong. –

4

Nếu tôi nhớ chính xác, Stackless được dự kiến ​​đưa vào CPython chính thức, nhưng tác giả của stackless nói với người CPython không làm như vậy, bởi vì anh ấy dự định thực hiện một số thay đổi đáng kể cho cơ sở mã - có lẽ anh ta muốn tích hợp được thực hiện sau khi dự án trưởng thành hơn.

+1

Nguồn?Tôi thấy điều này thú vị, nhưng tôi rõ ràng không thể tin bạn chỉ vì bạn đã nói như vậy. Tôi sẽ nhìn thằng ngốc nếu bạn đã sai và tôi bắt đầu nói về nó thú vị như thế nào. –

+2

Điểm tuyệt vời. Xin lỗi tôi không có tài liệu tham khảo, bởi vì nó đã được trong một cuộc trò chuyện irc trong #python trên freenode, tuy nhiên tôi đã quản lý để tìm một cuộc trò chuyện danh sách gửi thư cổ đại tại http://gnosis.cx/download/charming_python_10_outtakes.html mà cung cấp cho rất nhiều cái nhìn sâu sắc hơn về tình hình. – Arafangion

+0

Liên kết đó thực sự tuyệt vời. Nó trả lời rất nhiều câu hỏi của tôi. –

34

mất nhiều thời gian để tìm cuộc thảo luận này. Tại thời điểm đó thời gian tôi đã không được trên PyPy nhưng đã có một vụ 2 năm với psyco, cho đến khi sức khỏe dừng lại tất cả điều này khá đột ngột. Tôi hiện đang hoạt động trở lại và thiết kế phương thức thay thế - sẽ trình bày nó trên EuroPython 2012.

Hầu hết các câu lệnh của Andrew đều chính xác. Một số số điện thoại bổ sung nhỏ:

Stackless nhanh hơn đáng kể so với CPython, 10 năm trước, bởi vì tôi đã tối ưu hóa vòng lặp thông dịch viên. Vào thời điểm đó, Guido đã không sẵn sàng cho điều đó. Một vài năm sau, mọi người đã tối ưu hóa tương tự và thậm chí nhiều hơn và tốt hơn, làm cho Stackless chậm hơn một chút, như mong đợi.

Khi đưa vào: tốt, ban đầu tôi đã rất khôn ngoan và tin rằng Stackless là con đường để đi. Sau đó, khi nó gần như có thể để có được bao gồm, tôi bị mất quan tâm đến điều đó và ưa thích để cho nó ở lại theo cách này, một phần ra khỏi thất vọng, một phần để giữ quyền kiểm soát của Stackless.

Các đối số như "triển khai khác không thể làm điều đó" cảm thấy luôn luôn què trách với tôi, vì có những ví dụ khác mà đối số này cũng có thể được sử dụng. Tôi nghĩ mình nên quên đi điều đó và ở trong tình bạn tốt với Guido, có sự phân biệt của riêng tôi.

Khi đó mọi thứ đang thay đổi một lần nữa. Tôi đang làm việc trên PyPy và Stackless như một phần mở rộng Sẽ nói về điều đó đôi khi sau này

Chúc mừng - Chris

+0

Cảm ơn sự thấu hiểu, Chris. :) –

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