Clang

Clang

Descrizione dell'immagine Clang (macOS) .png. Informazione
Sviluppato da Dispositivi Apple , Microsoft , Google , ARM , Sony , Intel e Advanced Micro
Ultima versione 12.0.0 (14 aprile 2021)
Depositare github.com/llvm/llvm-project
Scritto in C ++ e C
Sistema operativo Tipo Unix
Ambiente Multi piattaforma
genere Compilatore
Licenza Licenza open source NCSA / University of Illinois e licenza Apache
Sito web clang.llvm.org

Clang è un compilatore per il C , C ++, e Objective-C linguaggi di programmazione . La sua interfaccia di basso livello utilizza le librerie LLVM per la compilazione.

È un software gratuito derivante da un progetto di ricerca universitario e distribuito secondo i termini della licenza Open Source NCSA / University of Illinois .

Clang è ora gestito da una vasta comunità, inclusi molti dipendenti di Apple, Google, ARM o Mozilla, come parte del progetto LLVM .

Il suo obiettivo è offrire un'alternativa a GCC .

Storia

Nel 2005, Apple ha utilizzato LLVM in molti progetti commerciali, inclusi iOS SDK e Xcode 3.1.

Uno di questi utilizzi era un compilatore di codice OpenGL per Mac OS X che converte le chiamate alle funzioni OpenGL in istruzioni GPU per processori grafici che non avevano tutte le funzionalità richieste. Ciò ha consentito ad Apple di supportare l' API OpenGL completa sui computer che utilizzano GPU Intel GMA , migliorando le prestazioni su quelle macchine.

LLVM era originariamente inteso come base per una nuova versione di GCC, poiché GCC causava problemi sia agli sviluppatori LLVM che ad Apple. GCC è un grande progetto e il suo sviluppo è complesso: come ha detto un ex sviluppatore di GCC "Cercare di far ballare l'ippopotamo non è proprio molto piacevole" e uno dei partecipanti al Google Summer of Code ha commentato che "Leggere il codice GCC è stato un esercizio molto difficile per me. In effetti è l'unico progetto per il quale so che diventa sempre più difficile nel tempo ” .

Apple utilizza molto Objective-C , ma il front-end GCC di questo linguaggio ha una bassa priorità per gli sviluppatori . Inoltre, GCC non si integra bene con l'IDE di Apple. Infine, GCC è distribuito sotto la licenza GPL versione 3, che richiede agli sviluppatori che distribuiscono estensioni per GCC o versioni modificate di esso di pubblicare il proprio codice sorgente, mentre LLVM utilizza una licenza di tipo BSD che consente l'utilizzo del suo codice in un programma proprietario .

Apple ha scelto di sviluppare un nuovo compilatore che supporta solo C99 , Objective C e C ++. Il progetto Clang è stato reso open source nel luglio 2007.

Design

Clang è progettato per funzionare con LLVM. Insieme, questi due forniscono una catena di compilazione per sostituire completamente GCC. Poiché è stato progettato come una libreria, proprio come il resto di LLVM, Clang è facilmente utilizzabile in altre applicazioni come Vim .

Uno degli obiettivi principali di Clang è il suo migliore supporto per la compilazione incrementale , al fine di consentire un migliore utilizzo del compilatore tramite un IDE . GCC è stato progettato per utilizzare un classico schema build-link-edit-debug e, sebbene fornisca strumenti di compilazione incrementali e al volo, integrarli con altri strumenti non è sempre facile. Ad esempio, GCC ha un passaggio chiamato "pieghevole" che è la chiave del processo di compilazione, ma ha l'effetto di trasformare l'albero di compilazione in un modo che non lo fa più sembrare il codice originale. Se viene rilevato un errore durante o dopo questo passaggio, può essere difficile trovare la posizione nel codice in cui ha avuto origine. Inoltre, gli IDE che utilizzano GCC come catena di build utilizzano altri strumenti per fornire l' evidenziazione della sintassi o il completamento automatico .

Clang è progettato per conservare più informazioni durante il processo di compilazione rispetto a GCC e preservare la forma complessiva del codice originale. L'obiettivo è risalire più facilmente all'origine del problema. I rapporti di errore di Clang sono progettati anche per essere più dettagliati e specifici e per essere più facili da usare in un IDE. Il suo design modulare consente l'indicizzazione del codice sorgente, il controllo della sintassi e altre funzionalità associate al rapido sviluppo dell'applicazione . L' albero della sintassi è anche più adatto per il refactoring automatico poiché rimane sotto forma di testo analizzabile.

Clang è modulare, basato interamente su librerie sostituibili al collegamento (al contrario di moduli che possono essere combinati alla compilazione) e ben documentato. In alcuni casi, le librerie sono disponibili in più versioni che possono essere scambiate in fase di esecuzione; ad esempio, il parser ha una versione che offre metriche sulle prestazioni per il processo di compilazione.

Clang, come suggerisce il nome, è un compilatore che supporta solo linguaggi basati su C. Non offre supporto per linguaggi diversi da C, C ++, Objective-C e Objective-C ++. In molti casi, Clang può sostituire GCC, senza impatto sulle catene di costruzione del software. In effetti, clang supporta la maggior parte delle opzioni GCC.

Prestazioni e compatibilità con GCC

Gli sviluppatori di Clang affermano che utilizza meno memoria ed è più veloce dei compilatori concorrenti, incluso GCC. A riprova di ciò, affermano che nell'ottobre 2007, Clang ha compilato la libreria Carbon almeno due volte più velocemente di GCC, utilizzando circa 6 volte meno memoria e spazio su disco.

La compatibilità di Clang con GCC è molto buona e la compilazione generalmente più veloce. Le prestazioni dei programmi compilati con LLVM / Clang erano una volta peggiori di quelle di GCC, ma a metà del 2012 GCC ha vinto su alcuni benchmark e Clang su altri.

Derivati

Clang (e LLVM ) sono sotto un libero non licenza copyleft , il che significa che possono essere modificati con licenza proprietaria del codice .

Microsoft utilizza quindi Clang come base del suo compilatore per DirectX  : HLSL . Non era gratuito, almeno fino a quando non è stato rilasciato con una licenza gratuita all'inizio del 2017.

Note e riferimenti

  1. Versione 12.0.0  " ,14 aprile 2021(accesso 15 aprile 2021 )
  2. LLVM 12.0.0 Release  " ,15 aprile 2021(accesso 15 aprile 2021 )
  3. (in) Licenza Open Source NCSA / University of Illinois sul sito LLVM.
  4. (a) Chris Lattner (25 maggio 2007). "  LLVM per OpenGL e altro  " (diapositive) nella riunione degli sviluppatori LLVM . 
  5. Zadeck, Kenneth (19 novembre 2005). (en) Oggetto: Proposta di integrazione LLVM / GCC " . Mailing list per lo sviluppo di GCC.
  6. Apostolou, Dimitrios (5 luglio 2011). (en) "GSOC - Student Roundup" . Mailing list per lo sviluppo di GCC.
  7. Steve Naroff (25 maggio 2007). Nuovo front-end LLVM C  " (diapositive) nella riunione degli sviluppatori LLVM .  
  8. squadra Clang, clang: un frontend linguaggio C famiglia per LLVM
  9. Naroff, Steve (25 maggio 2007). "Nuovo front-end LLVM C" (diapositive). Riunione degli sviluppatori .
  10. (in) ["Clang - Caratteristiche e obiettivi: compilazione rapida e utilizzo ridotto della memoria" | http://clang.llvm.org/features.html ], ottobre 2007
  11. (in) Volker Simonis , "  Compiling the HotSpot VM with Clang  " ,10 febbraio 2011(accesso effettuato il 13 febbraio 2011 )  :“  Sebbene la compatibilità complessiva di GCC sia eccellente e i tempi di compilazione siano impressionanti, le prestazioni del codice generato sono ancora carenti rispetto a una versione recente di GCC.  "
  12. (in) "  Benchmarking & LLVM Clang Against GCC 4.5  " , Phoronix ,21 aprile 2010(accesso effettuato il 13 febbraio 2011 )  : “  I binari di LLVM-GCC e Clang hanno entrambi lottato per competere con GCC 4.5.0 nel benchmark HMMer a tempo di una ricerca nel database Pfam. LLVM-GCC e Clang erano circa il 23% più lenti (...) Sebbene LLVM / Clang non sia il campione delle prestazioni a questo punto, entrambi i componenti continuano ad essere in fase di sviluppo molto attivo e si spera che ci saranno più notizie da riportare in arrivo mesi  "
  13. [Viene rilasciato il compilatore DirectX http://www.toolinux.com/Le-compilateur-de-DirectX-se ]

Articolo correlato

link esterno

(it) Sito ufficiale