1. 程式人生 > >LLVM與Clang的概述及關係

LLVM與Clang的概述及關係

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