Stackless Python'un dezavantajları nelerdir? [kapalı]


127

Son zamanlarda Stackless Python hakkında bir şeyler okudum ve vanilya cPython'a kıyasla birçok avantajı var gibi görünüyor. Sonsuz özyineleme, mikro iş parçacığı, süreklilik vb. Gibi tüm bu harika özelliklere sahiptir ve aynı zamanda cPython'dan daha hızlıdır ( Python wiki'ye inanılacaksa yaklaşık% 10 ) ve onunla uyumludur (en azından sürüm 2.5, 2.6 ve 3.0).

Bütün bunlar gerçek olamayacak kadar iyi görünüyor. Ancak, TANSTAAFL , Python topluluğu arasında Stackless için çok fazla heves görmüyorum ve PEP 219 hiçbir zaman gerçekleşmedi. Neden? Stackless'ın dezavantajları nelerdir? Stackless'ın dolabında hangi iskeletler saklı?

(Stackless'in gerçek eşzamanlılık sunmadığını biliyorum, sadece eşzamanlı yoldan daha kolay bir programlama yolu. Bu beni gerçekten rahatsız etmiyor.)

Yanıtlar:


165

Wiki'deki "Stackless% 10 daha hızlı" ın nereden geldiğini bilmiyorum, ama yine de bu performans sayılarını ölçmeyi hiç denemedim. Stackless'in bu kadar büyük bir fark yaratmak için ne yaptığını düşünemiyorum.

Stackless, çeşitli organizasyonel / politik sorunları olan harika bir araçtır.

İlki tarihten geliyor. Christian Tismer, yaklaşık 10 yıl önce sonunda Stackless olan şey hakkında konuşmaya başladı. Ne istediğine dair bir fikri vardı ama ne yaptığını ve insanların bunu neden kullanması gerektiğini açıklamakta zorlandı. Bunun nedeni kısmen arka planının koroutinler gibi fikirlerle ilgili bilgisayar bilimleri eğitimi almamış olması ve sunumlarının ve tartışmalarının çok uygulama odaklı olmasından kaynaklanıyor. onların problemleri.

Bu nedenle, ilk belgeler zayıftı. Üçüncü taraf katılımcılardan en iyi şekilde nasıl kullanılacağına dair bazı açıklamalar vardı. PyCon 2007'de PyCon anket numaralarına göre oldukça iyi geçen " Stackless Kullanımı " üzerine bir konuşma yaptım. Richard Tew bunları toplamak, stackless.com'u güncellemek ve yeni Python sürümleri çıktığında dağıtımı sürdürmekle harika bir iş çıkardı. O , Stackless'i oyun sistemlerinin önemli bir parçası olarak kullanan EVE Online'ın geliştiricileri olan CCP Games'in bir çalışanı .

ÇKP oyunları aynı zamanda insanların Stackless hakkında konuşurken kullandıkları en büyük gerçek dünya örneğidir. Stackless için ana öğretici , yine oyun odaklı olan Grant Olson'un " Stackless Python ile Eşzamanlı Programlamaya Giriş " dir. Bence bu, insanlara Stackless'in oyun odaklı olduğu konusunda çarpık bir fikir veriyor, oyunların daha kolay devam odaklı olduğu durumlarda.

Bir başka zorluk da kaynak koddu. Orijinal biçiminde, Python'un birçok yerinde değişiklik yapılması gerekti ve bu da Python lideri Guido van Rossum'u ihtiyatlı hale getirdi. Bence nedeninin bir kısmı, daha sonra "daha yüksek seviyeli formlar olduğunda bir gitmeyi desteklemek gibi" olarak kaldırılan çağrı / cc desteğiydi. Bu tarih hakkında emin değilim, bu yüzden bu paragrafı "Stackless eskiden çok fazla değişiklik gerektiriyordu" şeklinde okuyun.

Daha sonraki sürümler değişiklikleri gerektirmedi ve Tismer, Python'a dahil edilmesi için zorlamaya devam etti. Bazı düşünceler olsa da, resmi duruş (bildiğim kadarıyla) CPython'un sadece bir Python uygulaması olmadığı, aynı zamanda bir referans uygulaması olduğu ve Jython tarafından uygulanamadığı için Stackless işlevselliğini içermeyeceği yönünde. veya Demir Python.

" Kod tabanında önemli değişiklikler " için kesinlikle hiçbir plan yoktur . Arafangion'un (yoruma bakınız) alıntı ve referans köprüsü kabaca 2000 / 2001'den alınmıştır. Yapısal değişiklikler uzun zamandır yapıldı ve yukarıda bahsettiğim şey bu. Şu anda olduğu gibi yığınsız, kararlı ve olgun, son birkaç yılda kod tabanında yalnızca küçük değişiklikler var.

Stackless ile son bir sınırlama - Stackless'ın güçlü bir savunucusu yoktur. Tismer artık Python için Python'un bir uygulaması olan PyPy ile derinlemesine ilgileniyor . PyPy'de Stackless işlevselliğini uyguladı ve Stackless'in kendisinden çok daha üstün olduğunu düşünüyor ve PyPy'nin geleceğin yolu olduğunu düşünüyor. Tew, Stackless'ı sürdürür ancak savunuculukla ilgilenmez. O rolde olmayı düşündüm ama bundan nasıl gelir elde edebileceğimi göremedim.

Stackless'ta eğitim almak istiyorsanız, benimle iletişime geçmekten çekinmeyin ! :)


39

bu tartışmayı bulmak oldukça uzun sürdü. O zamanlar PyPy'de değildim ama psyco ile 2 yıllık bir ilişkim vardı, ta ki sağlık bunu aniden durdurana kadar. Şimdi tekrar aktifim ve alternatif bir yaklaşım tasarlıyorum - bunu EuroPython 2012'de sunacağım.

Andrews ifadelerinin çoğu doğrudur. Bazı küçük eklemeler:

Stackless, 10 yıl önce CPython'dan önemli ölçüde daha hızlıydı çünkü yorumlayıcı döngüsünü optimize ettim. O sırada Guido buna hazır değildi. Birkaç yıl sonra, insanlar benzer optimizasyonları ve daha da iyilerini yaptılar, bu da Stackless'i beklendiği gibi biraz daha yavaş hale getiriyor.

Dahil etme konusunda: başlangıçta çok saldırgandım ve Stackless'in doğru yol olduğuna ikna oldum. Daha sonra, dahil edilmek neredeyse mümkün olduğunda, buna olan ilgimi kaybettim ve kısmen Stackless'in kontrolünü elinde tutmak için, kısmen hayal kırıklığından bu şekilde kalmasına izin vermeyi tercih ettim.

Bu argümanın kullanılabileceği başka örnekler de olduğundan, "diğer uygulamalar bunu yapamaz" gibi argümanlar bana her zaman kötü geldi. Bunu unutup Guido ile iyi bir arkadaşlık içinde kalmam, kendi dağıtımımla daha iyi olur diye düşündüm.

Bu arada işler yeniden değişiyor. PyPy ve Stackless üzerinde çalışıyorum bir uzantı olarak bunun hakkında bazen daha sonra konuşacağım

Şerefe - Chris


5

Doğru hatırlıyorsam, Stackless resmi CPython'a dahil edilmek üzere planlanmıştı, ancak stackless'ın yazarı CPython çalışanlarına bunu yapmamalarını söyledi çünkü kod tabanında bazı önemli değişiklikler yapmayı planlıyordu - muhtemelen entegrasyonun daha sonra yapılmasını istiyordu. proje daha olgundu.


1
Kaynak? Bunu ilginç buluyorum, ama öyle dedin diye sana inanamıyorum. Hatalı olsaydın aptal gibi görünürdüm ve ne kadar ilginç olduğundan bahsetmeye başladım.
Devin Jeanpierre

2
Mükemmel nokta. Maalesef referansım yok, çünkü freenode üzerinde #python'da bir irc görüşmesindeydi, ancak gnosis.cx/download/charming_python_10_outtakes.html adresinde eski bir posta listesi yazışması bulmayı başardım ve bu da durum.
Arafangion

Bu bağlantı gerçekten harika. Birçok soruma cevap veriyor.
Ryszard Szopa

Bu bağlantı 8 veya 9 yaşında (Python 2.1'den bahsediyor) ve kod tabanında gelecekteki değişikliklerle ilgili herhangi bir tartışma uzun zamandır devam ediyor. Yığınsız Python kararlı ve olgundur ve "kod tabanında önemli değişiklikler" için herhangi bir plan yoktur.
Andrew Dalke

dalke: Durum böyledir - değişiklikleri entegre etmek için herhangi bir kararda önemli değişiklikler olduysa, daha yeni bir referans bulmaktan çekinmeyin, ancak sağladığım bu eski kaynağın yalnızca farklı varyantlara sahip olma eğilimini başlattığından şüpheleniyorum. Python, örneğin, JPython, IronPytion ..
Arafangion

3

Buradaki cevaplarla da ilgileniyorum. Stackless ile biraz oynadım ve görünüşe göre standart Python'a sağlam bir katkı olacak.

Python farklı bir yığına geçmek istiyorsa, PEP 219, Python kodunu C kodundan çağırmanın olası zorluklarından bahsetmektedir. Bunu tespit etmenin ve önlemenin yollarının olması gerekir (C yığınını çöpe atmaktan kaçınmak için). Yine de bunun izlenebilir olduğunu düşünüyorum, bu yüzden Stackless'in neden kendi başına durması gerektiğini de merak ediyorum.


3
PEP 219 9 yaşında ve cidden güncel değil. "Python kodunu C kodundan çağırmanın" zorlukları yalnızca PEP'de tartışılan uygulamadadır ve Stackless'ta değildir. PEP'in adı ("Stackless Python") biraz yanlış bir isimdir; ilhamını Stackless'tan aldı ve bu kadar.
Andrew Dalke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.