静态代码块不执行_一个避免静态代码爆炸的C++ idiom,用于OLAP向量化执行引擎的开发...

在实现向量执行引擎的过程中,有大量不同类型,语义相同, 代码结构很相似的函数, 比如:

  • +, - , *, /, %等算数运算.
  • 类型之间相互cast的函数.
  • 各种builtin函数.

这种函数,经过不同参数的排列组合下来, 数量非常庞大. 编写这么规模庞大函数,需要投入很大的精力. 同时, 后期维护成本也很大, 比如:

  • 增加一个新类型,比如增加Array,Map, Struct等类型。
  • 重构某一个类型,比如Decimal128的基础上,支持Decimal64, Decimal32, Decimal256.
  • 发现为某一种具体运算的更有的向量实现,需要变更算法. 比如,double转string的函数需要变更,而tinyint,smallint,int等类型的转string函数保持不变.

怎么处理这么一大堆函数,满足下面条件:

  • 代码类型安全: 如果类型错误,编译时的静态检查,可以给出报错提示.
  • 代码的boilerplate要少: 重复的代码不利于维护,或者维护时,容易漏写.
  • 代码的局部可调整性要好:代码足够的灵活,随时可以抽取一个特例,进行改写.

总之, 代码的逻辑上,要能够做到incremental refine.

本文作者起先尝试,使用模板重构DorisDB(incubator-doris的商业化版本), 但操作的过程中发现,直接使用模板,还是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值