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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM