BuildIt 创建领域特定语言开源项目

我要开发同款
白开水不加糖2021年03月02日
48阅读
开发技术C/C++
所属分类程序开发
授权协议MIT

作品详情

Build→It 是一个轻量级的基于类型的C++Multi-stageprogramming框架。可以让你在几乎不了解编译器的情况下轻松实现领域特定语言(domain-specificlanguages,DSL)。

除了使用运算符重载提取表达式和语句外,该工具还支持提取丰富的数据相关的控制流,如if-then-else条件和for和while循环,并使用新颖的重执行策略来探索程序中的所有控制流路径。

Build→Itturns-

template<typenameBT,typenameET>dyn_var<int>power_f(BTbase,ETexponent){dyn_var<int>res=1,x=base;while(exponent>1){if(exponent%2==1)res=res*x;x=x*x;exponent=exponent/2;}returnres*x;}...intpower=15;context.extract_function_ast(power_f<dyn_var<int>,static_var<int>>,"power_15",power);...intbase=5;context.extract_function_ast(power_f<static_var<int>,dyn_var<int>>,"power_5",base);...

into-

intpower_15(intarg0){intvar0=arg0;intvar1=1;intvar2=var0;var1=var1*var2;var2=var2*var2;var1=var1*var2;var2=var2*var2;var1=var1*var2;var2=var2*var2;intvar3=var1*var2;returnvar3;}intpower_5(intarg1){intvar0=arg1;intvar1=1;intvar2=5;while(var0>1){if((var0%2)==1){var1=var1*var2;}var2=var2*var2;var0=var0/2;}intvar3=var1*var2;returnvar3;}

Build→It使用纯基于库的方法,并且不需要任何特殊的编译器修改,这使得它具有极高的可移植性,并且易于集成到现有的代码库中。使用Build→It很简单,只需包含一些头文件,并针对Build→It库进行链接。

Build→It使用声明的变量和表达式类型来确定绑定时间。添加了2个新的通用类型-static_var和dyn_var,使用户程序可以分为2个阶段。这些类型可以任意嵌套以产生更多阶段的代码。

什么是multi-stageprogramming,以及为什么multi-stageprogramming对高性能DSL很重要?具体可查看官方发表的一篇论文。

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论