1. 程式人生 > >轉:LLVM與Clang的概述及關系

轉:LLVM與Clang的概述及關系

鏈接 att lang style clang 模塊化 這也 接下來 spa

轉:http://www.cnblogs.com/saintlas/p/5738739.html

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架構

轉:LLVM與Clang的概述及關系