Node.js 指南(ABI稳定性)

ABI稳固性

引见

应用顺序二进制接口(ABI)是顺序挪用函数和运用其他编译顺序的数据构造的一种要领,它是应用顺序编程接口(API)的编译版本,换句话说,头文件形貌了类、函数、数据构造、罗列和常量,使应用顺序能够经由过程编译到一组地点来实行所需的使命,和预期参数值和内存构造大小以及编译ABI供应顺序的规划。

必需编译运用ABI的应用顺序,以使可用地点、预期参数值、内存构造大小和规划与编译ABI供应顺序的那些一致,这一般经由过程编译ABI供应顺序供应的头文件来完成。

由于ABI的供应者和ABI的用户能够在差别的时候运用差别版本的编译器举行编译,因而确保ABI兼容性的一部份义务在于编译器。差别版本的编译器,或许由差别的供应商供应,必需从具有特定内容的头文件天生雷同的ABI,而且必需依据头文件中形貌所发生的ABI商定,运用接见给定头中形貌的API的ABI为应用顺序天生代码。当今编译器具有相当好的跟踪纪录,即不损坏它们编译的应用顺序的ABI兼容性。

确保ABI兼容性的盈余义务在于团队保护头文件,这些头文件供应了在编译时在ABI中坚持稳固的API。能够仇人文件举行变动,但必需亲昵跟踪变动的性子,以确保在编译时,ABI的变动体式格局不会使ABI的现有效户与新版本不兼容。

Node.js中的ABI稳固性

Node.js供应由几个自力团队保护的头文件,比方,node.js团队保护诸如node.h和node_buffer.h之类的头文件。v8.h由V8团队保护,只管与Node.js团队亲昵合作,但该团队是自力的,而且有本身的时候表和优先级。因而,Node.js团队只能部份掌握项目供应的头中引入的变动,因而,Node.js项目采纳了语义版本掌握。这可确保项目供应的API将为一个重要版本中宣布的Node.js的一切次要版本和修补顺序版本供应稳固的ABI,在实践中,这意味着Node.js项目已许诺确保针对给定重要版本的Node.js编译的Node.js原生插件将在由编译它的重要版本中的任何Node.js次要或补丁版本加载时胜利加载。

N-API

对Node.js装备API的需求已涌现,这致使ABI在多个Node.js重要版本中坚持稳固,建立如许一个API的效果以下:

  • JavaScript言语从很早就最先与本身兼容,而实行JavaScript代码的引擎的ABI随Node.js的每一个重要版本而变化。这意味着完整用JavaScript编写的Node.js包构成的应用顺序无需从新编译、从新安装或从新部署,由于Node.js的新重要版本被放入临盆环境中,此类应用顺序运行在该环境中。相反,假如应用顺序依靠于包含原生插件的包,则只要将新的重要版本的Node.js引入临盆环境,就必需从新编译、从新安装和从新部署应用顺序。包含原生插件的Node.js包与完整用JavaScript编写的包之间的这类差别增添了依靠原生插件的临盆体系的保护累赘。
  • 其他项目已最先天生JavaScript接口,这些接口本质上是Node.js的替换完成,由于这些项目一般构建在与V8差别的JavaScript引擎上,因而它们的原生插件必定采纳差别的构造并运用差别的API。但是,在Node.js JavaScript API的差别完成中运用单个API作为原生插件将许可这些项目应用缭绕Node.js积聚的JavaScript包的生态体系。
  • Node.js未来能够包含差别的JavaScript引擎,这意味着,在外部,一切Node.js接口将坚持稳定,但V8头文件将不存在。假如与JavaScript引擎无关的API不是由Node.js起首供应并由原生插件采纳,那末如许的步骤一般会致使Node.js生态体系的中缀,特别是原生插件的中缀。

为此,Node.js在版本8.6.0中引入了N-API,并将其标记为Node.js 8.12.0中项目的稳固组件。API在头文件node_api.hnode_api_types.h中定义,并供应逾越Node.js重要版本边境的前向兼容性保证,保证能够申明以下:

N-API的给定版本n将在宣布它的Node.js的重要版本中供应,以及Node.js的一切后续版本,包含后续重要版本。

原生插件作者能够经由过程确保插件仅运用node_api.h中定义的API以及node_api_types.h中定义的数据构造和常量来应用N-API前向兼容性保证。经由过程如许做,作者经由过程向临盆用户表明,关于他们的应用顺序来讲,增添原生插件不会增添保护累赘,就像增添纯JavaScript编写的包一样。

N-API已版本化,由于有时会增添新API,与语义版本掌握差别,N-API版本掌握是积累的。也就是说,每一个版本的N-API都转达了与semver体系中的次要版本雷同的寄义,意味着对N-API所做的一切变动都将向后兼容。另外,在试验标志下增添了新的N-API,以便社区有机会在临盆环境中考核它们。

试验状况意味着,虽然已注重确保未来没必要以ABI不兼容的体式格局修正新API,在临盆中还没有充分证明其准确和有效的设想,因而,在终究归入行将推出的N-API版本之前,能够会举行ABI不兼容的变动。也就是说,前向兼容性保证还没有涵盖试验性N-API。

上一篇:怎样宣布N-API包

    原文作者:博弈
    原文地址: https://segmentfault.com/a/1190000017486513
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞