Apa kekurangan dari Stackless Python? [Tutup]

127

Saya telah membaca baru-baru ini tentang Stackless Python dan tampaknya memiliki banyak keunggulan dibandingkan dengan vanilla cPython. Ia memiliki semua fitur keren seperti rekursi tak terbatas, microthreads, lanjutan, dll. Dan pada saat yang sama lebih cepat daripada cPython (sekitar 10%, jika wiki Python dipercaya) dan kompatibel dengan itu (setidaknya versi 2.5, 2.6 dan 3.0).

Semua ini terlihat hampir terlalu bagus untuk menjadi kenyataan. Namun, TANSTAAFL , saya tidak melihat banyak antusiasme untuk Stackless di antara komunitas Python, dan PEP 219 tidak pernah terwujud. Mengapa demikian? Apa kekurangan dari Stackless? Kerangka apa yang disembunyikan di lemari Stackless?

(Saya tahu Stackless tidak menawarkan konkurensi nyata, hanya cara pemrograman yang lebih mudah secara bersamaan. Itu tidak terlalu mengganggu saya.)

Ryszard Szopa
sumber

Jawaban:

165

Saya tidak tahu dari mana asal "Stackless 10% lebih cepat" dari Wiki, tetapi saya tidak pernah mencoba mengukur angka-angka kinerja itu. Saya tidak bisa memikirkan apa yang dilakukan Stackless untuk membuat perbedaan sebesar itu.

Stackless adalah alat yang luar biasa dengan beberapa masalah organisasi / politik.

Yang pertama berasal dari sejarah. Christian Tismer mulai berbicara tentang apa yang akhirnya menjadi Stackless sekitar 10 tahun yang lalu. Dia punya ide tentang apa yang dia inginkan, tetapi kesulitan menjelaskan apa yang dia lakukan dan mengapa orang harus menggunakannya. Ini sebagian karena latar belakangnya tidak memiliki pelatihan CS tentang ide-ide seperti coroutine dan karena presentasi dan diskusinya sangat berorientasi pada implementasi, yang sulit bagi siapa pun yang belum terlalu dalam untuk memahami bagaimana menggunakannya sebagai solusi untuk Masalah mereka.

Karena alasan itu, dokumentasi awal buruk. Ada beberapa deskripsi tentang cara menggunakannya, dengan yang terbaik dari kontributor pihak ketiga. Di PyCon 2007 saya memberi ceramah tentang " Menggunakan Stackless " yang berjalan cukup baik, menurut angka survei PyCon. Richard Tew telah melakukan pekerjaan luar biasa mengumpulkan ini, memperbarui stackless.com , dan mempertahankan distribusi ketika rilis Python baru muncul. Dia adalah karyawan Game PKC , pengembang EVE Online, yang menggunakan Stackless sebagai bagian penting dari sistem permainan mereka.

Game CCP juga merupakan contoh dunia nyata terbesar yang digunakan orang ketika mereka berbicara tentang Stackless. Tutorial utama untuk Stackless adalah Grant Olson " Pengantar Pemrograman Bersamaan dengan Stackless Python ", yang juga berorientasi pada game. Saya pikir ini memberi orang ide miring bahwa Stackless berorientasi pada game, saat itu lebih banyak game yang lebih mudah berorientasi pada kelanjutan.

Kesulitan lain adalah kode sumber. Dalam bentuk aslinya diperlukan perubahan ke banyak bagian Python, yang membuat Guido van Rossum, pemimpin Python, waspada. Sebagian alasannya, saya pikir, adalah dukungan untuk panggilan / cc yang kemudian dihapus sebagai "terlalu banyak seperti mendukung goto ketika ada bentuk tingkat tinggi yang lebih baik." Saya tidak yakin tentang sejarah ini, jadi baca saja paragraf ini sebagai "Stackless dulu membutuhkan terlalu banyak perubahan."

Rilis selanjutnya tidak memerlukan perubahan, dan Tismer terus mendorong untuk dimasukkan dalam Python. Meskipun ada beberapa pertimbangan, sikap resmi (sejauh yang saya tahu) adalah bahwa CPython tidak hanya implementasi Python tetapi juga dimaksudkan sebagai implementasi referensi, dan itu tidak akan mencakup fungsi Stackless karena tidak dapat diimplementasikan oleh Jython atau Iron Python.

Sama sekali tidak ada rencana untuk " perubahan signifikan pada basis kode ". Tautan kutipan dan referensi dari Arafangion (lihat komentar) berasal dari sekitar 2000/2001. Perubahan struktural telah lama dilakukan, dan itulah yang saya sebutkan di atas. Stackless seperti sekarang stabil dan matang, dengan hanya sedikit perubahan pada basis kode selama beberapa tahun terakhir.

Satu batasan terakhir dengan Stackless - tidak ada pendukung kuat untuk Stackless. Tismer sekarang sangat terlibat dengan PyPy , yang merupakan implementasi dari Python untuk Python. Dia telah mengimplementasikan fungsi Stackless di PyPy dan menganggapnya jauh lebih unggul daripada Stackless itu sendiri, dan merasa bahwa PyPy adalah jalan masa depan. Tew mempertahankan Stackless tetapi dia tidak tertarik pada advokasi. Saya dianggap berada di peran itu, tetapi tidak bisa melihat bagaimana saya bisa mendapat penghasilan darinya.

Meskipun jika Anda ingin pelatihan di Stackless, jangan ragu untuk menghubungi saya ! :)

Andrew Dalke
sumber
39

butuh waktu lama untuk menemukan diskusi ini. Pada saat itu saya tidak menggunakan PyPy tetapi memiliki hubungan 2 tahun dengan psyco, sampai kesehatan menghentikan semua ini dengan sangat tiba-tiba. Saya sekarang aktif lagi dan merancang pendekatan alternatif - akan menyajikannya di EuroPython 2012.

Sebagian besar pernyataan Andrews benar. Beberapa tambahan kecil:

Stackless secara signifikan lebih cepat daripada CPython, 10 tahun yang lalu, karena saya mengoptimalkan loop juru bahasa. Pada saat itu, Guido belum siap untuk itu. Beberapa tahun kemudian, orang melakukan optimasi yang sama dan bahkan lebih banyak dan lebih baik, yang membuat Stackless sedikit lebih lambat, seperti yang diharapkan.

Termasuk: well, pada awalnya saya sangat memaksa dan yakin bahwa Stackless adalah jalan yang harus ditempuh. Kemudian, ketika hampir mungkin untuk diikutsertakan, saya kehilangan minat pada hal itu dan lebih suka membiarkannya tetap seperti ini, sebagian karena frustrasi, sebagian untuk tetap mengendalikan Stackless.

Argumen seperti "implementasi lain tidak dapat melakukannya" terasa selalu lemah bagi saya, karena ada contoh lain di mana argumen ini juga dapat digunakan. Saya pikir saya lebih baik melupakannya dan tetap bersahabat dengan Guido, memiliki distro saya sendiri.

Sementara itu segalanya berubah lagi. Saya sedang mengerjakan PyPy dan Stackless sebagai ekstensi. Akan membicarakannya kadang-kadang nanti

Cheers - Chris

tismer
sumber
5

Jika saya ingat dengan benar, Stackless dijadwalkan untuk dimasukkan ke dalam CPython resmi, tetapi penulis stackless mengatakan kepada orang-orang CPython untuk tidak melakukannya, karena ia berencana untuk melakukan beberapa perubahan signifikan pada basis kode - mungkin ia ingin integrasi dilakukan nanti ketika proyek itu lebih matang.

Arafangion
sumber
1
Sumber? Saya menemukan ini menarik, tetapi saya jelas tidak percaya Anda hanya karena Anda mengatakannya. Saya akan terlihat bodoh jika Anda salah dan saya mulai berbicara tentang betapa menariknya itu.
Devin Jeanpierre
2
Poin luar biasa. Maaf saya tidak memiliki referensi, karena itu dalam percakapan irc di #python on freenode, namun saya berhasil menemukan percakapan milis kuno di gnosis.cx/download/charming_python_10_outtakes.html yang memberikan lebih banyak wawasan ke situasi.
Arafangion
Tautan itu sangat bagus. Itu menjawab banyak pertanyaan saya.
Ryszard Szopa
Tautan itu berusia 8 atau 9 tahun (berbicara tentang Python 2.1) dan diskusi apa pun tentang perubahan di masa mendatang pada basis kode telah lama terjadi. Stackless Python stabil dan matang, dan tidak ada rencana untuk "perubahan signifikan pada basis kode."
Andrew Dalke
dalke: Begitulah adanya - jika ada perubahan besar pada keputusan untuk mengintegrasikan perubahan, jangan ragu untuk membuat referensi yang lebih baru, namun saya menduga bahwa sumber kuno yang saya sediakan hanya memulai tren untuk memiliki varian yang terpisah python, misalnya, JPython, IronPytion ..
Arafangion
3

Saya juga tertarik dengan jawabannya di sini. Saya telah bermain sedikit dengan Stackless dan sepertinya itu akan menjadi tambahan yang bagus untuk standar Python.

PEP 219 menyebutkan potensi kesulitan dengan memanggil kode Python dari kode C, jika Python ingin mengubah ke tumpukan yang berbeda. Perlu ada cara untuk mendeteksi dan mencegah hal ini (untuk menghindari membuang tumpukan C). Saya pikir ini bisa ditelusuri, jadi saya juga bertanya-tanya mengapa Stackless harus berdiri sendiri.

Greg Hewgill
sumber
3
PEP 219 berusia 9 tahun dan benar-benar ketinggalan zaman. Kesulitan "memanggil kode Python dari kode C" hanya dalam implementasi yang dibahas dalam PEP, dan bukan di Stackless. Nama PEP ("Stackless Python") sedikit keliru; itu mengambil inspirasi dari Stackless dan hanya itu.
Andrew Dalke