2014-03-15 7:42 GMT+01:00 Nicola Larosa <n...@teknico.net>: > Manlio Perillo wrote: > >> > [...] > > Twisted offre un framework per la programmazione asincrona da anni, >> ma non è mai stato di moda, perchè molto più difficile. >> > > Non ha avuto grande successo per vari altri motivi: avanti sui suoi > tempi, documentazione carente, e anche insistenza sulla sintassi a > callback preferita alle inline callback. > > Secondo me molto ha influito il fatto che non fosse compatibile con il resto del mondo Python.
> > > Considerato tutti i problemi che gli utenti hanno con tornado e >> friends (e che nemmeno sanno di sapere), direi che, come sempre, >> "explicit is better than implicit". >> > > Poco ma sicuro. Creare punti impliciti di cambio di contesto, come fanno > gevent ed eventlet, e come fanno i thread preemptive, è ingestibile. > > Si, ma con gevent i punti di cambio di contesto sono "deterministici". Non sono espliciti, ma se la libreria che usa le coroutine è scritta bene sai dove può avvenire lo switch, anche se magari sommerso tra 5-10 funzioni (cosa non bella, in effetti, ma è proprio uno dei "problemi" con yield che ti devi portare dietro sempre) > > Il mio suggerimento è sempre quello di imparare prima le basi (vicino >> a quello che realmente succede) e solo dopo utilizzare cose che >> rendono la programmazione e manutenzione più semplice. >> > > Se con questo intendi passare per la sintassi a callback prima di usare > la pseudo sincrona, non sono d'accordo. No, indendevo capire quello che succede "sotto il cofano", altrimento non ci si rende conto dei possibili problemi e/o come risolverli. > Non si tratta di basi, è > semplicemente un modo diverso, molto meno leggibile, di scrivere codice > asincrono. > > Ormai le Promises ci sono anche in Javascript, non ha senso insistere col > vecchio modello. Però andare troppo oltre e rinunciare agli yield, che > marcano i punti di cambio di contesto, significa andarsela a cercare. > > Glyph Lefkowitz, cioè Mr. Twisted, fa un'ottima panoramica delle opzioni > disponibili, ed illustra bene i pericoli di usare una sintassi implicita: > > "1. Straight callbacks: Twisted’s IProtocol, JavaScript’s on<foo> idiom, > where you give a callback to something which will call it later and then > return control to something (usually a main loop) which will execute > those callbacks, > > 2. “Managed” callbacks, or Futures: Twisted’s Deferred, JavaScript’s > Promises/A[+], E’s Promises, where you create a dedicated > result-that-will-be-available-in-the-future object and return it for the > caller to add callbacks to, > > 3. Explicit coroutines: Twisted’s @inlineCallbacks, Tulip’s yield from > coroutines, C#’s async/await, where you have a syntactic feature that > explicitly suspends the current routine, > > 4. and finally, implicit coroutines: Java’s “green threads”, Twisted’s > Corotwine, eventlet, gevent, where any function may switch the entire > stack of the current thread of control by calling a function which > suspends it. > > Go non ha una sintassi per sospendere esplicitamente una goroutine; quindi appartiene a 4) ? > [...] Ciao Manlio
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python