了解Clang/LLVM

[TOC]

1、LLVM是什么?

LLVM(Low Level Virtual Machine)是一個底層虛擬機,LLVM曾經有一部分功能對虛擬機有所幫助。
但是現在,LLVM所代表的基本和虛擬機沒有關系了,也不再作為一個縮寫使用了,而是直接作為一個名字使用。

那么LLVM到底是什么?

LLVM可以被看作是一系列的編譯器和工具鏈技術的集合,而且它們是模塊化并且是可重用的。這是LLVM官方的解釋。
原話是:
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
(官方定義永遠是準確精練的)

LLVM是一個編譯器;
LLVM是一個編譯器框架;
LLVM是一系列的編譯器工具;
LLVM是一個編譯器工具鏈;
LLVM是一個C++實現的開源軟件;

這幾種對LLVM的理解都對,但是也都是LLVM的一個方面,綜合起來就是一個完整的LLVM。
所以,從狹義上來說,可以把LLVM理解為一個編譯器,但是這個編譯器可不僅僅是個編譯器,它包含了編譯相關的各種工具鏈,并且有一些相對獨立的工具,而且它還是開源的。關鍵一點LLVM是搞編譯的,跟虛擬機已經完全沒關系了。

2、Clang是什么?

Clang是一個C、C++、OC語言的輕量級編譯器。
Clang由Apple公司開發(fā),源代碼授權使用BSD的開源授權。
Clang是由C++編寫,基于LLVM,發(fā)布于LLVM BSD許可證下的編譯器。
它與GNU C語言規(guī)范幾乎完全兼容,并增加了額外的特性。

那么來比較一下Clang和GCC。
Clang編譯速度更快,編譯產出更小、出錯提示更友好。
clang采用的是BSD協議,這是蘋果資助LLVM、FreeBSD淘汰GCC換用Clang的重要原因。
Clang是LLVM的一個編譯器前端。
由于優(yōu)秀的設計,使得Clang非常適合用于開發(fā)源代碼級別的分析工具。
Clang對源程序進行語法分析和語義分析,并將分析結果轉換為Abstract Syntax Tree(抽象語法樹),最后使用LLVM作為后端代碼的生成器。
Clang的開發(fā)目標是提供一個可以替代GCC的前端編譯器。
由于GNU編譯器套裝(GCC)系統龐大,而且Apple大量使用的OC在GCC中優(yōu)先級較低,同時GCC作為一個純粹的編譯系統,與IDE配合并不優(yōu)秀。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容