这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
本次编程学习的基本环境配置如下
OS: macOS 13.1
IDE: Goland 2022.3
Go Version: 1.18
规则引擎介绍
引用自blog.csdn.net/localhost01…, 侵删
我们在对复杂的业务进行开发时,程序本身逻辑代码和业务代码互相嵌套、错综复杂,同时维护成本高,可拓展性差。规则引擎即是:可降低复杂业务逻辑组件复杂性、降低应用程序的维护和可扩展性成本的组件!
为什么需要规则引擎
业务规则经常变化,系统需依据业务的变化,实现快速、低成本的迭代更新。因此,为了快速、低成本的更新,我们需将逻辑代码和业务代码进行解耦.
- 研发人员开发维护程序部分,在测试通过后,后续不会经常变化改动
- 业务人员可直接管理这些业务规则,而不需要研发人员的参与
优点
- 业务人员和研发人员各司其职;
- 稳定层和变化层分离,这是一种优秀的设计模式;
- 变化层支持可视化或配置化的方式,快速进行业务规则的增删改操作,甚至支持热插拔和热更新。以减少冗长的开发和测试周期;
- 部分规则引擎甚至带有设计器(如
drools),还可解决我们 “简式建模” 的需求。
编译原理相关知识
什么是编译
编译的过程就是 把某种语言文本形式源程序, 转换成另一种形式.
解释型语言和编译型语言
有的语言提前把代码直接转换成二进制可执行文件,这种就是编译型语言,用的转换工具就叫编译器,比如C、C++、Go。一次编译可重复执行。编译后产物不能跨平台,不同系统对可执行文件的要求不同(Windows中的PE, Linux 中的ELF)。
有的语言则可以一边执行一边转化,用到哪里了就转哪里,这种就是解释型语言,用的转化工具叫虚拟机或者解释器,比如java python、javascript.
编译过程的一般情况(前端)
- 词法分析. 将源代码处理成Token(词素)序列的过程. 算法基础为确定的有限自动机(DFA, 如下图)和正则语言(Regular Language).
int a = 1;在词法分析后得到的Token序列为
(KEYWORD, int), (IDF, a), (ASSIGN, =), (INTEGER, 1), (DELIMITER, ;)
- 语法分析. 语法分析依次读入词法分析得到的各个词素, 并判定是否符合既定的语法规则,并给出程序的语法结构, 通常用抽象语法树表示, 算法基础是上下文无关文法和递归下降算法.