Clang與LLVM的關係

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的關係。我們將它們對應於傳統的編譯器當中的幾個獨立的部分,這樣能夠更加方便明確生動的表述。
llvm架構

其實,對應到這個圖中,我們就可以非常明確的找出它們的對應關係。Clang其實大致上可以對應到編譯器的前端,主要處理一些和具體機器無關的針對語言的分析操作;編譯器的優化器部分和後端部分其實就是我們之前談到的LLVM後端(狹義的LLVM);而整體的Compiler架構就是LLVM架構

原文地址:https://blog.csdn.net/baidu_24256693/article/details/79905396

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章