The invention provides an abstraction layer of script engine interface and its application method, which relates to the field of computer software, including macro module, script and C++ object mapping table, script Engine module, Value module, AutoHandleScope module, Class module, State module, Object module and HandleObject module. The invention can easily adapt different JavaScript or even other non-JavaScript script engines to ensure that the performance of calling between script language and native language does not decline, and at the same time, it can easily switch or upgrade the underlying script engine without modifying any binding code; the design is more efficient, and the code is called from script layer to user. The invocation of C++ layer is determined by macro during the compilation of binding code; the interface of abstract layer adopts object-oriented design, which is concise, meets all the functions needed to write binding code, and supports the mainstream JavaScript script engine on the market.
【技术实现步骤摘要】
一种脚本引擎接口抽象层及其应用方法
本专利技术涉及计算机软件领域,尤其是一种脚本引擎接口抽象层及其应用方法。
技术介绍
脚本绑定技术是指通过脚本引擎提供的接口将原生语言(C或C++)编写的类和方法注册到脚本层供脚本调用的一种技术。市面上主流的JavaScript脚本引擎有V8、JavaScriptCore、SpiderMonkey,ChakraCore,它们分别是Chrome、Safari、Firefox、微软Edge浏览器内嵌的JavaScript脚本引擎。不同脚本引擎提供的C++接口是不同的,甚至同一个脚本引擎在不同的版本提供C++接口也存在差异,这导致C++与脚本交互的绑定代码也存在很大差异。基于一种脚本引擎接口编写的绑定代码不可能通过简单的配置切换到其它脚本引擎,同一脚本引擎的不同版本也可能存在接口兼容问题导致无法轻松升级脚本引擎。当一个应用在不同平台需要不同的脚本引擎时,比如安卓手机上使用V8引擎,苹果手机使用系统内嵌的JavaScriptCore引擎,现有技术方案有:1、分别为不同平台使用不同的脚本引擎编写不一样的绑定代码,即需要多份绑定代码,维护成本翻倍,无法切换底层引擎。2018年初上线的微信小游戏采用此方案。2、NodeJS这个业界流行的开源库使用V8将一些C++编写的类型和方法注册到JavaScript脚本层中,开发者可以通过更易使用的JavaScript脚本语言编写复杂的客户端与服务端逻辑。微软ChakraCore团队通过node-chakracore项目成功地将NodeJS的底层切换为ChakraCore。Mozilla公司也使用类 ...
【技术保护点】
1.一种脚本引擎接口抽象层,其特征在于,包括宏模块、脚本与C++对象映射表、ScriptEngine模块、Value模块、AutoHandleScope模块、Class模块、State模块、Object模块、HandleObject模块,其中,所述宏模块用于解决不同脚本引擎回调函数参数类型和返回值类型不同的问题,不管底层使用什么引擎,开发者使用同一种回调函数的定义方式,定义完回调函数后,需要使用SE_BIND_XXX系列的宏对回调函数进行包装;所述脚本与C++对象映射表用于查询C++对象指针获取对应的脚本对象;所述ScriptEngine模块用于掌管脚本引擎的初始化、销毁、重启、C++模块注册、加载脚本、强制垃圾回收、脚本异常清理以及是否启用调试器;所述Value模块为脚本变量在C++层的引用;所述Object模块保存了对脚本对象的弱引用;所述HandleObject模块是一个辅助类,用于更加简单地管理Object模块中手动创建对象的释放、root和unroot操作;所述Class模块用于暴露C++类到脚本环境中,Class类型创建后,不需要手动释放内存,其占用内存会被抽象层自动处理; ...
【技术特征摘要】
1.一种脚本引擎接口抽象层,其特征在于,包括宏模块、脚本与C++对象映射表、ScriptEngine模块、Value模块、AutoHandleScope模块、Class模块、State模块、Object模块、HandleObject模块,其中,所述宏模块用于解决不同脚本引擎回调函数参数类型和返回值类型不同的问题,不管底层使用什么引擎,开发者使用同一种回调函数的定义方式,定义完回调函数后,需要使用SE_BIND_XXX系列的宏对回调函数进行包装;所述脚本与C++对象映射表用于查询C++对象指针获取对应的脚本对象;所述ScriptEngine模块用于掌管脚本引擎的初始化、销毁、重启、C++模块注册、加载脚本、强制垃圾回收、脚本异常清理以及是否启用调试器;所述Value模块为脚本变量在C++层的引用;所述Object模块保存了对脚本对象的弱引用;所述HandleObject模块是一个辅助类,用于更加简单地管理Object模块中手动创建对象的...
【专利技术属性】
技术研发人员:陈建华,凌华彬,
申请(专利权)人:厦门雅基软件有限公司,
类型:发明
国别省市:福建,35
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。