为什么要实现这个脚本引擎(https://gitee.com/xukui911/jglue)
规则引擎在现在的业务系统中,基本已经成为标准配置之一,大部分公司基本都是选择一款现有的比较著名的一些脚本或表达式引擎,在此之上构建自己的规则引擎产品。之前我们公司的系统也同样基于此方案进行设计和选型,我们选择的是阿里开源的qlExpress。通过一段时间的建设,此引擎也基本能满足公司的业务需求。但在整个过程中,也会发现此框架以及同类产品的一些不足。个人认为比较突出的问题包括以下几个方面
语法相对不完善
虽说现有的语法能解决90%的问题,但吹毛求疵还是有缺少,比如:
不支持异常处理(try{}catch{})
不支持switch原语
支持 a++,不支持++a以及a+=1
可以定义数组([]), 但不能定义对象({a: 1},也许有,但我没发现)
定义方法时,参数需要指定类型,不够灵活
函数出入参均不支持函数
函数名引用等同函数执行,(function a() {return 1;}; a与a()效果相同,均是1)
2、基于脚本内容缓存
多个规则间无法相互调用,对于原子规则无法复用(需二次开发实现)
修改规则其实就是新增规则,旧规则未提供下线API,继续占用缓存
基于以上遇到的一些问题、在项目过程中知识技能的不断成长、对脚本的实现原理更深入的了解,对技术不断探索的激情,遂尝试开发一款自己的脚本引擎。该引擎具备语法趋于完善、功能强大、使用灵活、执行效率相对高的特点。