Quali sono gli svantaggi di Stackless Python? [chiuso]


127

Ho letto di recente su Stackless Python e sembra avere molti vantaggi rispetto a cPython alla vaniglia. Ha tutte quelle caratteristiche interessanti come ricorsione infinita, microthread, continuazioni, ecc. E allo stesso tempo è più veloce di cPython (circa il 10%, se si deve credere al wiki di Python ) e compatibile con esso (almeno versioni 2.5, 2.6 e 3.0).

Tutto ciò sembra quasi troppo bello per essere vero. Tuttavia, TANSTAAFL , non vedo molto entusiasmo per Stackless nella comunità di Python e PEP 219 non è mai stato realizzato. Perché? Quali sono gli svantaggi di Stackless? Quali scheletri sono nascosti nell'armadio Stackless?

(So ​​che Stackless non offre una vera concorrenza, ma solo un modo più semplice di programmare in modo simultaneo. Non mi disturba davvero.)

Risposte:


165

Non so da dove provenga "Stackless è del 10% più veloce" sul Wiki, ma poi non ho mai provato a misurare quei numeri delle prestazioni. Non riesco a pensare a cosa fa Stackless per fare la differenza così grande.

Stackless è uno strumento straordinario con diversi problemi organizzativi / politici.

Il primo viene dalla storia. Christian Tismer ha iniziato a parlare di ciò che alla fine è diventato Stackless circa 10 anni fa. Aveva un'idea di ciò che voleva, ma non riusciva a spiegare cosa stesse facendo e perché la gente dovesse usarlo. Ciò è in parte dovuto al fatto che il suo background non ha avuto la formazione CS in merito a idee come le coroutine e perché le sue presentazioni e discussioni sono molto orientate all'implementazione, il che è difficile per chiunque non sia già alla moda nelle continuazioni per capire come usarlo come soluzione per i loro problemi.

Per tale motivo, la documentazione iniziale era scarsa. Ci sono state alcune descrizioni di come usarlo, con il meglio da collaboratori di terze parti. Al PyCon 2007 ho tenuto un discorso su " Usare Stackless " che è andato abbastanza bene, secondo i numeri dell'indagine PyCon. Richard Tew ha fatto un ottimo lavoro nel collezionarli, aggiornando stackless.com e mantenendo la distribuzione quando arrivano nuove versioni di Python. È un dipendente di CCP Games , sviluppatori di EVE Online, che utilizza Stackless come parte essenziale del proprio sistema di gioco.

I giochi del PCC sono anche il più grande esempio nel mondo reale che le persone usano quando parlano di Stackless. Il tutorial principale di Stackless è " Introduzione alla programmazione concorrente con Stackless Python " di Grant Olson , anch'esso orientato al gioco. Penso che questo dia alle persone un'idea distorta che Stackless sia orientato ai giochi, quando è più che i giochi sono più facilmente orientati alla continuazione.

Un'altra difficoltà è stata il codice sorgente. Nella sua forma originale ha richiesto modifiche a molte parti di Python, il che ha reso Guido van Rossum, il protagonista di Python, diffidente. Parte del motivo, penso, era il supporto per call / cc che è stato successivamente rimosso come "troppo simile al supporto di un goto quando ci sono moduli di livello superiore migliori". Non sono sicuro di questa storia, quindi leggi questo paragrafo come "Stackless utilizzato per richiedere troppe modifiche".

Le versioni successive non hanno richiesto le modifiche e Tismer ha continuato a spingere per la sua inclusione in Python. Sebbene ci fosse qualche considerazione, la posizione ufficiale (per quanto ne so) è che CPython non è solo un'implementazione di Python ma è intesa come un'implementazione di riferimento e non includerà la funzionalità Stackless perché non può essere implementata da Jython o Iron Python.

Non ci sono assolutamente piani per " modifiche significative alla base di codice ". Quella citazione e collegamento ipertestuale di riferimento di Arafangion (vedi il commento) risalgono all'incirca al 2000/2001. I cambiamenti strutturali sono stati fatti da tempo, ed è quello che ho menzionato sopra. Impilabile come è ora è stabile e maturo, con solo lievi modifiche alla base di codice negli ultimi anni.

Un'ultima limitazione con Stackless: non esiste un forte sostenitore di Stackless. Tismer è ora profondamente coinvolto con PyPy , che è un'implementazione di Python per Python. Ha implementato la funzionalità Stackless in PyPy e la considera molto superiore alla stessa Stackless, e ritiene che PyPy sia la via del futuro. Tew mantiene Stackless ma non è interessato alla difesa. Ho considerato di essere in quel ruolo, ma non riuscivo a vedere come avrei potuto ricavarne un reddito.

Ma se vuoi allenarti in Stackless, sentiti libero di contattarmi ! :)


39

ci è voluto abbastanza tempo per trovare questa discussione. A quel tempo non ero su PyPy ma ho avuto una relazione di 2 anni con psyco, fino a quando la salute non ha interrotto tutto in modo brusco. Ora sono di nuovo attivo e sto progettando un approccio alternativo - lo presenterò su EuroPython 2012.

La maggior parte delle dichiarazioni di Andrews sono corrette. Alcune aggiunte minori:

Stackless è stato significativamente più veloce di CPython, 10 anni fa, perché ho ottimizzato il ciclo dell'interprete. A quel tempo, Guido non era pronto per quello. Alcuni anni dopo, le persone hanno fatto ottimizzazioni simili e anche di più e migliori, il che rende Stackless un po 'più lento, come previsto.

Inclusione: beh, all'inizio ero molto invadente e convinto che Stackless fosse la strada da percorrere. Più tardi, quando fu quasi possibile essere incluso, persi interesse e preferivo lasciarlo così, in parte per frustrazione, in parte per mantenere il controllo di Stackless.

Argomenti come "altre implementazioni non possono farlo" mi sono sempre sembrati zoppi, in quanto vi sono altri esempi in cui questo argomento potrebbe anche essere usato. Ho pensato di dimenticarmene e di rimanere in buona amicizia con Guido, avendo la mia distribuzione.

Nel frattempo le cose stanno cambiando di nuovo. Sto lavorando su PyPy e Stackless come estensione Ne parlerò qualche volta più tardi

Saluti - Chris


5

Se ricordo bene, Stackless è stato programmato per l'inclusione nel CPython ufficiale, ma l'autore di Stackless ha detto alla gente di CPython di non farlo, perché aveva pianificato di apportare alcune modifiche significative alla base di codice - presumibilmente voleva che l'integrazione fosse fatta più tardi quando il progetto era più maturo.


1
Fonte? Lo trovo interessante, ma ovviamente non posso crederti solo perché l'hai detto. Sembrerei sciocco se ti sbagliassi e ho iniziato a parlare di quanto fosse interessante.
Devin Jeanpierre,

2
Punto eccellente. Mi dispiace non avere il riferimento, perché era in una conversazione irc in #python su freenode, tuttavia sono riuscito a trovare un'antica conversazione di mailing list su gnosis.cx/download/charming_python_10_outtakes.html che fornisce molte più informazioni sul situazione.
Arafangion,

Quel link è davvero fantastico. Risponde a molte delle mie domande.
Ryszard Szopa,

Quel link ha 8 o 9 anni (parla di Python 2.1) e si è verificato da tempo qualsiasi discussione sulle future modifiche alla base di codice. Stackless Python è stabile e maturo e non ci sono piani per "cambiamenti significativi nella base di codice".
Andrew Dalke,

dalke: Così sono le cose - se ci sono state modifiche sostanziali a qualsiasi decisione di integrazione dei cambiamenti, sentiti libero di trovare un riferimento più recente, tuttavia sospetto che quell'antica fonte che ho fornito abbia semplicemente iniziato la tendenza ad avere varianti separate di python, ad esempio JPython, IronPytion ..
Arafangion,

3

Sono anche interessato alle risposte qui. Ho giocato un po 'con Stackless e sembra che sarebbe una buona aggiunta solida allo standard Python.

PEP 219 menziona potenziali difficoltà nel chiamare il codice Python dal codice C, se Python vuole passare a uno stack diverso. Ci dovrebbero essere modi per rilevare e prevenire questo (per evitare di distruggere lo stack C). Penso che questo sia trattabile, quindi mi chiedo anche perché Stackless debba resistere da solo.


3
PEP 219 ha 9 anni ed è gravemente obsoleto. La difficoltà di "chiamare il codice Python dal codice C" è solo nell'implementazione discussa nel PEP e non in Stackless. Il nome del PEP ("Stackless Python") è un po 'improprio; ha tratto ispirazione da Stackless e basta.
Andrew Dalke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.