成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Node.js 指南(ABI穩(wěn)定性)

Simon_Zhou / 1361人閱讀

摘要:確保兼容性的剩余責(zé)任在于團(tuán)隊(duì)維護(hù)頭文件,這些頭文件提供了在編譯時(shí)在中保持穩(wěn)定的。中的穩(wěn)定性提供由幾個(gè)獨(dú)立團(tuán)隊(duì)維護(hù)的頭文件,例如,團(tuán)隊(duì)維護(hù)諸如和之類的頭文件。由團(tuán)隊(duì)維護(hù),盡管與團(tuán)隊(duì)密切合作,但該團(tuán)隊(duì)是獨(dú)立的,并且有自己的時(shí)間表和優(yōu)先級(jí)。

ABI穩(wěn)定性 介紹

應(yīng)用程序二進(jìn)制接口(ABI)是程序調(diào)用函數(shù)和使用其他編譯程序的數(shù)據(jù)結(jié)構(gòu)的一種方法,它是應(yīng)用程序編程接口(API)的編譯版本,換句話說,頭文件描述了類、函數(shù)、數(shù)據(jù)結(jié)構(gòu)、枚舉和常量,使應(yīng)用程序能夠通過編譯到一組地址來執(zhí)行所需的任務(wù),和預(yù)期參數(shù)值和內(nèi)存結(jié)構(gòu)大小以及編譯ABI提供程序的布局。

必須編譯使用ABI的應(yīng)用程序,以使可用地址、預(yù)期參數(shù)值、內(nèi)存結(jié)構(gòu)大小和布局與編譯ABI提供程序的那些一致,這通常通過編譯ABI提供程序提供的頭文件來完成。

由于ABI的提供者和ABI的用戶可以在不同的時(shí)間使用不同版本的編譯器進(jìn)行編譯,因此確保ABI兼容性的一部分責(zé)任在于編譯器。不同版本的編譯器,也許由不同的供應(yīng)商提供,必須從具有特定內(nèi)容的頭文件生成相同的ABI,并且必須根據(jù)頭文件中描述所產(chǎn)生的ABI約定,使用訪問給定頭中描述的API的ABI為應(yīng)用程序生成代碼。現(xiàn)今編譯器具有相當(dāng)好的跟蹤記錄,即不破壞它們編譯的應(yīng)用程序的ABI兼容性。

確保ABI兼容性的剩余責(zé)任在于團(tuán)隊(duì)維護(hù)頭文件,這些頭文件提供了在編譯時(shí)在ABI中保持穩(wěn)定的API。可以對(duì)頭文件進(jìn)行更改,但必須密切跟蹤更改的性質(zhì),以確保在編譯時(shí),ABI的更改方式不會(huì)使ABI的現(xiàn)有用戶與新版本不兼容。

Node.js中的ABI穩(wěn)定性

Node.js提供由幾個(gè)獨(dú)立團(tuán)隊(duì)維護(hù)的頭文件,例如,node.js團(tuán)隊(duì)維護(hù)諸如node.h和node_buffer.h之類的頭文件。v8.h由V8團(tuán)隊(duì)維護(hù),盡管與Node.js團(tuán)隊(duì)密切合作,但該團(tuán)隊(duì)是獨(dú)立的,并且有自己的時(shí)間表和優(yōu)先級(jí)。因此,Node.js團(tuán)隊(duì)只能部分控制項(xiàng)目提供的頭中引入的更改,因此,Node.js項(xiàng)目采用了語義版本控制。這可確保項(xiàng)目提供的API將為一個(gè)主要版本中發(fā)布的Node.js的所有次要版本和修補(bǔ)程序版本提供穩(wěn)定的ABI,在實(shí)踐中,這意味著Node.js項(xiàng)目已承諾確保針對(duì)給定主要版本的Node.js編譯的Node.js原生插件將在由編譯它的主要版本中的任何Node.js次要或補(bǔ)丁版本加載時(shí)成功加載。

N-API

對(duì)Node.js配備API的需求已經(jīng)出現(xiàn),這導(dǎo)致ABI在多個(gè)Node.js主要版本中保持穩(wěn)定,創(chuàng)建這樣一個(gè)API的動(dòng)機(jī)如下:

JavaScript語言從很早就開始與自身兼容,而執(zhí)行JavaScript代碼的引擎的ABI隨Node.js的每個(gè)主要版本而變化。這意味著完全用JavaScript編寫的Node.js包組成的應(yīng)用程序無需重新編譯、重新安裝或重新部署,因?yàn)镹ode.js的新主要版本被放入生產(chǎn)環(huán)境中,此類應(yīng)用程序運(yùn)行在該環(huán)境中。相反,如果應(yīng)用程序依賴于包含原生插件的包,則只要將新的主要版本的Node.js引入生產(chǎn)環(huán)境,就必須重新編譯、重新安裝和重新部署應(yīng)用程序。包含原生插件的Node.js包與完全用JavaScript編寫的包之間的這種差異增加了依賴原生插件的生產(chǎn)系統(tǒng)的維護(hù)負(fù)擔(dān)。

其他項(xiàng)目已經(jīng)開始生成JavaScript接口,這些接口本質(zhì)上是Node.js的替代實(shí)現(xiàn),由于這些項(xiàng)目通常構(gòu)建在與V8不同的JavaScript引擎上,因此它們的原生插件必然采用不同的結(jié)構(gòu)并使用不同的API。然而,在Node.js JavaScript API的不同實(shí)現(xiàn)中使用單個(gè)API作為原生插件將允許這些項(xiàng)目利用圍繞Node.js積累的JavaScript包的生態(tài)系統(tǒng)。

Node.js將來可能包含不同的JavaScript引擎,這意味著,在外部,所有Node.js接口將保持不變,但V8頭文件將不存在。如果與JavaScript引擎無關(guān)的API不是由Node.js首先提供并由原生插件采用,那么這樣的步驟通常會(huì)導(dǎo)致Node.js生態(tài)系統(tǒng)的中斷,特別是原生插件的中斷。

為此,Node.js在版本8.6.0中引入了N-API,并將其標(biāo)記為Node.js 8.12.0中項(xiàng)目的穩(wěn)定組件。API在頭文件node_api.h和node_api_types.h中定義,并提供跨越Node.js主要版本邊界的前向兼容性保證,保證可以說明如下:

N-API的給定版本n將在發(fā)布它的Node.js的主要版本中提供,以及Node.js的所有后續(xù)版本,包括后續(xù)主要版本。

原生插件作者可以通過確保插件僅使用node_api.h中定義的API以及node_api_types.h中定義的數(shù)據(jù)結(jié)構(gòu)和常量來利用N-API前向兼容性保證。通過這樣做,作者通過向生產(chǎn)用戶表明,對(duì)于他們的應(yīng)用程序來說,添加原生插件不會(huì)增加維護(hù)負(fù)擔(dān),就像添加純JavaScript編寫的包一樣。

N-API已版本化,因?yàn)橛袝r(shí)會(huì)添加新API,與語義版本控制不同,N-API版本控制是累積的。也就是說,每個(gè)版本的N-API都傳達(dá)了與semver系統(tǒng)中的次要版本相同的含義,意味著對(duì)N-API所做的所有更改都將向后兼容。此外,在實(shí)驗(yàn)標(biāo)志下添加了新的N-API,以便社區(qū)有機(jī)會(huì)在生產(chǎn)環(huán)境中審核它們。

實(shí)驗(yàn)狀態(tài)意味著,雖然已經(jīng)注意確保將來不必以ABI不兼容的方式修改新API,在生產(chǎn)中尚未充分證明其正確和有用的設(shè)計(jì),因此,在最終納入即將推出的N-API版本之前,可能會(huì)進(jìn)行ABI不兼容的更改。也就是說,前向兼容性保證尚未涵蓋實(shí)驗(yàn)性N-API。

上一篇:如何發(fā)布N-API包

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/100316.html

相關(guān)文章

  • Node.js 指南(目錄)

    Node.js 指南 Node.js?是基于Chrome的V8 JavaScript引擎構(gòu)建的JavaScript運(yùn)行時(shí)。 常規(guī) 關(guān)于Node.js 入門指南 輕松分析Node.js應(yīng)用程序 Docker化Node.js Web應(yīng)用程序 遷移到安全的Buffer構(gòu)造函數(shù) Node.js核心概念 阻塞與非阻塞概述 Node.js事件循環(huán)、定時(shí)器和process.nextTick() 不要阻塞事...

    未東興 評(píng)論0 收藏0
  • Node.js API參考文檔(目錄)

    摘要:參考文檔是基于的引擎構(gòu)建的運(yùn)行時(shí)。關(guān)于文檔用法和示例斷言測(cè)試穩(wěn)定性穩(wěn)定模塊提供了一組簡(jiǎn)單的斷言測(cè)試,可用于測(cè)試不變量。存在和模式,但建議僅使用模式。類在全局作用域內(nèi),因此不太可能需要使用。以下所有示例均可供下載,可用作擴(kuò)展庫的起點(diǎn)。 Node.js v11.5.0 API參考文檔 Node.js?是基于Chrome的V8 JavaScript引擎構(gòu)建的JavaScript運(yùn)行時(shí)。 關(guān)...

    stormzhang 評(píng)論0 收藏0
  • Node.js 指南(如何發(fā)布N-API包)

    摘要:如何發(fā)布包使用包說明了以下步驟首先,發(fā)布非版本更新中的版本,對(duì)于,版本變?yōu)?。瀏覽發(fā)布清單確保測(cè)試演示文檔正常。因此,如果軟件包維護(hù)者選擇使用相同的標(biāo)記標(biāo)記軟件包的更高版本,則將收到更高版本的版本。 如何發(fā)布N-API包 使用包iotivity-node說明了以下步驟: 首先,發(fā)布非N-API版本: 更新package.json中的版本,對(duì)于iotivity-node,版本變?yōu)?....

    JiaXinYi 評(píng)論0 收藏0
  • FIBOS快速入門

    摘要:?jiǎn)?dòng)節(jié)點(diǎn)環(huán)境配置腳本創(chuàng)建文件夾,保存如下代碼至運(yùn)行開發(fā)環(huán)境運(yùn)行結(jié)果日志部分如果你看到了以上的消息,說明運(yùn)行成功,已經(jīng)開始區(qū)塊生產(chǎn)。 搭建一個(gè) FIBOS 開發(fā)環(huán)境需要安裝 fibos 和 fibos.js。 本章節(jié)示例代碼的目錄結(jié)構(gòu): hello_fibos/ ├── fibos_client │ ├── call.js //調(diào)用合約接口腳本文件 │ ├── initCli...

    SimonMa 評(píng)論0 收藏0
  • FIBOS快速入門

    摘要:?jiǎn)?dòng)節(jié)點(diǎn)環(huán)境配置腳本創(chuàng)建文件夾,保存如下代碼至運(yùn)行開發(fā)環(huán)境運(yùn)行結(jié)果日志部分如果你看到了以上的消息,說明運(yùn)行成功,已經(jīng)開始區(qū)塊生產(chǎn)。 搭建一個(gè) FIBOS 開發(fā)環(huán)境需要安裝 fibos 和 fibos.js。 本章節(jié)示例代碼的目錄結(jié)構(gòu): hello_fibos/ ├── fibos_client │ ├── call.js //調(diào)用合約接口腳本文件 │ ├── initCli...

    pkhope 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<