PNaCl:Google通过LLVM增强对Chrome中原生应用的支持

作者 Abel
Avram
 ,译者 臧秀涛 发布于
五月 20, 2013

通过支持运行LLVM位码(bitcode),Google增强了对Chrome中原生应用的支持。

Google I/O 2013大会上,Google宣布了预期加入的PNaCl(Portable
NaCl,读作“pinnacle”),继续推进对Chrome中原生应用的支持。PNaCl修改了原来的工具链,与之前为每种目标平台编译C/C++应用不同,现在开发者只需生成一份LLVM位码,之后位码可以由任一Chrome客户端加载,在本地转换为原生代码、验证和执行。

目前,x86-32、x86-64和ARM架构上的Chrome 29已支持PNaCl。在PNaCl完整发布之后,Chrome客户端能够在任意页面上运行原生模块,而无需将其打包为面向Chrome Web Store的应用。此外,PNaCl模块无需重新编译即可在未来的架构上运行。更为有趣的是,尽管目前只支持C/C++,理论上PNaCl模块可以以任何能够编译为LLVM位码的语言编写,包括ActionScript、Ada、D、Fortran、Haskell、Java字节码、Objective-C、Python、Ruby、Rust、Scala和C#等,拓宽了可以在Chrome中运行的遗留的和较新的原生应用的使用范围,这些应用只需要很小的调整,甚至无需调整。

2010年,4位Google工程师组成的一个团队在内部提出了PnaCl(PDF),几位作者想象的是这样一种解决方案:

  • 为编译的NaCl模块提供一种独立于指令集体系结构(ISA)的格式,无需重新编译即可支持多种目标平台。
  • 便于NaCl开发者构建、测试和部署可移植的执行模块。
  • 首先要支持x86-32、x86-64和ARM指令集,但要很容易支持未来其他流行的通用处理器。
  • 能够保持原生客户端所拥有的安全和性能属性。

PNaCl仍然使用原来的NaCl沙盒机制,以保证运行翻译位码时的安全性。具体逻辑如下图所示,客户端从服务器请求位码,然后针对自己的架构将其转换为原生的可执行代码。翻译可能在本地进行(在另一个NaCI沙盒内),也可能通过另一个实体远程执行。

PnaCl开发工具链支持Windows、Mac和Linux,SDK可以从项目网站下载

查看英文原文:PNaCl:
Google Adds More Native Support to Chrome via LLVM

Portable Native Client (PNaCl)

May 15, 2013

Portable Native Client (PNaCl, pronounced "pinnacle"), is an architecture-independent version of Native Client. Traditional C and C++ development uses a "compile → link" workflow that produces a platform- and architecture-dependent executable. In contrast,
PNaCl development uses an LLVM compiler infrastructure
with a "compile → link → translate" workflow. This workflow produces a "linked" binary that is provided as intermediate representation (IR) bitcode; the bitcode is then translated locally for a specific end-user system architecture. In conjunction with Native
Client's POSIX-like environment and the Pepper
API
 for media interfaces, PNaCl provides complete platform independence. With PNaCl, developers can create a single executable for all users. Because translation happens at the client, developers get the benefit of translations for new architectures, as
well as new translation optimizations, for free, as such features become available and without the need to rebuild their applications. Once PNaCl is fully released, users will be able to run PNaCl modules on any web page – applications will not need to be
deployed through the Chrome Web Store in order to run PNaCl modules.

For background information about PNacl, see PNaCl:
Portable Native Client Executables
 (PDF). For current release information, see the release
notes
.

时间: 2024-09-20 19:35:10

PNaCl:Google通过LLVM增强对Chrome中原生应用的支持的相关文章

Google Chrome中的高性能网络(一)

以下内容是"The Performance of Open Source Applications" (POSA)的草稿, 也是The Architecture of Open Source Applications的后继者. POSA囊括了一批针对性能的优化和设计,以及开发过程中的性能管理等内容的论文,预计在2013年春天发售[译注:国内有得等了]. By Ilya Grigorik on January 31, 2013 (翻译:Horky [http://blog.csdn.ne

五大原因导致 Google 放弃在 Chrome 中使用 Dart 语言

最新发布的 Dart 已经非常接近下版本 Dart 1.9,它加入了众人期待的 Dart 1.9 中的特性,如:异步/等待和 Dart 分析服务器,实际上,发布的时候它并没吸引到众人的眼光.为什么呢?主要是因为 Dart 不是 web 中的主流开发语言.同时也因为这个原因,Google 不会将其集成到 Chrome 浏览器中. 那么,是什么导致 Google 不将 Dart 作为重要的 web 开发语言呢? 主要有下面五个原因: JavaScript 在使用中占有统治地位--JavaScript

Google Chrome中的高性能网络(二)

Chrome Predictor的预测功能优化 Chrome会随着使用变得更快. 它这个特性是通过一个单例对象Predictor来实现的.这个对象在浏览器内核进程(Browser Kernel Process)中实例化,它唯一的职责就是观察和学习当前网络活动方式,提前预估用户下一步的操作.下面是一个示例: 用户将鼠标停留在一个链接上,就预示着一个用户的偏好以及下一步的浏览行为.这时Chrome就可以提前进行DNS Lookup及TCP握手.用户的点击操作平均需要将近200ms,在这个时间就可能处

Google Chrome中的高性能网络 (三)

使用预连接优化了TCP连接管理 已经预解析到了主机名,也有了由OmniBox和Chrome Predictor提供信号,预示着用户未来的操作.为什么再进一步连接到目标主机,在用户真正发起请求前完成TCP握手呢?这样就可省掉了另一个往返的延迟,轻易地就能为用户节省到上百毫秒.其实,这就是TCP预连接的工作. 通过访问chrome://dns 就可以看到TCP预连接的使用情况. 首先, Chrome检查它的socket pool里有没有目标主机可以复用的socket, 这些sockets会在sock

在Chrome中为无声电影加字幕

Google在上个月更新了Chrome的Web Speech API,使得开发人员可以在他们的各种Web应用中利用语音识别功能.该功能到现在为止都还没有被充分利用,但Google希望改变这一点,并推出了一个聪明的无声电影短片演示--"花生画廊"(The Peanut Gallery).其概念非常简单:用户只需进入这个网站,并从十多部经典电影片段中选择一个,就可以通过 Web 语音 API 来为无声电影添加字幕. 可选的电影片段包括<歌剧魅影>.<巴黎圣母院>.&

chrome 中使用 workspace 出现中文乱码问题

问题描述 chrome 中使用 workspace 出现中文乱码问题 chrome中workspace功能堪称神器,今天我第一次使用的时候却碰到了中文乱码问题,很是纠结. 环境:chrome36.0 项目采用的是GBK编码格式,在chrome中sources面板中js内的汉字是乱码形式的,然后我将js引用改成这样汉字就能正常显示了,接下来我又进行了workspace配置,但是当我Add folder to workspace后 项目内的js文件在sources面板中显示的汉字又成乱码了...不知

ava cript-为什么在chrome中插入百度地图之后页面文字就没法选中了?

问题描述 为什么在chrome中插入百度地图之后页面文字就没法选中了? 从这里生成的地图http://api.map.baidu.com/lbsapi/creatmap/index.html 在其他浏览器都正常,可以选中文字 有一个解决方法是把里面js文件的版本从1.1变成1.0.但不明白造成这种现象的原因是什么? 解决方案 看下你的层,有没有覆盖透明的层,把你的文本的zindex提高,另外看看 css 代码和js,有没有冲突的地方. 解决方案二: chrome中右键,审查元素,调出开发工具看是

我写的html代码为什么到chrome中多出几行?

问题描述 我写的html代码为什么到chrome中多出几行? 解决方案 应该是你的源码中的<a标签没有闭合 <li><a href="#">团委介绍</li> 改成 <li><a href="#">团委介绍</a></li> 主要超链接标签的闭合

《Ext JS权威指南》——3.3节在Chrome中调试

3.3 在Chrome中调试 谷歌浏览器目前也很多人在使用,它自身带了一个如图3-43所示的调试工具,功能和Firebug大同小异.在Chrome主菜单中打开工具菜单,在子菜单中选择开发人员工具即可打开.与Firebug比较,它少了DOM查看器,不过在Chrome中查看DOM节点的功能比在IE中强,例如,在控制台输入window,Chrome中会以树结构显示window对象的所有属性,而不是像IE那样使用省略号.但控制台中没有多行命令行模式,非常不方便.不过对Firebug的命令支持比微软强大.