Google的野心–Native Client+LLVM

认识Native Client

Native Client (Nacl) 是Google提出的一种让浏览器直接运行机器码的技术,让Web应用可以从客户机上获得更多的性能,同时又不会引起安全问题。这个技术类似于微软的ActiveX。程序员可以使用C++或者其他语言编写web应用程序,再通过Nacl发布。程序中可以调用一些系统服务中安全的API,如声卡或者图形显示等。Nacl能使用的本地系统调用都是已经规定好的,所以安全性有保证。这篇文章介绍如何使用Native Client。

使用Nacal实现图片编辑和分享的应用

图中,灰色部分是不安全的模块。其中IMC,即Inter-Module Communications,模块间通信.  SRPC,即Simple RPC, 简单的远程过程调用机制。 NPAPI,即Netscape Plugin Application Programming Interface,Netscape插件应用编程接口。

因为安全问题,所以Nacl的运行时环境必须禁止很多有安全隐患的系统调用,因此NaCl更加适用于纯计算,或者计算密集的应用,对于需要创建进程,访问文件系统的,通通都要毙掉。不过像cache一样,可信的存储应该可以进行。Nacl会首先做静态分析,在机器码中,找出不安全的系统调用和不安全的指令,这些都能通过反汇编搞定。但还得有运行时环境来保证模块间的通信,让Nacl模块可以和其他Nacl模块和浏览器交互。还有一个问题,硬件例外的处理。比如算数值时溢出了,段错误了,或者被外部中断,因为Nacl的运行时环境将Nacl模块的运行完全屏蔽,所以没辙,遇到终端会直接终止。

PNaCl-兼容可移植性和性能

有了C++之类的语言保证,NaCl的应用的运行效率就有了保证。但还需要开发者预先跟据指令集的不同,编译得到不同的机器码,再根据访问者的CPU分发相应的机器码。问题可想而知:兼容性,可移植性不好。于是Google 想到了热火朝天的LLVM(关于LLVM:《前瞻-全时优化和LLVM-1》《前瞻-全时优化和LLVM-2》《前瞻-LLVM大事记(2004-2010)》).PNaCl就诞生了。

使用LLVM开发Nacl应用流程

使用LLVM,将C/C++代码转换成LLVM中间表示。然后再将中间表示分发给访问者。避免了针对ISA的编译,又能提升性能。LLVM静态编译和动态执行的透明性又使得PNacl的代码更容易调试。LLVM的前端有可以增加诸如Fortran和Objectiv C之类的语言。有个问题,就是PNaCL得以单文件形式分发,不过幸好LLVM工具链提供了在做过程间优化时生成一个bitcode文件的功能。

PNaCl的执行模型

上图是PNacl的执行模型,Bitcode下载到客户机后,通过llc或者ld转换执行,在Nacl的运行时环境中执行。

PNaCl的未来

Google现在基于LLVM的有两个,unladen-swallow和Nacl。JavaScript会被Nacl替代吗?以后Google会用PNacl的后端来替代JavaScript的解释器V8吗?Python如果能用LLVM做后端,C/C++也能扩展到LLVM,那以后会是怎样?

或许有点多虑,就好像每一种语言刚刚出现的时候,都有人认为它会替代所有现有语言。但发展到今天,还没有哪种语言能一统江湖,安全、性能和可移植性本身就是矛盾的,不能兼顾,只有根据应用的取舍。

PNacl的问题
本来的用意是加快执行速度,现在先做一遍翻译,变成bitcode,再做一遍翻译,编程机器码。性能还有保证吗?这个项目2010年二月才开始。还有很长的路要走。

参考:

  1. http://code.google.com/p/unladen-swallow/
  2. http://en.wikipedia.org/wiki/JavaScript
  3. http://nativeclient.googlecode.com/svn/data/docs_tarball/nacl/googleclient/native_client/documentation/getting_started.html
  4. http://nativeclient.googlecode.com/svn/data/docs_tarball/nacl/googleclient/native_client/documentation/nacl_paper.pdf
  5. http://nativeclient.googlecode.com/svn/data/docs_tarball/nacl/googleclient/native_client/README.html
  6. http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf
  7. http://googlecode.blogspot.com/2008/12/native-client-technology-for-running.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值