Domanda

Qualcuno ha esperienza con LLVM , llvm-gcc o Clang ?

L'idea alla base di llvm mi sembra molto intrigante e mi interessa vedere come si comporta. Non voglio perdere molto tempo a provare gli strumenti se gli strumenti non sono pronti per la produzione.

Se hai esperienza con gli strumenti, cosa ne pensi di loro? Quali sono le principali limitazioni che hai riscontrato? Quali sono i maggiori vantaggi?

Mille grazie!

È stato utile?

Soluzione

Ho avuto un gioco iniziale con LLVM e ho lavorato su questo tutorial rimasto sono molto entusiasta del suo potenziale; l'idea che posso usarlo per costruire una JIT in un'app con relativa facilità mi ha entusiasmato.

Non sono andato abbastanza in profondità per essere in grado di offrire qualsiasi tipo di opinione utile su limiti, stabilità, prestazioni e simili. Capisco che è buono sotto tutti gli aspetti ma è puramente sentito dire.

Altri suggerimenti

Non posso dire abbastanza cose positive di LLVM. È così facile lavorare con altri progetti di compilatore che ho visto. Non sono un compilatore, ma quando mi sento frustrato da qualche limitazione di LLVM o dal clanging, di solito è abbastanza facile immergersi e cambiarlo.

Noi (Nate Begeman, io stesso e pochi altri) abbiamo scritto il backend PPC senza una vera esperienza nella progettazione di compilatori, ma sembrava abbastanza semplice che i non esperti potessero affrontarlo. Conoscevamo abbastanza bene l'assemblaggio PPC, ma era comunque incredibile riuscire a ottenere LLVM-gcc in uscita dal codice PPC in poche settimane del nostro tempo libero. Sicuramente uno dei Hello World più soddisfacenti che abbia mai compilato.

Gioco con LLVM on e off da molti mesi ormai. Ho scritto due OCaml Journal che descrivono l'uso di LLVM dagli OCaml linguaggio di programmazione. Ciò è particolarmente interessante perché il linguaggio OCaml è l'ideale per scrivere compilatori e ha una ricchezza di strumenti e librerie potenti e maturi per l'analisi e così via.

Nel complesso, la mia esperienza è stata estremamente positiva. LLVM fa quello che dice sulla scatola ed è molto facile da usare. Le prestazioni del codice generato sono eccezionali. Uno dei programmi che ho scritto era un piccolo compilatore Brainf * ck che genera alcuni degli eseguibili più veloci di qualsiasi compilatore che ho provato (incluso GCC).

Ho solo due lamentele con LLVM. In primo luogo, utilizza abort () ogni volta che qualcosa va storto invece di sollevare un'eccezione. Questa è stata una deliberata decisione di progettazione da parte dei suoi autori che si stanno sforzando di rimuovere tutti gli usi delle eccezioni da LLVM ma rende impossibile ottenere backtrace da OCaml quando si tenta di eseguire il debug di un compilatore che utilizza LLVM: il tuo programma muore con una spiegazione testuale da LLVM ma nessun indizio su dove si sia verificato l'errore nella tua fonte. In secondo luogo, la libreria compilata di LLVM è mostruosamente grande (20 Mb). Presumo che ciò sia dovuto al gonfiamento sostenuto dal C ++, ma rende la compilazione dolorosamente lenta.

EDIT: il mio lavoro su LLVM è culminato nella creazione di una macchina virtuale raccolta di rifiuti di alto livello ad alte prestazioni. Scarica gratuitamente qui e dai un'occhiata al benchmarks (wow!). @Alex: Prenderò quel compilatore BF per te da qualche parte APPENA POSSIBILE.

Hai chiesto informazioni sugli strumenti e vorrei menzionare che esiste un plug-in LLVM per Eclipse CDT (per Windows, Linux e Mac). Integra perfettamente LLVM con IDE e l'utente non ha bisogno di sapere nulla di LLVM. Premendo il pulsante build è sufficiente per produrre file .bc ed eseguibili (e file intermedi sullo sfondo non visibili per l'utente).

L'ultima versione è disponibile tramite il sito ufficiale di aggiornamento Eclipse: http://download.eclipse.org/releases / mars

Si trova in Linguaggi di programmazione ed è denominato " C / C ++ Supporto compilazione famiglia LLVM " ;.

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