Domanda

Ho letto di recente su Stackless Python e sembra avere molti vantaggi rispetto alla vaniglia CPython. Ha tutte le funzioni interessanti come ricorsione infinita, microspire, continuazioni, ecc e, allo stesso tempo è più veloce di CPython (circa il 10%, se Python wiki è da credere) e compatibile con (almeno le versioni 2.5, 2.6 e 3.0).

Tutte queste sembra quasi troppo bello per essere vero. Tuttavia, TANSTAAFL , non vedo molto entusiasmo per Stackless tra la comunità Python, e PEP 219 è mai in realizzazione. Perché? Quali sono gli svantaggi di Stackless? Quali scheletri sono nascosti nell'armadio Stackless'?

(lo so Stackless non offre vera concorrenza, solo un modo più semplice di programmazione in modo concomitante. Realmente non mi preoccupa.)

È stato utile?

Soluzione

Non so dove che "Stackless è più veloce del 10%" sul Wiki di provenienza, ma poi di nuovo non ho mai provato per misurare quei numeri di prestazione. Non riesco a pensare a ciò che Stackless fa a fare la differenza così grande.

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

Il primo viene dalla storia. Christian Tismer iniziato a parlare di quello che poi è diventato Stackless circa 10 anni fa. Aveva un'idea di quello che voleva, ma ha avuto un momento difficile spiegare quello che stava facendo e perché le persone dovrebbero usarlo. Questo è in parte perché il suo fondo non ha avuto la formazione CS per quanto riguarda idee come co-routine e perché le sue presentazioni e discussioni sono molto implementazione orientata, che è difficile per chiunque non già hip-profondo in continuazioni per capire come usarlo come una soluzione per i loro problemi.

Per questo motivo, la documentazione iniziale era scarsa. Ci sono state alcune descrizioni di come usarlo, con il meglio di collaboratori di terze parti. A PyCon 2007 ho tenuto una conferenza sul tema " Utilizzando Stackless ", che andò abbastanza bene, secondo il numeri di indagine PyCon. Richard Tew ha fatto un grande lavoro di raccolta questi, l'aggiornamento stackless.com , e mantenendo la distribuzione quando nuove release di Python viene in su. Lui è un dipendente di CCP Games , gli sviluppatori di EVE Online, che utilizza Stackless come parte essenziale del loro sistema di gioco.

Giochi del PCC è anche il più grande esempio del mondo reale le persone usano quando parlano Stackless. Il tutorial principale per Stackless è Grant Olson di " Introduzione alla programmazione concorrente con Stackless Python " , che è anche gioco orientato. Penso che questo dà alle persone un idea distorta che Stackless è giochi-oriented, quando è più che i giochi sono più facilmente continuazione orientato.

Un'altra difficoltà è stato il codice sorgente. Nella sua forma originale che ha richiesto modifiche alle molte parti del Python, che ha reso Guido van Rossum, il piombo Python, diffidente. Parte del motivo, credo, era il supporto per chiamata / cc che fu poi rimosso come "troppo come supporto un avanzamento quando ci sono più forme di livello superiore." Io non sono certo di questo la storia, quindi basta leggere questo paragrafo come "Stackless utilizzato per richiedere troppi cambiamenti".

versioni successive non hanno richiesto le modifiche e Tismer continuato a spingere per la sua inclusione in Python. Mentre c'era una certa considerazione, la posizione ufficiale (per quanto ne so) è che CPython non è solo un'implementazione di Python, ma è inteso come un'implementazione di riferimento, e non includerà la funzionalità Stackless perché non può essere implementata da Jython o ironpython.

Non ci sono assolutamente piani per " modifiche significative al codice di base ". Quella citazione e riferimento collegamento ipertestuale da Arafangion di (si veda il commento) sono da circa 2000/2001. I cambiamenti strutturali sono stati a lungo fatto, ed è quello che ho citato sopra. Stackless come è ora è stabile e maturo, con solo piccoli aggiustamenti al codice di base nel corso degli ultimi anni.

Una limitazione finale con Stackless - non c'è un forte sostenitore per Stackless. Tismer sta profondamente coinvolto con PyPy , che è un'implementazione di Python per Python. Egli ha implementato la funzionalità Stackless in PyPy e ritiene molto superiore a stackless sé, e ritiene che PyPy è la via del futuro. Tew mantiene Stackless ma lui non è interessato a difesa. Ho considerato essere in quel ruolo, ma non riuscivo a vedere come avrei potuto fare un reddito da esso.

Anche se si desidera che la formazione in Stackless, sentitevi liberi di contattatemi :!)

Altri suggerimenti

c'è voluto molto tempo per trovare questa discussione. A quel volta non era in PyPy ma aveva un affare di 2 anni con Psyco, fino a quando la salute fermato tutto questo abbastanza bruscamente. Ora sono di nuovo attivo e la progettazione di un approccio alternativo -. presenterà sul EuroPython 2012

La maggior parte delle affermazioni Andrews sono corretti. Alcuni aggiunte minori:

Stackless era significativamente più veloce di CPython, 10 anni fa, perché ho ottimizzato il ciclo interprete. A quel tempo, Guido non era pronto per questo. Pochi anni dopo, la gente ha fatto ottimizzazioni simili e quelle ancora di più e meglio, il che rende Stackless un po 'più lento, come previsto.

In materia di inclusione: bene, all'inizio ero molto insistenti e convinto che Stackless è la strada da percorrere. Più tardi, quando era quasi possibile ottenere incluso, ho perso interesse per questo e preferito lasciare lo stare in questo modo, in parte a causa della frustrazione, in parte a mantenere il controllo di Stackless.

Gli argomenti come "altre implementazioni non possono farlo" sentito sempre zoppo a me, in quanto vi sono altri esempi in cui potrebbe essere utilizzato anche questo argomento. Pensavo meglio dimenticare questo e rimanere in buona amicizia con Guido, avere la mia distro.

Nel frattempo le cose stanno cambiando di nuovo. Sto lavorando su PyPy e Stackless come estensione parleremo volte più tardi

Cheers - Chris

Se non ricordo male, Stackless era previsto per l'inclusione nella CPython ufficiale, ma l'autore del stackless ha detto la gente CPython di non farlo, perché aveva intenzione di fare alcune modifiche significative alla base di codice - presumeably voleva l'integrazione fatto più tardi, quando il progetto era più maturo.

Mi interessa le risposte qui anche. Ho giocato un po 'con Stackless e sembra che sarebbe una buona solida aggiunta a standard di Python.

PEP 219 fa menzione potenziali difficoltà con chiamando codice Python dal codice C, se Python vuole cambiare ad una pila diversa. Non ci sarebbe bisogno di essere modi per rilevare e prevenire questo (per evitare di cestinare la pila C). Credo che questo sia trattabile, però, così sto anche chiedendo perché Stackless deve stare da sola.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top