2009-10-02 15 views
7

Potrebbe essere un vantaggio pratico scrivere un compilatore basato su cloud, che diffonderebbe unità di codice compilate su macchine diverse nel cloud? Potrebbe esserci un vantaggio nell'ottenere un'architettura software-as-a-service direttamente all'interno dell'app subito dopo la compilazione, o la latenza intrinseca renderebbe impraticabile tale approccio?Un compilatore basato su cloud sarebbe fattibile?

risposta

3

Non sono sicuro di aver frainteso il tuo punto o se hanno le altre risposte. Stai parlando di una sorta di attività di parallelizzazione automatica?Le risposte date finora sembrano parlare della compilazione distribuita, ovvero l'uso di un cloud per accelerare i tempi di compilazione. Immaginavo che stavi parlando di un compilatore che si rivolge alle risorse del cloud computing.

Se stavate parlando di compilation distribuita, ovviamente cose come distcc faranno ciò di cui avete bisogno.

Se si chiedesse la domanda molto più interessante (IMHO) sull'utilità di un compilatore che si rivolge a architetture distribuite, la mia risposta è un sonoro "sì". Tuttavia, la fattibilità è al centro del problema. La latenza non è il problema in quanto tale, tuttavia la coerenza (ovvero la garanzia che siano presenti le versioni corrette di tutte le unità) e l'esistenza di euristiche decenti sarebbe un problema.

Il posto migliore per cercare sarebbe probabilmente il linguaggio di programmazione Occam: si riferiva al transputer, che non era del tutto dissimile dal tipo di architetture di sistemi distribuiti a cui siamo interessati in questi giorni. Credo che ci sia un lavoro che segue quello di Occam che potrebbe fornire utili indizi su quale sia lo stato dell'arte.

+0

SI ... è quello che stavo chiedendo, se un compilatore che punta a architetture distribuite sarebbe fattibile ... scrivere codice in un posto e farlo girare nel cloud, come una serie di servizi riutilizzabili e debolmente collegati. Immagino che sarebbe utile, sto chiedendo se la latenza lo renderebbe inutilizzabile in natura. – luvieere

+0

"Il compilatore basato su cloud" come indicato nel titolo implica un compilatore che viene eseguito nel cloud, non un compilatore che genera programmi basati su cloud. Credo di aver frainteso. –

0

Dipende. Avevamo una vecchia compilation basata su C++ che richiedeva 3-4 ore. Per qualcosa del genere, sarebbe molto utile scaricare la compilazione. Ma nei progetti C++, questo è spesso ancora meno possibile.

Con C# o Java, i tempi di compilazione sono notevolmente più veloci, quindi potrebbe non essere altrettanto importante.

1

Credo che non sarebbe pratico. L'hardware di oggi può fare qualsiasi raccolta di progetti di piccole e medie dimensioni in tempi ragionevoli; ancora di più con CPU multi-core.

L'unica eccezione è la creazione di un intero sistema operativo (ad esempio Debian) dalle origini; per tale applicazione, le fattorie di costruzione sono ampiamente utilizzate. Tuttavia, gli utenti che hanno bisogno di farm di compilazione possono tipicamente crearli da soli e non hanno bisogno di accedere al cloud.

2

Ho usato un tale sistema, ma ha funzionato su un cluster locale, non su un cloud. Ma il principio sarebbe esattamente lo stesso. Sfortunatamente non riesco a ricordare come è stato chiamato, ma è stato bello vedere i tuoi file di origine che vengono distribuiti agli altri PC del tuo dipartimento.

Modifica: Si chiamava IncrediBuild.

+0

Ho usato IncrediBuild e funziona abbastanza bene su LAN. Teoricamente una cosa del genere potrebbe essere fatta nel cloud, solo avere le risorse della CPU in giro per farlo funzionare potrebbe essere costoso. Incredibuild utilizza la CPU di riserva dalle altre macchine su LAN che ha molto senso ed è gratuito. – jkupferman

1

Xcode ha una funzione di generazione distribuita che consente di fare ciò, ma penso che su qualsiasi cosa diversa da una LAN sarebbe molto lenta la maggior parte del tempo.

0

Penso che questo potrebbe essere utile se fosse una sorta di strumento di integrazione continua. Per alcuni ambienti di sviluppo, ottenere l'installazione corretta è difficile. Ad esempio, una volta ho lavorato a un progetto in cui il team ha compilato i file SWF utilizzando FlashDevelop e Adobe's Flex SDK. A volte era un dolore da installare sul computer di un individuo. Se un servizio può monitorare una directory di progetto o git/SVN/etc. repository e costruire l'ultimo SWF, tuttavia, penso che sarebbe stato utile.

Immagino che questo sarebbe utile anche per i progetti multipiattaforma. Oppure, questo servizio potrebbe supportare un IDE nel browser come Mozilla's Bespin.

2

È possibile utilizzare distcc e make -j per la compilazione distribuita del codice unix più tipico. Se compili regolarmente grandi blocchi di codice, potresti ottenere grandi accelerazioni ... gli sviluppatori di afaik samba (implementazione smb gratuita) lo usano per questo. distcc esegue solo la fase di compilazione in modo distribuito, lasciando la preelaborazione e il collegamento alla macchina master.

L'interazione con "the cloud" potrebbe indurre latenza, ma penso ancora con codice C++ più complicato potrebbe essere molto utile. Immagino che se hai più di 100 unità di compilazione (ad esempio file .cpp), potresti ottenere un notevole aumento della velocità.

0

Ho visto una bella demo di esecuzione di test JUnit su GridGain e GridGain può essere eseguito nel cloud.

Tuttavia, non vedo molto valore nel compilatore nel cloud.

0

Sì, grazie per avermelo chiesto, sto facendo ricerche anche in questo campo. in realtà ha molto senso ed esiste, http://www.cloudcompiling.com/, ma per quello che posso vedere è ancora lontano per essere un servizio top 10.

La latenza è solo nel caricamento del codice, quindi se gli sviluppatori stanno lavorando con una buona connessione e non troppo lontano (in termini di hop di rete e di avere "buoni" saltelli), non sarebbe un problema.

La latenza sul cloud è un problema del fornitore di servizi cloud, se sei il fornitore di servizi cloud, beh, allora hai bisogno di una buona strategia di bilanciamento.