深入浅出让你理解什么是LLVM
生活随笔
收集整理的這篇文章主要介紹了
深入浅出让你理解什么是LLVM
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文
什么是LLVM
LLVM項目是模塊化、可重用的編譯器以及工具鏈技術的集合。
美國計算機協會 (ACM) 將其2012 年軟件系統獎項頒給了LLVM,之前曾經獲得此獎項的軟件和技術包括:Java、Apache、 Mosaic、the World Wide Web、Smalltalk、UNIX、Eclipse等等
創始人:Chris Lattner,亦是Swift之父
趣聞:Chris Latter本來只是想寫一個底層的虛擬機,這也是LLVM名字的由來,low level virtual machine,跟Java的JVM虛擬機一樣,可是后來,llvm從來沒有被用作過虛擬機,哪怕LLVM的名氣已經傳開了。所以人們決定仍然叫他LLVM,更多的時候只是當作“商標”一樣的感覺在使用,其實它跟虛擬機沒有半毛錢關系。官方描述如下
The name “LLVM” itself is not an acronym; it is the full name of the project. “LLVM”這個名稱本身不是首字母縮略詞; 它是項目的全名。
傳統的編譯器架構
-
Frontend:前端
-
詞法分析、語法分析、語義分析、生成中間代碼
-
Optimizer:優化器
-
中間代碼優化
-
Backend:后端
生成機器碼
-
不同的前端后端使用統一的中間代碼LLVM Intermediate Representation (LLVM IR)
-
如果需要支持一種新的編程語言,那么只需要實現一個新的前端
-
如果需要支持一種新的硬件設備,那么只需要實現一個新的后端
-
優化階段是一個通用的階段,它針對的是統一的LLVM IR,不論是支持新的編程語言,還是- 支持新的硬件設備,都不需要對優化階段做修改
-
相比之下,GCC的前端和后端沒分得太開,前端后端耦合在了一起。所以GCC為了支持一門新的語言,或者為了支持一個新的目標平臺,就 變得特別困難
-
LLVM現在被作為實現各種靜態和運行時編譯語言的通用基礎結構(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等)
什么是Clang
LLVM項目的一個子項目,基于LLVM架構的C/C++/Objective-C編譯器前端。
相比于GCC,Clang具有如下優點
-
編譯速度快:在某些平臺上,Clang的編譯速度顯著的快過GCC(Debug模式下編譯OC速度比GGC快3倍)
-
占用內存小:Clang生成的AST所占用的內存是GCC的五分之一左右
-
模塊化設計:Clang采用基于庫的模塊化設計,易于 IDE 集成及其他用途的重用
-
診斷信息可讀性強:在編譯過程中,Clang 創建并保留了大量詳細的元數據 (metadata),有利于調試和錯誤報告
-
設計清晰簡單,容易理解,易于擴展增強
LLVM整體架構,前端用的是clang,廣義的LLVM是指整個LLVM架構,一般狹義的LLVM指的是LLVM后端(包含代碼優化和目標代碼生成)。
源代碼(c/c++)經過clang–> 中間代碼(經過一系列的優化,優化用的是Pass) --> 機器碼
總結
以上是生活随笔為你收集整理的深入浅出让你理解什么是LLVM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenMP入门教程
- 下一篇: cuda grid 和block理解(二