国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Simon_Zhou / 1276人閱讀

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

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的用戶可以在不同的時間使用不同版本的編譯器進(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)隊維護(hù)頭文件,這些頭文件提供了在編譯時在ABI中保持穩(wěn)定的API。可以對頭文件進(jìn)行更改,但必須密切跟蹤更改的性質(zhì),以確保在編譯時,ABI的更改方式不會使ABI的現(xiàn)有用戶與新版本不兼容。

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

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

N-API

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

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

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

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

為此,Node.js在版本8.6.0中引入了N-API,并將其標(biāo)記為Node.js 8.12.0中項目的穩(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)用戶表明,對于他們的應(yīng)用程序來說,添加原生插件不會增加維護(hù)負(fù)擔(dān),就像添加純JavaScript編寫的包一樣。

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/100316.html

相關(guān)文章

  • Node.js 指南(目錄)

    Node.js 指南 Node.js?是基于Chrome的V8 JavaScript引擎構(gòu)建的JavaScript運行時。 常規(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)、定時器和process.nextTick() 不要阻塞事...

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

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

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

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

    JiaXinYi 評論0 收藏0
  • FIBOS快速入門

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

    SimonMa 評論0 收藏0
  • FIBOS快速入門

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

    pkhope 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<