Nie wiem, skąd wzięło się stwierdzenie „Stackless jest 10% szybsze” na Wiki, ale z drugiej strony nigdy nie próbowałem zmierzyć tych wskaźników wydajności. Nie mogę sobie wyobrazić, co robi Stackless, aby zrobić tak wielką różnicę.
Stackless to niesamowite narzędzie z kilkoma problemami organizacyjnymi / politycznymi.
Pierwsza pochodzi z historii. Christian Tismer zaczął mówić o tym, co ostatecznie stało się Stackless około 10 lat temu. Miał pojęcie, czego chce, ale trudno mu było wyjaśnić, co robi i dlaczego ludzie powinni go używać. Dzieje się tak częściowo dlatego, że jego zaplecze nie miało szkolenia CS dotyczącego pomysłów takich jak coroutines oraz dlatego, że jego prezentacje i dyskusje są bardzo zorientowane na implementację, co jest trudne dla każdego, kto nie jest jeszcze głęboki w kontynuacji, aby zrozumieć, jak wykorzystać je jako rozwiązanie ich problemy.
Z tego powodu początkowa dokumentacja była słaba. Było kilka opisów, jak go używać, z najlepszymi od zewnętrznych dostawców. Na PyCon 2007 wygłosiłem wykład na temat „ Korzystanie ze Stackless ”, który wypadł całkiem nieźle, zgodnie z danymi ankietowymi PyCon. Richard Tew wykonał świetną robotę, zbierając je, aktualizując stackless.com i utrzymując dystrybucję, gdy pojawią się nowe wydania Pythona. Jest pracownikiem CCP Games , twórcy EVE Online, która wykorzystuje Stackless jako istotną część swojego systemu gier.
Gry CCP to także największy przykład z rzeczywistego świata, z którego ludzie korzystają, gdy mówią o Stackless. Głównym samouczkiem dla Stackless jest „ Wprowadzenie do programowania współbieżnego w języku Stackless Python ” Granta Olsona , które również jest zorientowane na grę. Myślę, że to daje ludziom wypaczony pogląd, że Stackless jest zorientowany na gry, podczas gdy gry są bardziej zorientowane na kontynuację.
Kolejną trudnością był kod źródłowy. W swojej pierwotnej formie wymagał zmian w wielu częściach Pythona, co spowodowało, że Guido van Rossum, lider Pythona, był ostrożny. Myślę, że jednym z powodów 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 przeczytaj ten akapit jako „Bez stosu wymagał zbyt wielu zmian”.
Późniejsze wydania nie wymagały zmian, a Tismer nadal naciskał na włączenie go do Pythona. Chociaż było trochę rozważań, oficjalne stanowisko (o ile wiem) jest takie, że CPython jest nie tylko implementacją Pythona, ale ma być implementacją referencyjną i nie będzie zawierał funkcjonalności Stackless, ponieważ nie może być zaimplementowany przez Jython lub Iron Python.
Nie ma absolutnie żadnych planów dotyczących „ znaczących zmian w bazie kodu ”. Ten cytat i odsyłacz z Arafangiona (patrz komentarz) pochodzą z około 2000/2001. Zmiany strukturalne już dawno się dokonały, o czym wspomniałem powyżej. W obecnej postaci bez stosu jest stabilny i dojrzały, z niewielkimi zmianami w kodzie w ciągu ostatnich kilku lat.
Ostatnie ograniczenie w przypadku Stackless - nie ma zdecydowanego zwolennika Stackless. Tismer jest teraz głęboko zaangażowany w PyPy , która jest implementacją Pythona dla Pythona. Zaimplementował funkcję Stackless w PyPy i uważa ją za znacznie lepszą od samej Stackless i uważa, że PyPy to droga na przyszłość. Tew utrzymuje Stackless, ale nie jest zainteresowany rzecznictwem. Zastanawiałem się, czy nie zostać w tej roli, ale nie widziałem, jak mógłbym z tego zarobić.
Jeśli chcesz trenować w Stackless, napisz do mnie ! :)
Interesują mnie również odpowiedzi tutaj. Grałem trochę w 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 przejść na inny stos. Musiałyby istnieć sposoby, aby to wykryć i zapobiec temu (aby uniknąć zniszczenia stosu C). Myślę jednak, że jest to wykonalne, więc zastanawiam się również, dlaczego Stackless musi stać samodzielnie.
źródło