Sarebbe possibile rendere reattivo Shake, usando inotify (o qualunque altro uso di git-annex e Yesod) in modo che, se mai il filesystem cambia in modo tale da implicare che la regola debba essere eseguita, lo fa alla prima occasione?Come posso utilizzare la libreria Shake per creare un sistema di build reattivo?
risposta
L'autore di Shake, Neil Mitchell, ha risposto questo dicendo:
ci sono alcuni modi per affrontare questo:
Si potrebbe semplicemente eseguire nuovamente agitare ogni volta che rileva qualcosa è cambiato . Shake è altamente ottimizzato per ricostruzioni veloci, se la modifica richiede una compilazione, quindi il tempo di Shake per capire che cosa è da ricostruire è probabilmente minimo. Non richiede modifiche a Shake.
Ci sono alcune cose che Shake fa all'avvio, come leggere il database di scuotimento . Se c'è una domanda, e si scopre che sia visibile in tempo, fornirei volentieri una nuova agitazione a buon mercato API di qualche tipo - non è così difficile da fare.
Quando Shake esegue un controllo di ricostruzione, la cosa più costosa è che controlla i tempi di modifica del file. Se il layer inotify ha fornito un elenco di di file che sono stati modificati, è stato possibile ricontrollare solo le cose che erano state modificate da . Per un progetto di grandi dimensioni è probabile che vedrai ~ 1s controllando i tempi di modifica, quindi probabilmente ti comprerà un po ', e non è troppo difficile da implementare.
Se Agitare è attivamente costruendo, e poi qualcosa cambia, si potrebbe generare un'eccezione, uccidere tutto ciò che è in fase di costruzione, e riavviare Shake. L'agitazione è stata accuratamente testata con le eccezioni lanciate allo e fa la cosa giusta. So che almeno una persona usa Shake in questo modo.
Infine, se Shake si sta sviluppando attivamente, è possibile dinamicamente terminare solo quelle regole i cui input sono cambiati e andare di nuovo. Shake potrebbe supportare questo modello, ma sarebbe una quantità ragionevole di e richiedere la riprogettazione di alcuni pezzi. Quello sarebbe il modello reattivo completo , ma ho il sospetto che possa essere un vantaggio solo quando hai un numero enorme di file e alcuni file stanno cambiando quasi a continuamente ma la maggior parte dei file non lo è.
Abbiamo anche determinato che la combinazione Agitare con un programma di utilità come Hobbes (anche Hackage) può permettere di fare reattivo build.
Uso Shake come build manager e il passaggio 2 occupa circa 300 ms per me, che è troppo lento per qualsiasi approccio di polling automatico ragionevole. – nominolo
@nominolo Se è importante per te, fammi sapere, e io rifaremo l'API per evitare il sovraccarico con la riesecuzione. Se hai un profilo Haskell per il tuo caso d'uso, mi piacerebbe vederlo, poiché potrebbe identificare qualcos'altro in colpa nei 300 ms. –
- 1. Android - Come creare un effetto shake come eliminare in iphone?
- 2. Utilizzare la dimensione div padre per il sistema di griglia reattivo bootstrap
- 3. Come creare un testo reattivo su un'immagine?
- 4. Come configurare la finestra mobile per utilizzare la cache dal Registro di sistema in ogni passaggio di build
- 5. Qual è un buon modo per utilizzare un cmdlet PowerShell in un sistema di build NAnt?
- 6. Come posso creare un sistema "ricordami di me" usando PHP?
- 7. Impossibile creare la nuova configurazione di build
- 8. Come utilizzare la libreria MOQ per deridere un ENum
- 9. Come posso utilizzare ImageJ come libreria per un'applicazione Java separata?
- 10. Come posso creare e utilizzare un server di simboli?
- 11. Come posso creare preferenze personalizzate usando la libreria android.support.v7.preference?
- 12. Come posso utilizzare una directory locale come piattaforma di destinazione per un build Tycho?
- 13. Come creare un sito Web reattivo con ReactJs
- 14. Come creare un sistema di code PHP
- 15. Come posso utilizzare Generics per creare un modo per creare un oggetto IEnumerable da un enum?
- 16. Come posso utilizzare Travis per la sottodirectory?
- 17. Come utilizzare l'avvio a molla per creare una libreria comune
- 18. Come configurare la libreria python cffi per utilizzare mingw?
- 19. Come utilizzare la libreria openSSL nell'applicazione ANDROID
- 20. Come creare un sistema operativo estremamente semplice?
- 21. Come creare un sistema operativo di base
- 22. Come posso installare e utilizzare la libreria ack su Windows?
- 23. come utilizzare la libreria ijkplayer
- 24. Come posso utilizzare la chiamata di sistema di Perl per generare thread indipendenti?
- 25. Come posso creare e utilizzare un operatore di classe arrow?
- 26. UICollectionViewCell Shake
- 27. Come posso forzare Python a utilizzare il modulo dumbdbm per creare un nuovo database?
- 28. Come utilizzare la risposta XML in nativo reattivo
- 29. come posso "abortire" un build di gulp
- 30. Come utilizzare la libreria rapida in NativeScript?
Questa domanda sembra essere off-topic perché è una richiesta di funzionalità per Shake, non una domanda di programmazione. –
@ PetrPudlák Interpreterei questa domanda come "come posso usare la libreria Shake per costruire un sistema di costruzione reattivo", poiché almeno una delle risposte non richiede nuove funzionalità. –