標籤:

LLVM 相比與其他 Compiler Infrastructure 有什麼優勢?

已經有不少Compiler Infrastructure, 例如

ROSE compiler infrastructure

Common Compiler Infrastructure

LLVM相比與這些有什優劣? 什麼原因讓LLVM更加為人所知或者採用?


其實我看見有邀請我回答這個問題,我還是很激動的,因為我看見題主又列舉出來了兩個Compiler Infrastructure,而且是我沒有關注到的。首先就ROSE來說,我去參考了ROSE的網站和相關文檔,我覺得官方網站的那幅圖已經闡述的很好了:

其實ROSE是一個Translator,同時支持一些特定的Binary Files,而它若解析C/C++,是利用的EDG FE,然後產出的並非是最終Binary,而是Unparser,所以它的用途和LLVM不同,ROSE比較適合做代碼分析器。

而對於Common Compiler Insfrastructure,看一下簡介:

Microsoft Research Common Compiler Infrastructure (CCI) is a set of libraries and an application programming interface (API) that supports some of the functionality that is common to compilers and related programming tools.

The CCI Metadata API allows applications to efficiently analyze or modify .NET assemblies, modules, and debugging (PDB) files. CCI Metadata supports the functionality of the .NET System.Reflection andSystem.Reflection.Emit APIs, but with much better performance. It also provides additional functionality that is not available in either .NET API.

然後我想我就不需要說明什麼了,這更加和LLVM這樣的是兩個不同的領域了。

而對於LLVM的優勢,我想直接參考Chris的論文即可:http://llvm.org/pubs/2002-12-LattnerMSThesis.pdf 我在做我的畢業設計時,讀過這篇文章很多次,寫的很好,也很容易看出來LLVM的目標很宏偉,LLVM IR是其核心所在,你所需要的東西這篇文章都有。而至於LLVM為什麼這麼出名,我想Clang是一大原因,更重要的是背後撐腰的是Apple。


推薦閱讀:

LLVM 怎樣入門和上手?
編譯時能否關閉clang的所有優化?我試過-O0,但是編譯成彙編之後還是自動進行了一些優化?
是否可以將不同語言編譯到LLVM IR層面鏈接?如果可以,與傳統的編譯為目標代碼鏈接有什麼不同?
libgccjit和LLVM相比,有哪些優點?

TAG:LLVM |