NaCl和PNaCl

原文链接:https://developer.chrome.com/native-client/nacl-and-pnacl

本文档介绍了Native Client和 Portable Native Client之间的区别,并提供了何时使用每个客户端的建议。

原生客户(NaCl)

Native Client通过使用高级软件故障隔离(SFI)技术,可以在Web应用程序内安全地执行本机代码。Native Client允许您比传统Web技术更充分地利用客户端计算机的计算能力。它通过以接近本机的速度运行编译的C和C ++代码并暴露CPU的全部功能(包括SIMD向量和具有共享内存的多核处理)来实现此目的。

虽然Native Client提供操作系统独立性,但它要求您为每个硬件平台生成特定于体系结构的可执行文件(nexe)。这既不便携也不方便,使其不适合开放式网络。

Web上传统的应用程序分发方法是通过自包含的HTML,CSS,JavaScript和其他资源(图像等)捆绑,这些资源可以托管在服务器上并在Web浏览器中运行。通过这种类型的分发,今天创建的网站应该在几年后仍然可以在所有平台上运行。特定于体系结构的可执行文件显然不适合在Web上进行分发。因此,Native Client直到最近才被限制为通过Chrome网上应用店安装的应用程序和浏览器扩展程序。

便携式原生客户端(PNaCl)

PNaCl通过将编译过程分为两部分来解决可移植性问题:

  1. 将源代码编译为bitcode可执行文件(pexe),和
  2. 只要模块在浏览器中加载但在任何代码执行之前,就将bitcode转换为特定于主机的可执行文件。

此可移植性将Native Client与现有的开放Web技术(如JavaScript)保持一致。您可以将pexe作为应用程序的一部分(以及HTML,CSS和JavaScript)分发,并且用户的计算机只需运行它。

使用PNaCl,您将生成单个pexe,而不是多个特定于平台的nexes。由于pexe使用抽象的,体系结构和OS独立的格式,因此它不会受到上述可移植性问题的影响。虽然,PNaCl在某些操作系统上比在其他操作系统上更有效。PNaCl具有与NaCl相同的安全性。托管环境的未来版本在执行pexe时应该没有问题,即使在新架构上也是如此。此外,如果现有架构得到增强,则不需要重新编译pexe。在某些情况下,客户端转换将自动利用新功能。pexe可以是任何Web应用程序的一部分。它不必通过Chrome网上应用店分发。简而言之,

PNaCl是一种新技术,因此与NaCl相比仍然存在一些局限性。这些限制如下所述。

何时使用PNaCl

PNaCl是Native Client的首选工具链,也是在没有Google Web Store的情况下部署Native Client模块的唯一方法。除非您的项目受到“ 何时使用NaCl ”中描述的一个狭窄限制,否则您应该使用PNaCl。

Chrome支持pexe模块的转换及其在Web应用程序中的使用,无需安装浏览器插件或应用程序本身。Native Client和PNaCl是开源技术,我们希望它们将来会被添加到其他托管平台。

如果通过Chrome网上应用店进行受控分发是产品计划的重要组成部分,那么PNaCl的优势对您来说并不那么重要。但您仍然可以使用PNaCl工具链并通过Chrome Web Store分发您的应用程序,从而利用PNaCl的便利性,例如无需为所有支持的体系结构显式编译应用程序。

何时使用NaCl

如果以下任何一种情况适用于您的应用,请使用NaCl:

  • 您的应用程序需要特定于体系结构的指令,例如内联汇编。PNaCl试图提供高性能的便携式等价物。一个这样的例子是PNaCl的便携式SIMD矢量
  • 您的应用使用动态链接。PNaCl仅支持使用newlibC标准库的PNaCl端口进行静态链接。动态链接, glibc但PNaCl尚不支持。目前正在开展工作,以便在未来的PNaCl版本中实现动态链接。
  • 您的应用程序使用PNaCl的LLVM工具链不支持的某些GNU扩展,例如为计算goto或嵌套函数获取标签的地址。

CC-By 3.0许可下提供的内容

你可能感兴趣的:(谷歌Google,Native,Client,翻译谷歌官方Native,Client开发手册)