ScriptX 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
ScriptX 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
ScriptX 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
ScriptX 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
ScriptX 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 Apache-2.0
开发语言 C/C++ 查看源码 »
操作系统 跨平台
软件类型 开源软件
开源组织 腾讯
地区 国产
投 递 者 OSCHINA编辑部
适用人群 未知
收录时间 2021-03-24

软件简介

ScriptX 是一个脚本引擎抽象层,对下封装多种脚本引擎,对上暴露统一的 API,使得上层调用者可以完全隔离底层的引擎实现。

ScriptX 不仅隔离了几种 JavaScript 引擎,甚至可以隔离不同脚本语言,使得上层在无需改变代码的前提下无缝切换脚本引擎脚本语言

特性:

支持多种引擎,多脚本语言

ScriptX设计之初就目标为支持多种脚本语言,并在JavaScript上实现了V8和JavaScriptCore的引擎封装。后续为了验证ScriptX的多语言设计,实现了完整的Lua绑定。目前针对WebAssembly的支持也已经完成。

现代的 C++ API

API设计上符合现代 C++ 风格,如:

  1. 三种引用类型Local/Global/Weak,使用copy, move语义实现自动的内存管理(自动引用计数)

  2. 使用variadic template 支持非常方便的 Function::call 语法

  3. 使用Template Meta-Programing 实现直接绑定C++函数

现代语言特性,引用空指针安全(nullibility safety 请参考kotlin的概念)。

注:ScriptX要求C++17(或1z)以上的编译器支持,并需要打开异常特性,(可以关闭RTTI特性)。

高性能

高性能是ScriptX设计上的重要指标。在实现过程中也充分体现了 Zero-Overhead 的C++思想。并在增加功能特性的时候通过相关的性能测试。

测试指标:单次JS到C++函数调用耗时,微秒

测试环境:iMac i9-9900k 32G RAM@macOS 10.15

性能测试表示,在Release模式下,ScriptX可以达到几乎和原生绑定相同的性能。(由于ScriptX使用大量模板,请勿在Debug版进行性能测试) 

支持异常处理

ScriptX通过一系列的技术手段实现了脚本的异常和C++异常相互打通的能力。在调用引擎API时无需判断返回值,可以使用异常统一处理,避免crash。

易用的API

易用的API => 开心的工程师=> 高效 => 高质量

ScriptX 设计的时候充分考虑到API的易用性,包括操作友好简单,不易出错,错误信息明显,便于定位问题等。

简单高效的绑定API

当app作为宿主使用脚本引擎时,通常都是需要注入大量native 绑定的函数/类来为脚本逻辑提供能力。ScriptX 设计的ClassDeifine相关绑定API简单易用,并且可以支持直接绑定C++函数,极大的提升工作效率。

可以与原生引擎API互操作

ScriptX在提供引擎封装的同时,也提供了一套工具方法实现原生类型和ScriptX类型的相互转换。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (1)

加载中
建议跟drogon整合,如果能让用户简单的基于drogon用script开发应用就厉害了
04/13 14:42
回复
举报
更多评论
暂无内容
发表了博客
2019/07/08 20:24

使用MeadCo's ScriptX控件做WEB打印

官方网址:http://www.meadroid.com/scriptx/index.asp MeadCo's ScriptX控件有两种使用方式,一种是做为免费版本使用,一种是做为收费版本使用,免费版本支持的功能要少些,不过最重要也是最常用的页面设置,它还是提供的,因此使用免费版本即可。不过这两个版本用的都是同一个cab文件,只不过在代码设置中有一些不同。 去http://www.meadroid.com/scriptx/sxdownload.asp这里下载smsx.cab文件。 页面调用示例: <!DOCTYPE html...

0
0
发表于大前端专区
2015/10/13 11:40

基于Web的打印方案比较分析

一 基于Web的打印方案比较分析--------------------------------   基于web的套打,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制。下面就ie浏览器所能采用的套打解决方案,来个汇总分析,希望对大家有所帮助。   一、浏览器的打印功能菜单   这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:   不能精确分页。浏览器一般是根据用户设置的页面大小...

0
5
发表了博客
2018/08/14 22:39

web打印的几种方案

轉自:http://elf8848.iteye.com/blog/626790 -------------------------------------------一 基于Web的打印方案比较分析--------------------------------   基于web的套打,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制。下面就ie浏览器所能采用的套打解决方案,来个汇总分析,希望对大家有所帮助。   一、浏览器的打印功能菜单   这种方案的优势是不需要对浏览器作任何扩充,是...

0
0
发表了博客
2018/07/10 17:46

打印插件--PAZU

PAZU对打印控制实现了:   2.1 设置页眉页脚   2.2 指定纸张大小   2.3 设置纸张方向   2.4 设置页边距   2.5 选择指定的打印机   2.6 无需用户确认,JS直接调用打印预览   2.7 无需用户确认,JS直接调用打印输出   2.8 支持Microsoft Print Template 技术,打印完全自定义   2.9 获得系统中所有已安装的打印机列表   2.10 获得系统中某台打印机所支持的所有打印纸张规格的列表   2.11 获得一个默认打印机...

0
0
发表了博客
2011/09/13 00:15

Web系统页面打印技术实现与分析

1 Web页面打印概述 应用WEB化,不论对开发商,还是对用户来说,实在是一种很经济的选择,因为基于WEB的应用,客户端的规则很简单,容易学习,容易维护,容易发布。在WEB系统中,打印的确是个烦人的问题。 要么自己开发打印控件,如果项目时间紧,肯定来不及。这对程序员来说,因为浏览器的局限性,却要面对很多挑战。怎么样来进行基于WEB的套打,就是这么一个令多数程序员头痛不已的问题。 基于WEB的套打,难度在于要将浏览器中...

1
12
发表了博客
2015/09/23 16:59

javascript技巧大全(2)

进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"> 推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)"> 这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使 用哪种特效,取值为1-23:   0 矩形缩小   1 矩形扩大   2 圆形缩小   3 圆形扩大   4 下到上刷新   5 上到下刷新   6 左到右刷...

0
0
2015/09/18 16:16

web打印的几种实现方法(转载)

web打印的几种实现方法(转载) web打印,web打印控件的三种实现方法 做管理系统的时候,打印一直是个棘手的问题,做B/S的系统这个问题就更加突出了!下面举出三种常用的web打印处理方式 1、利用word或者excel来实现web打印(如果不修改ie设置,可以在web服务器端生成xls文件,然后通过xlBook = xls.Workbooks.Open(remotePath) 获取对象打印) 实现过程:先将需要打印的数据导入到word或者excel中,再利用word或者excel的打印功...

0
18
发表于软件架构专区
2015/11/17 11:36

实用js代码大全

实用js代码大全 //过滤数字 <input type=text onkeypress="return event.keyCode>=48&&event.keyCode<=57||(this.value.indexOf('.')<0?event.keyCode==46:false)" onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false"> //特殊用途 <input type=button value=导入收藏夹 onclick="window.external.ImportExportFavorites(true,'http://localhost');"> <input type=button value=导出收藏夹...

0
0
发表了博客
2020/05/22 16:06

浏览器打印方案调研

写在前面 写这篇文章的源头,要从公司的快递面单打印说起。最近指定了我来主要负责这一块内容。可以说以前对打印是一无所知,对打印暴露出来的问题简直就是小白啊,问题分析不清楚、原因找不到、猜都没有方向。。。 先说一下之前前端 web 打印我们使用的方案吧,一直是用部门自己封装的打印npm包,封装的不复杂,就是对浏览器 window.print()没有的两个功能进行补充:自动分页和页面指定内容区域打印。因为我们知道直接调用win...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
1 评论
24 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部