最近在组内给大家做的Rust分享, 对Rust编程语言一些典型的特色机制进行介绍
作者: redwood
编写一个极速的规则表达式
在编码过程中, 常会遇到一大类场景, 比如为特定的用户发送奖品. 最简单的实现方式就是把判定规则写在代码中. 但现实是复杂的,稍微扩展一下,就会发现这种方式是难以为继的,比如:
1. 运营希望能灵活的修改和增加规则
2. 希望不同规则之间能指定顺序
这会导致不断地写新代码,测试,发布,整体效率很低,并且每次响应需求都可能引入新的bug.
类似的场景还有很多, 为了让我们得工作变得轻松, 必然希望通过某种抽象来一劳永逸的解决问题.
而实际上, 我一直都认为: DSL是一种设计模式
而把范围集合用DSL描述,可以解决所有需要范围集合判定以及优先级判定的问题
在这个规则发奖的场景,实际上就是
DSL -> Action
比如:
“(ip>’1.2.3.4′ and ip<‘4.5.6.7′) or level>100” -> Reward
在这其中, “(ip>’1.2.3.4’ and ip<‘4.5.6.7’) or level>100”, 就是一个表达式. 可以用一些现成的词语法工具来得到一个解析器.
但好在这种表达式结构比较简单, 我们不用按照常规词法\语法\语义按部就班的实现, 在一个循环就可以完成词语法解析,从而加快效率
更有意思的是, 我们可以通过逐步压测分析组件的性能瓶颈, 一步步的优化. 通过一系列的优化, 成功讲单核性能,从60000qps提升到200000qps,多核可线性扩展
代码我放在Github:
https://github.com/redwood9/faster_expression_evaluation
C++ ABI和二进制兼容性
近期在组内做了一个C++ ABI以及二进制兼容性的培训,如果你想了解下面的知识,可以参考
1. 为什么Linux(x86)生成的二进制执行程序不能在windows下执行,能直接在arm上执行吗,能直接在unix上执行吗?
2. ABI跟体系结构、操作系统、编译器的关系?
3. 不同编译器在同操作系统同体系结构编出来的SO能相容吗?
4. 跨SO传输会有哪些问题,原理是什么?
5. 安全跨SO传输的方案是什么?