漫谈Google的Native Client(NaCl)技术
Native Client簡(jiǎn)介
Native Client是Google在瀏覽器領(lǐng)域推出的一個(gè)開(kāi)源技術(shù),它允許在瀏覽器內(nèi)編譯Web應(yīng)用程序,并執(zhí)行原生的編譯好的代碼。Native Client有以下幾個(gè)優(yōu)勢(shì)(參考Google官方英文介紹):
- 為Web提供更多的圖形,音頻以及其他功能:可以直接在web上執(zhí)行了原生的2D,3D圖形渲染程序(對(duì)Web游戲很有用),播放音視頻,響應(yīng)鼠標(biāo)鍵盤(pán)事件,多線程執(zhí)行代碼等等,而這一切,不需要瀏覽器安裝任何插件。
- 良好的可移植性:一個(gè)Web程序,只需要開(kāi)發(fā)一份代碼,即可以在所有平臺(tái)(包括Windows,linux,Mac等)運(yùn)行。
- 高安全性:安裝不被信任的桌面程序一級(jí)瀏覽器插件,可能帶來(lái)很高的安全風(fēng)險(xiǎn)(如程序攜帶木馬,病毒)。而Native client使用了雙層沙盒(sandbox)設(shè)計(jì)來(lái)保護(hù)用戶的本地資源。Native Client的架構(gòu)可以保證web要應(yīng)用的安全性,并且取得和原聲代碼相同或相近的性能。
- 方便從桌面遷移:很多開(kāi)發(fā)廠商之前花了大力氣開(kāi)發(fā)桌面程序,隨著云計(jì)算的到來(lái),越來(lái)越多的程序會(huì)被移植到互聯(lián)網(wǎng)上,由于NaCl支持直接執(zhí)行C/C++/Java等代碼,Native Client技術(shù)可以簡(jiǎn)化移植過(guò)程,減少移植成本。
- 高性能:Native Client可以讓web應(yīng)用已接近桌面程序的性能運(yùn)行,這就為在瀏覽器內(nèi)運(yùn)行性能苛刻的程序提供了基礎(chǔ),如大型3D游戲。
Native Client技術(shù)概要
有人說(shuō),Native Client技術(shù)是抄襲ActiveX的,個(gè)人不以為然,ActiveX主要是基于COM的,是操作系統(tǒng)提供一套可重用的接口給web應(yīng)用,而NaCl則是獨(dú)立于操作系統(tǒng)的。說(shuō)實(shí)話,感覺(jué)這技術(shù)更像是抄襲Adobe的Alchemy技術(shù),Achemy技術(shù)主要目的是解決Flash的低性能,這和Native Client是接近的,并且,這兩種技術(shù)都采用了LLVM技術(shù),具體可以看這篇文章http://yjrl.iteye.com/blog/320665。
LLVM?是 Low Level Virtual Machine 的簡(jiǎn)稱(chēng),這個(gè)庫(kù)提供了與編譯器相關(guān)的支持,能夠進(jìn)行程序語(yǔ)言的編譯期優(yōu)化、鏈接優(yōu)化、在線編譯優(yōu)化、代碼生成。簡(jiǎn)而言之,可以作為多種語(yǔ)言編譯器的后端來(lái)使用。而基于LLVM ,開(kāi)源社區(qū)開(kāi)發(fā)出了Clang,一個(gè)C++ 編寫(xiě)、基于 LLVM、發(fā)布于 LLVM BSD 許可證下的 C/C++/Objective C/Objective C++ 編譯器,其目標(biāo)(之一)就是超越 GCC。
Google 的Native Client的關(guān)鍵技術(shù)就是PNaCl(Portable Native Client Executables),而PNaCl實(shí)現(xiàn)的一個(gè)關(guān)鍵就是LLVM。下面是整個(gè)PNaCl結(jié)構(gòu)示意圖:?
在PNaCl中,開(kāi)發(fā)者通過(guò)一些前端編譯器將C/C++/Fortan源代碼用對(duì)應(yīng)的編譯器前端編譯成LLVM的中間字節(jié)碼,并且進(jìn)行優(yōu)化以及鏈接(這一整套流程可以在Google提供的SDK中完成)。之后,服務(wù)器將鏈接好的字節(jié)碼進(jìn)行分發(fā),在客戶端,通過(guò)LLVM的后端將字節(jié)碼翻譯成本地的二進(jìn)制對(duì)象文件,并且和本地的相關(guān)庫(kù)鏈接,最終執(zhí)行完成(這些功能應(yīng)該是集成在瀏覽器中的)。
另外,為了保證安全性,NaCl采用了沙盒技術(shù),具體可以看這篇論文:《Native Client: A Sandbox for Portable, Untrusted x86 Native Code》。
參考:
http://www.lingcc.com/2010/06/02/10955/
http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf
總結(jié)
以上是生活随笔為你收集整理的漫谈Google的Native Client(NaCl)技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Web本地计算发展史
- 下一篇: 三十分钟掌握STL(Using STL)