官术网_书友最值得收藏!

1.10 LLVM和JIT

LLVM本來是伊利諾伊大學(xué)的一個研究項(xiàng)目,其目的是創(chuàng)建基于靜態(tài)單一任務(wù)(SSA)的現(xiàn)代的、類型安全的編譯方法。它擁有底層操作,具有靈活性,并且具有可以清晰地表示所有高級語言的能力。它實(shí)際上是模塊化、可重用編譯器和工具鏈技術(shù)的集合。LLVM不用對傳統(tǒng)虛擬機(jī)做太多修改,下面列舉LLVM的一些特性。

? 創(chuàng)建LLVM的核心庫提供了現(xiàn)代的源和目標(biāo)的獨(dú)立優(yōu)化,并且支持許多流行CPU的代碼生成,這些庫是圍繞LLVM中間表示(LLVM IR)構(gòu)建的。

? Clang是一個LLVM原生的C/C++/Objective-C編譯器,旨在提供驚人的編譯速度(例如,在調(diào)試編譯Objective-C代碼時比GCC快3倍),可以提供非常有用的錯誤警告,并且為構(gòu)建優(yōu)秀的源代碼工具提供一個良好的平臺。

? DragonEgg將LLVM優(yōu)化器和代碼生成器與GCC解析器集成在一起,這使得LLVM支持編譯Ada、Fortran和GCC編譯器支持的其他語言,并訪問Clang不支持的C語言特性。

? LLDB項(xiàng)目以LLVM和Clang提供的庫為基礎(chǔ),提供了一個出色的本地調(diào)試器。它具有Clang AST和表達(dá)式解析器、LLVM JIT、LLVM反匯編器等諸多功能,因此提供了出色的使用體驗(yàn),并且在加載符號時相比GDB也要快得多,且內(nèi)存效率更高。

? SAFECode項(xiàng)目是針對C/C++程序內(nèi)存安全的編譯器。它通過運(yùn)行時檢查代碼,以便在第一時間檢測出內(nèi)存安全錯誤(例如,緩沖區(qū)溢出),保護(hù)軟件免于安全攻擊,也可以像Valgrind一樣用作內(nèi)存安全錯誤調(diào)試工具。

在計(jì)算中,Julia使用JIT編譯(也被稱為動態(tài)翻譯),編譯執(zhí)行在程序運(yùn)行時,而不是在程序運(yùn)行前。在大多數(shù)情況下,代碼需要被轉(zhuǎn)換為機(jī)器代碼,然后直接執(zhí)行,但也可以被轉(zhuǎn)換為另一種格式,JIT編譯器通常不斷地分析正在執(zhí)行的代碼,并且識別代碼的一部分,使得從編譯中獲得的性能加速超過編譯該代碼的性能開銷。另外,LLVM JIT編譯器可以在運(yùn)行時從程序中優(yōu)化掉不必要的靜態(tài)分支,此功能用于Mac OS X 10.5 Leopard的OpenGL管道,以支持所缺少的硬件功能。

主站蜘蛛池模板: 金山区| 中江县| 汕尾市| 扶沟县| 巴楚县| 乌拉特前旗| 梁平县| 阳山县| 潼南县| 兴山县| 阿拉善右旗| 将乐县| 新安县| 平武县| 微山县| 集安市| 高邑县| 清水县| 武山县| 元阳县| 来安县| 高雄县| 神农架林区| 长沙县| 怀安县| 博客| 丰顺县| 昔阳县| 施秉县| 磐安县| 历史| 新建县| 平顺县| 自贡市| 凌源市| 修武县| 新龙县| 博野县| 依兰县| 德保县| 阳西县|