漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)

转自:http://hzx5.blog.163.com/blog/static/40744388201172531637729/


漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)  

上一篇文章介绍 Google 的 Native Client 技术的渊源及动力,解释了为什么 Google 要做这样一个技术。在这篇文章中,将介绍 Native Client 的一些技术概要。


Native Client简介

Native Client 是 Google 在浏览器领域推出的一个开源技术,它允许在浏览器内编译 Web 应用程序,并执行原生的编译好的代码。Native Client 有以下几个优势(参考 Google 官方英文介绍):

  • 为 Web 提供更多的图形,音频以及其他功能:可以直接在 web 上执行原生的 2D,3D 图形渲染程序(对 Web 游戏很有用),播放音视频,响应鼠标键盘事件,多线程执行代码等等,而这一切,不需要浏览器安装任何插件。
  • 良好的可移植性:一个 Web 程序,只需要开发一份代码,即可以在所有平台(包括 Windows,linux,Mac 等)运行。
  • 高安全性:安装不被信任的桌面程序一级浏览器插件,可能带来很高的安全风险(如程序携带木马,病毒)。而 Native client 使用了双层沙盒(sandbox)设计来保护用户的本地资源。Native Client 的架构可以保证 web 应用的安全性,并且取得和原声代码相同或相近的性能。
  • 方便从桌面迁移:很多开发厂商之前花了大力气开发桌面程序,随着云计算的到来,越来越多的程序会被移植到互联网上,由于 NaCl 支持直接执行 C/C++/Java 等代码,Native Client 技术可以简化移植过程,减少移植成本。
  • 高性能:Native Client 可以让 web 应用已接近桌面程序的性能运行,这就为在浏览器内运行性能苛刻的程序提供了基础,如大型 3D 游戏。

Native Client 技术概要

有人说,Native Client 技术是抄袭 ActiveX 的,个人不以为然,ActiveX 主要是基于 COM 的,是操作系统提供一套可重用的接口给 web 应用,而 NaCl 则是独立于操作系统的。说实话,感觉这技术更像是抄袭 Adobe 的 Alchemy 技术,Achemy 技术主要目的是解决 Flash 的低性能,这和 Native Client 是接近的,并且,这两种技术都采用了 LLVM 技术,具体可以看这篇文章 http://yjrl.iteye.com/blog/320665

LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后端来使用。而基于 LLVM ,开源社区开发出了 Clang,一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。

Google 的 Native Client 的关键技术就是 PNaCl(Portable Native Client Executables), 而 PNaCl 实现的一个关键就是 LLVM。下面是整个 PNaCl 结构示意图: 
PNaCl示意图


在 PNaCl 中,开发者通过一些前端编译器将 C/C++/Fortan 源代码用对应的编译器前端编译成 LLVM 的中间字节码,并且进行优化以及链接(这一整套流程可以在 Google 提供的SDK 中完成)。之后,服务器将链接好的字节码进行分发,在客户端,通过 LLVM 的后端将字节码翻译成本地的二进制对象文件,并且和本地的相关库链接,最终执行完成(这些功能应该是集成在浏览器中的)。

另外,为了保证安全性,NaCl 采用了沙盒技术,具体可以看这篇论文:《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

本文作者: Sigma    在新浪微博关注SigmaSigmaWeibo 
本文链接: http://www.sigma.me/2011/08/14/google-native-client-implementation.html 
本博客采用知识共享署名—非商业性-禁止演绎使用3.0协议进行许可,转载请保留作者和原文链接。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值