2013-10-31 3 views
5

Si consiglia di estendere la funzionalità di core.async con le mie proprie funzioni asincrone?Estensione della funzionalità di clojure core.async

L'asincronia dei canali è gestita da put! e take! che accettano callback, ma i protocolli sono annidati nel async.impl.protocols namespace. impl significa stare fuori! in questo caso, o è giusto implementarli?

Ad esempio, è possibile racchiudere un canale netty o un socket java come ReadPort e WritePort.

+0

Bene, là * usato * per essere una risposta qui che ha detto essenzialmente "andare per questo!" Sembra che sia stato ritrattato. –

+0

Direi fai quello che vuoi! – Hendekagon

+0

@Hendekagon ma, se il protocollo è nascosto, c'è una maggiore probabilità che cambi senza preavviso. Quello sarebbe un orso. –

risposta

7

L'intenzione dei protocolli core.async è di servire come ganci di implementazione per l'implementazione di buffer, canali, porte, ecc. Esiste sotto impl in quanto parte dell'implementazione, non l'API utente pubblica.

Il team ritiene che siano aperti al cambiamento fino a quando non verrà rilasciata una versione non alpha della libreria (non ho alcun limite temporale). Dalla versione asincrona fino ad ora i protocolli non sono cambiati, tuttavia al momento si verifica un cambio di processo in particolare a put! e take!.

Se sei disposto ad affrontare i cambiamenti di cattura per ora, sentiti libero di implementare come desideri.

Tim B ha dedicato parecchio tempo a collegare i canali asincroni alla rete ed è molto impegnativo da fare pur mantenendo la semantica del canale. Il modello consigliato in questo momento consiste nell'utilizzare thread dedicati che comunicano con l'I/O di rete e comunicano "al limite" con i canali nell'applicazione (probabilmente utilizzando put! e take!). Questo modello non richiede l'implementazione dei protocolli interni.