LLVM是構架編譯器(compiler)的框架系統,以C++編寫而成,用於優化以任意程序語言編寫的程序的編譯時間(compile-time)、連接時間(link-time)、運行時間(run-time)以及空閒時間(idle-time),對開發者保持開放,併兼容已有腳本。LLVM計劃啓動於2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持開展。2006年Chris Lattner加盟Apple Inc.並致力於LLVM在Apple開發體系中的應用。Apple也是LLVM計劃的主要資助者[引自百度百科]。前端
咱們能夠認爲LLVM是一個完整的編譯器架構,也能夠認爲它是一個用於開發編譯器、解釋器相關的庫。後端
在理解LLVM時,咱們能夠認爲它包括了一個狹義的LLVM和一個廣義的LLVM。廣義的LLVM其實就是指整個LLVM編譯器架構,包括了前端、後端、優化器、衆多的庫函數以及不少的模塊;而狹義的LLVM其實就是聚焦於編譯器後端功能(代碼生成、代碼優化、JIT等)的一系列模塊和庫。架構
接下來,簡要的介紹一下Clang。框架
Clang是一個C++編寫、基於LLVM、發佈於LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器。那麼爲何已經有了GCC還要開發Clang呢?Clang相比於GCC有什麼優點呢?模塊化
其實,這也是Clang當初在設計開發的時候所主要考慮的緣由。Clang是一個高度模塊化開發的輕量級編譯器,它的編譯速度快、佔用內存小、很是方便進行二次開發。函數
最後,咱們大概講一講LLVM和Clang的關係。咱們將它們對應於傳統的編譯器當中的幾個獨立的部分,這樣可以更加方便明確生動的表述。優化
其實,對應到這個圖中,咱們就能夠很是明確的找出它們的對應關係。Clang其實大體上能夠對應到編譯器的前端,主要處理一些和具體機器無關的針對語言的分析操做;編譯器的優化器部分和後端部分其實就是咱們以前談到的LLVM後端(狹義的LLVM);而總體的Compiler架構就是LLVM架構。設計