GCC vs clang / LLVM - pro e contro di ciascuno [chiuso]

20

Quali sono i pro e i contro di GCC vs clang / LLVM?

    
posta yodie 23.04.2011 - 00:49
fonte

4 risposte

19

gcc è molto maturo, facile da installare (almeno per la maggior parte dei sistemi) ed è il compilatore predefinito per molti sistemi, quindi in molti casi è stato installato quasi senza nemmeno rendersene conto. È stato convertito in architetture zillion, quindi è molto più probabile che funzioni subito quando si deve scegliere un hardware oscuro.

clang è molto più recente. Spesso produce messaggi di errore molto migliori, specialmente per i modelli C ++. In molti casi, funziona molto più velocemente. È costruito principalmente come un insieme di librerie, quindi ci sono molti altri progetti (ad esempio, analizzatori di codice) che usano lo stesso front-end, capiscono gli stessi input, ecc. L'uso di llvm come back-end gli conferisce maggiore flessibilità come si genera codice da esso.

    
risposta data 23.04.2011 - 01:00
fonte
17
  1. Clang ha rapporti di errore molto migliori. Per esempio. se fai un refuso nel nome di una funzione che chiami, Clang riferirà che questo è probabilmente un refuso (e suggerisce il nome corretto), mentre GCC si lamenterà del nome di una funzione sconosciuta.

  2. GCC di solito produce codice più veloce se si target x86 / x86-64. Per ARM la situazione è ambigua, spesso Clang si ottimizza meglio. Inoltre, AFAIK Clang non supporta l'ottimizzazione della dimensione del codice.

  3. GCC utilizza molta euristica. Ciò è positivo per le prestazioni (in un caso tipico), ma è terribile se si desidera eseguire un'ottimizzazione a livello di sorgente (ad es. Anche piccole modifiche al codice sorgente possono far sì che GCC generi un output completamente diverso. Clang è più prevedibile e di solito genera il codice che ti aspetti.

  4. Diversamente da Jerry Coffin, trovo che creare GCC dalla fonte sia molto più difficile di Clang. La procedura dalla pagina Introduzione di Clang ha sempre funzionato per me. Il manuale simile per GCC non ha mai funzionato al primo tentativo. GCC ha dipendenze su particolari versioni di GMP, MPFR, MPC, Parma Polyhedra Library e CLooG, e avevo bisogno di diverse iterazioni per trovare le versioni che avrebbero funzionato per una particolare versione di GCC (sì, usare le ultime versioni di quelle librerie non funziona ).

  5. Ho la sensazione che Clang sia meglio testato di GCC. Anche se uso solo le versioni ufficiali di GCC, a volte ha prodotto codice difettoso. Per Clang I di solito uso la versione trunk (di nuovo, perché è facile da compilare), ma non ho mai visto generare output errato.

  6. GCC è quasi standard nel mondo Linux e aggiunge molte funzionalità non standard ampiamente utilizzate nel software Linux. Clang cerca di essere compatibile con GCC, ma a volte li ignora tranquillamente. Ancora più importante, Clang non supporta OpenMP. Tuttavia, ha anche estensioni che non sono supportate da GCC, ma possono essere utili (ad esempio funzioni intrinseche add-with-carry __buildin_addc).

  7. Se vuoi fare ricerche sui compilatori o solo curiosità su come funziona, troverai il codice sorgente Clang / LLVM più accessibile. Il codice Clang / LLVM è leggibile dall'uomo, non solo leggibile dal compilatore.

  8. (si applica la declinazione AINAL) La licenza Clang / LLVM ti offre più libertà su ciò che puoi fare con il codice, ad es. utilizzare in prodotti commerciali o chiusi. La licenza per le librerie di runtime GCC aggiunge un altro livello di restrizioni mentre il runtime del compilatore Clang (libreria compiler-rt) è in licenza MIT permissiva.

Riepilogo: compilare con Clang quando sviluppi il programma e con GCC per la build finale (ma assicurati che sia più veloce e non si interrompa). Mantieni Clang / LLVM se fai ricerche sui compilatori.

    
risposta data 27.05.2013 - 09:39
fonte
3

Se hai una nuova architettura della CPU o nuove ottimizzazioni e vuoi aprirle sotto GPL, puoi contribuire a gcc. Tuttavia, gcc è meno modulare, quindi questo può comportare più lavoro per aggiungere le proprie modifiche / aggiunte. Se vuoi contribuire con nuove architetture o ottimizzazioni a un progetto open source, ma con una licenza non GPL, puoi contribuire a LLVM / clang. Esistono corporazioni i cui dipartimenti legali consentono solo quest'ultimo.

    
risposta data 23.04.2011 - 01:31
fonte
-3

Oggi (8/11/2011), GCC supporta molte più funzionalità di C ++ 0x rispetto a Clang. Se vuoi quelle caratteristiche, è un gioco da ragazzi; GCC è la tua opzione.

    
risposta data 11.08.2011 - 16:12
fonte

Leggi altre domande sui tag