Jakie są wady Pythona Stackless? [zamknięte]

Czytałem ostatnio o Stackless Python i wydaje się, że ma wiele zalet w porównaniu z vanilla cPython. Ma wszystkie te fajne funkcje, takie jak nieskończona rekurencja, mikrotready, kontynuacje itp. i jednocześnie jest szybszy niż cPython (około 10%, Jeśli Wiki Pythona jest z nim zgodna) i (przynajmniej wersje 2.5, 2.6 i 3.0).

Wszystko to wygląda prawie zbyt dobrze, aby było prawdziwe. Jednak TANSTAAFL , nie Zobacz wiele entuzjazmu dla Stackless wśród społeczności Pythona i PEP 219 nigdy nie został zrealizowany. Dlaczego? Jakie są wady Stackless? Jakie szkielety są ukryte w szafie Stackless?

(wiem, że Stackless nie oferuje prawdziwej współbieżności, tylko łatwiejszy sposób programowania w sposób współbieżny. Nie przeszkadza mi to.)

Author: Makoto, 2009-02-26

4 answers

Nie wiem skąd się wzięło to" Stackless is 10% faster " na Wiki, ale z drugiej strony nigdy nie próbowałem mierzyć tych liczb wydajności. Nie wyobrażam sobie, co Stackless robi, żeby coś zmienić.

Stackless to niesamowite narzędzie z kilkoma problemami organizacyjnymi / politycznymi.

Pierwszy pochodzi z historii. Christian Tismer zaczął mówić o tym, co ostatecznie stało się bez stosu około 10 lat temu. Miał pojęcie, czego chce, ale ciężko mu było wyjaśniając, co robił i dlaczego ludzie powinni z niego korzystać. Dzieje się tak częściowo dlatego, że jego tło nie miało szkolenia CS dotyczącego pomysłów takich jak coroutines oraz dlatego, że jego prezentacje i dyskusja są bardzo zorientowane na wdrożenie, co jest trudne dla każdego, kto nie jest już hip-deep w kontynuacjach, aby zrozumieć, jak używać go jako rozwiązania swoich problemów.

Z tego powodu początkowa dokumentacja była słaba. Było kilka opisów jak go używać, z najlepszymi z osoby trzecie. Na PyCon 2007 wygłosiłem referat na temat "Using Stackless ", który przeszedł dość dobrze, zgodnie z numerami ankiet PyCon. Richard Tew wykonał świetną robotę zbierając je, aktualizując stackless.com , i utrzymanie dystrybucji, gdy pojawią się nowe wydania Pythona. Jest pracownikiem CCP Games , deweloperów EVE Online, która wykorzystuje Stackless jako istotną część swojego systemu gier.

CCP games to także największy przykład w świecie rzeczywistym ludzie używają, gdy mówią o Stackless. Głównym tutorialem dla Stackless jest Grant Olson ' S " Introduction to Concurrent Programming with Stackless Python", który jest również zorientowany na gry. Myślę, że daje to ludziom Przekrzywione wyobrażenie, że Stackless jest zorientowany na gry, kiedy jest bardziej, że gry są łatwiej zorientowane na kontynuację.

Kolejną trudnością był kod źródłowy. W swojej pierwotnej formie wymagał zmian w wielu częściach Pythona, co sprawiło, że Guido van Rossum, Python prowadź, ostrożnie. Jednym z powodów, jak sądzę, było wsparcie dla call/cc, które zostało później usunięte jako " zbyt podobne do wspierania goto, gdy istnieją lepsze formy wyższego poziomu."Nie jestem pewien co do tej historii, więc po prostu przeczytaj ten akapit jako" Stackless wymagał zbyt wielu zmian."

Późniejsze wydania nie wymagały zmian, a Tismer nadal naciskał na jego włączenie do Pythona. Chociaż było pewne rozważenie, oficjalne stanowisko (z tego co wiem) Jest Takie, że CPython nie jest tylko implementacja Pythona, ale jest to implementacja referencyjna i nie będzie zawierać funkcjonalności bez stosu, ponieważ nie może być zaimplementowana przez Jython lub Iron Python.

Nie ma absolutnie żadnych planów " znaczących zmian w bazie kodu". Ten cytat i odnośnik z Arafangiona (patrz komentarz) pochodzą z około 2000/2001. Zmiany strukturalne już dawno zaszły i o tym wspomniałem powyżej. Stackless jak to jest teraz jest stabilny i dojrzały, z niewielkimi poprawkami do bazy kodu w ciągu ostatnich kilku lat.

Jedno ostateczne ograniczenie ze Stackless - nie ma mocnego zwolennika Stackless. Tismer jest teraz głęboko zaangażowany w PyPy , która jest implementacją Pythona dla Pythona. Zaimplementował funkcjonalność Stackless w PyPy i uważa ją za znacznie lepszą od samej Stackless i uważa, że PyPy jest drogą przyszłości. Tew utrzymuje Stackless, ale nie jest zainteresowany rzecznictwem. Rozważałem bycie w tej roli, ale nie wiedziałem, jak Mogę na niej zarobić.

Chociaż jeśli chcesz trenować w Stackless, nie krępuj się skontaktuj się ze mną ! :)

 154
Author: Andrew Dalke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 03:09:53

Dość długo trwało znalezienie tej dyskusji. W tym czas nie byĹ 'em na PyPy, ale miaĹ' em 2-letni romans z psyco, dopóki zdrowie nie przerwaĺ 'o tego wszystkiego zupeĹ' nie nagle. Jestem teraz znowu aktywny i projektuję alternatywne podejście-zaprezentuje je na targach EuroPython 2012.

Większość wypowiedzi Andrewsa jest poprawna. Niektóre drobne dodatki:

Stackless był znacznie szybszy niż CPython, 10 lat temu, ponieważ zoptymalizowałem pętlę interpretera. W tym czasie Guido nie był na to gotowy. A kilka lat później ludzie zrobili podobne optymalizacje, a nawet więcej i lepszych, co sprawia, że Stackless jest trochę wolniejszy, zgodnie z oczekiwaniami.

O inkluzji: cóż, na początku byłem bardzo natarczywy i przekonany, że Stackless jest drogą do zrobienia. Później, kiedy było prawie możliwe, aby włączyć, straciłem zainteresowanie tym i wolałem pozwolić pozostaje w ten sposób, częściowo z frustracji, częściowo do zachowaj kontrolę nad Stackless.

Argumenty typu " inne implementacje nie mogą to " zawsze wydawało mi się kulawe, ponieważ istnieją inne przykłady, gdzie ten argument może być również używany. Pomyślałem, że lepiej o tym zapomnę i pozostanę w dobrej przyjaźni z Guido, mając własne distro.

Tymczasem wszystko się zmienia. Pracuję nad PyPy i Stackless jako rozszerzenie będzie o tym mówić czasami później

Cheers -- Chris

 36
Author: tismer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-10 18:03:42

O ile dobrze pamiętam, Stackless został przeznaczony do włączenia do oficjalnego CPython, ale autor stackless powiedział ludziom CPython, aby tego nie robili, ponieważ planował dokonać pewnych znaczących zmian w bazie kodu-prawdopodobnie chciał, aby integracja została wykonana później, gdy projekt był bardziej dojrzały.

 4
Author: Arafangion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-26 03:52:17

Jestem również zainteresowany odpowiedziami tutaj. Grałem trochę z Stackless i wygląda na to, że byłby to dobry solidny dodatek do standardowego Pythona.

PEP 219 wspomina o potencjalnych trudnościach z wywołaniem kodu Pythona z kodu C, jeśli Python chce zmienić stos na inny. Musiałby istnieć sposób na wykrycie i zapobieżenie temu (aby uniknąć zniszczenia stosu C). Myślę, że jest to jednak tractable, więc zastanawiam się również, dlaczego Stackless musi stać sam.

 3
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-26 03:47:02