我一直都在聽有關LLVM的信息。 在Perl中,而後在Haskell中,而後有人以其餘某種語言使用它? 它是什麼? html
LLVM編譯器基礎結構對於在代碼上執行優化和轉換特別有用。 它還由許多服務於不一樣用途的工具組成。 llvm-prof是一種性能分析工具,可以讓您執行執行性能分析以識別程序熱點。 Opt是一種優化工具,可提供各類優化途徑(例如,消除死代碼)。 前端
重要的是,LLVM爲您提供了編寫本身的通行證的庫。 例如,若是您須要對傳遞給程序某些功能的某些參數進行範圍檢查,則編寫一個簡單的LLVM Pass就足夠了。 算法
有關編寫本身的通行證的更多信息,請查看此http://llvm.org/docs/WritingAnLLVMPass.html 編程
LLVM基本上是一個用於構建編譯器和/或面向語言的軟件的庫。 基本要點是,儘管您擁有多是最多見的編譯器套件的gcc,但它並非可重用的。 從gcc提取組件並使用它來構建您本身的應用程序很難。 LLVM經過構建一套「模塊化和可重用的編譯器和工具鏈技術」很好地解決了這個問題,任何人均可以使用它來構建編譯器和麪向語言的軟件。 後端
LLVM是用於構建,優化和產生中間和/或二進制機器代碼的庫。 app
LLVM可用做編譯器框架,您能夠在其中提供「前端」(解析器和詞法分析器)和「後端」(將LLVM的表示形式轉換爲實際機器代碼的代碼)。 框架
LLVM還能夠充當JIT編譯器-它支持x86 / x86_64和PPC / PPC64程序集生成,並具備針對編譯速度的快速代碼優化。 編程語言
若是您有興趣,能夠在其演示頁面中使用從C或C ++代碼生成的LLVM機器碼,但自2013年以來,該演示頁面目前已被禁用。 模塊化
LLVM(之前是指「低級虛擬機」,但如今再也不是)是一種用C ++編寫的編譯器基礎結構,旨在對編寫的程序進行編譯時,連接時,運行時和「空閒時」優化。以任意編程語言。 LLVM最初是爲C / C ++實現的,其與語言無關的設計(並取得了成功)此後催生了各類各樣的前端,包括Objective C,Fortran,Ada,Haskell,Java字節碼,Python,Ruby,ActionScript,GLSL , 和別的。 工具
閱讀此以得到更多說明
同時檢查空載燕子
根據「 LLVM核心庫入門」一書(c):
實際上,名稱LLVM可能表示如下任何一種:
LLVM項目/基礎結構:這是組成一個完整編譯器的幾個項目的保護傘:前端,後端,優化器,彙編器,連接器,libc ++,compiler-rt和JIT引擎。 單詞「 LLVM」的含義例如在如下句子中:「 LLVM由多個項目組成」。
基於LLVM的編譯器:這是使用LLVM基礎結構部分或徹底構建的編譯器。 例如,編譯器可能將LLVM用於前端和後端,但使用GCC和GNU系統庫執行最終連接。 LLVM在如下句子中具備此含義,例如:「我使用LLVM將C程序編譯到MIPS平臺」。
LLVM庫:這是LLVM基礎結構的可重用代碼部分。 例如,LLVM在句子中具備如下含義:「個人項目使用LLVM經過其即時編譯框架生成代碼」。
LLVM核心:在中間語言級別進行的優化和後端算法構成了項目開始的LLVM核心。 LLVM在如下句子中具備此含義:「 LLVM和Clang是兩個不一樣的項目」。
LLVM IR:這是LLVM編譯器的中間表示。 LLVM在諸如「我構建了將本身的語言翻譯成LLVM的前端」之類的句子中使用時具備此含義。