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很重要?具体可查看官方发表的一篇论文。
评论