[發(fā)明專利]一種腳本引擎接口抽象層及其應(yīng)用方法在審
| 申請(qǐng)?zhí)枺?/td> | 201810515982.6 | 申請(qǐng)日: | 2018-05-25 |
| 公開(kāi)(公告)號(hào): | CN108874374A | 公開(kāi)(公告)日: | 2018-11-23 |
| 發(fā)明(設(shè)計(jì))人: | 陳建華;凌華彬 | 申請(qǐng)(專利權(quán))人: | 廈門雅基軟件有限公司 |
| 主分類號(hào): | G06F8/30 | 分類號(hào): | G06F8/30 |
| 代理公司: | 北京聯(lián)瑞聯(lián)豐知識(shí)產(chǎn)權(quán)代理事務(wù)所(普通合伙) 11411 | 代理人: | 張清彥 |
| 地址: | 361000 福建省廈門*** | 國(guó)省代碼: | 福建;35 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 腳本引擎 抽象層 綁定 調(diào)用 計(jì)算機(jī)軟件 代碼編譯 腳本語(yǔ)言 面向?qū)ο?/a> 宏模塊 腳本層 映射表 腳本 適配 應(yīng)用 主流 升級(jí) 語(yǔ)言 保證 | ||
本發(fā)明提出腳本引擎接口抽象層及其應(yīng)用方法,涉及計(jì)算機(jī)軟件領(lǐng)域,包括宏模塊、腳本與C++對(duì)象映射表、ScriptEngine模塊、Value模塊、AutoHandleScope模塊、Class模塊、State模塊、Object模塊、HandleObject模塊。本發(fā)明可輕松適配不同的JavaScript甚至其它非JavaScript腳本引擎,保證腳本語(yǔ)言與原生語(yǔ)言之間調(diào)用的性能不下降的同時(shí),做到輕松切換或升級(jí)底層腳本引擎且不需要修改任何的綁定代碼;設(shè)計(jì)更加高效,代碼從腳本層調(diào)用到用戶C++層的調(diào)用是通過(guò)宏的方式在綁定代碼編譯期間確定的;抽象層接口采用面向?qū)ο蟮脑O(shè)計(jì),接口簡(jiǎn)潔,滿足編寫綁定代碼需要的所有功能,支持市面上主流的JavaScript腳本引擎。
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)軟件領(lǐng)域,尤其是一種腳本引擎接口抽象層及其應(yīng)用方法。
背景技術(shù)
腳本綁定技術(shù)是指通過(guò)腳本引擎提供的接口將原生語(yǔ)言(C或C++)編寫的類和方法注冊(cè)到腳本層供腳本調(diào)用的一種技術(shù)。市面上主流的JavaScript腳本引擎有V8、JavaScriptCore、SpiderMonkey,ChakraCore,它們分別是Chrome、Safari、Firefox、微軟Edge瀏覽器內(nèi)嵌的JavaScript腳本引擎。不同腳本引擎提供的C++接口是不同的,甚至同一個(gè)腳本引擎在不同的版本提供C++接口也存在差異,這導(dǎo)致C++與腳本交互的綁定代碼也存在很大差異。基于一種腳本引擎接口編寫的綁定代碼不可能通過(guò)簡(jiǎn)單的配置切換到其它腳本引擎,同一腳本引擎的不同版本也可能存在接口兼容問(wèn)題導(dǎo)致無(wú)法輕松升級(jí)腳本引擎。
當(dāng)一個(gè)應(yīng)用在不同平臺(tái)需要不同的腳本引擎時(shí),比如安卓手機(jī)上使用V8引擎,蘋果手機(jī)使用系統(tǒng)內(nèi)嵌的JavaScriptCore引擎,現(xiàn)有技術(shù)方案有:
1、分別為不同平臺(tái)使用不同的腳本引擎編寫不一樣的綁定代碼,即需要多份綁定代碼,維護(hù)成本翻倍,無(wú)法切換底層引擎。2018年初上線的微信小游戲采用此方案。
2、NodeJS這個(gè)業(yè)界流行的開(kāi)源庫(kù)使用V8將一些C++編寫的類型和方法注冊(cè)到JavaScript腳本層中,開(kāi)發(fā)者可以通過(guò)更易使用的JavaScript腳本語(yǔ)言編寫復(fù)雜的客戶端與服務(wù)端邏輯。微軟ChakraCore團(tuán)隊(duì)通過(guò)node-chakracore項(xiàng)目成功地將NodeJS的底層切換為ChakraCore。Mozilla公司也使用類似方案(spidernode)將NodeJS底層切換為SpiderMonkey腳本引擎。此類型的方案需要實(shí)現(xiàn)一套適配層,適配層的接口與V8引擎提供的接口完全一致,使用ChakraCore或者SpiderMonkey等非V8引擎提供的功能來(lái)適配V8的所有接口。這種方案的缺點(diǎn)為:1)需要用非V8引擎實(shí)現(xiàn)V8引擎的全部功能,實(shí)現(xiàn)邏輯較復(fù)雜。2)綁定代碼的編寫者需要深入了解復(fù)雜的V8引擎提供的接口,學(xué)習(xí)成本較高。3)未提供便捷方法快速切換腳本引擎。
3、Node N-API:從NodeJS 8.0開(kāi)始,Node官方提供了一套N-API,N-API是一套抽象層接口,此抽象層接口不隨著V8引擎接口的變化而變化,使用此API編寫Node插件的開(kāi)發(fā)者無(wú)需因?yàn)镹ode升級(jí)版本而修改綁定代碼和重新編譯插件,即插件的兼容性比NodeJS 8.0之前版本更高。此方案的缺點(diǎn)為:1)抽象層只適配了V8引擎,暫時(shí)無(wú)法適配其它腳本引擎;2)抽象層解決的問(wèn)題是插件升級(jí)問(wèn)題,并不是最優(yōu)性能的方案,即腳本接口的調(diào)用需要通過(guò)一層代碼中轉(zhuǎn)才能調(diào)用到用戶編寫的回調(diào)函數(shù),調(diào)用開(kāi)銷較大。
發(fā)明內(nèi)容
本發(fā)明一方面提供一種腳本引擎接口抽象層,包括宏模塊、腳本與C++對(duì)象映射表、ScriptEngine模塊、Value模塊、AutoHandleScope模塊、Class模塊、State模塊、Object模塊、HandleObject模塊,其中,
所述宏模塊用于解決不同腳本引擎回調(diào)函數(shù)參數(shù)類型和返回值類型不同的問(wèn)題,不管底層使用什么引擎,開(kāi)發(fā)者使用同一種回調(diào)函數(shù)的定義方式,定義完回調(diào)函數(shù)后,需要使用SE_BIND_XXX系列的宏對(duì)回調(diào)函數(shù)進(jìn)行包裝;
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于廈門雅基軟件有限公司,未經(jīng)廈門雅基軟件有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810515982.6/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專利網(wǎng)。
- 支持轉(zhuǎn)換引擎與映射規(guī)則相分離的模型轉(zhuǎn)換框架及其方法
- Widget引擎中使用第三方引擎解析腳本文件的方法和裝置
- 基于lua腳本交互信息的方法、Web引擎和嵌入式終端
- Widget引擎加載腳本插件的方法及Widget引擎
- 調(diào)用動(dòng)態(tài)鏈接庫(kù)的方法和裝置
- 用于隱私保護(hù)的具有雙腳本引擎的瀏覽器
- 一種腳本混淆方法及系統(tǒng)
- 腳本的加載控制方法及裝置
- 一種業(yè)務(wù)處理方法、裝置及電子設(shè)備和存儲(chǔ)介質(zhì)
- 基于解釋型語(yǔ)言的跨平臺(tái)通用協(xié)議解析方法、設(shè)備和介質(zhì)
- IDL調(diào)用裝置及調(diào)用方法
- 調(diào)用方法及調(diào)用系統(tǒng)
- 一種服務(wù)調(diào)用方法及裝置
- 服務(wù)調(diào)用方法、服務(wù)調(diào)用裝置及服務(wù)調(diào)用系統(tǒng)
- 組件調(diào)用方法、裝置及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 身份驗(yàn)證方法及裝置
- 系統(tǒng)調(diào)用處理方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)
- 一種數(shù)據(jù)調(diào)用方法、裝置、電子設(shè)備及存儲(chǔ)介質(zhì)
- 一種微服務(wù)請(qǐng)求重試的方法及終端
- 業(yè)務(wù)數(shù)據(jù)的處理方法、裝置及系統(tǒng)





