Build→It 是一个轻量级的基于类型的C++Multi-stageprogrammig框架。可以让你在几乎不了解编译器的情况下轻松实现领域特定语言(domai-specificlaguages,DSL)。
除了使用运算符重载提取表达式和语句外,该工具还支持提取丰富的数据相关的控制流,如if-the-else条件和for和while循环,并使用新颖的重执行策略来探索程序中的所有控制流路径。
Build→Itturs-
template<typeameBT,typeameET>dy_var<it>power_f(BTbase,ETexpoet){dy_var<it>res=1,x=base;while(expoet>1){if(expoet%2==1)res=res*x;x=x*x;expoet=expoet/2;}returres*x;}...itpower=15;cotext.extract_fuctio_ast(power_f<dy_var<it>,static_var<it>>,"power_15",power);...itbase=5;cotext.extract_fuctio_ast(power_f<static_var<it>,dy_var<it>>,"power_5",base);...ito-
itpower_15(itarg0){itvar0=arg0;itvar1=1;itvar2=var0;var1=var1*var2;var2=var2*var2;var1=var1*var2;var2=var2*var2;var1=var1*var2;var2=var2*var2;itvar3=var1*var2;returvar3;}itpower_5(itarg1){itvar0=arg1;itvar1=1;itvar2=5;while(var0>1){if((var0%2)==1){var1=var1*var2;}var2=var2*var2;var0=var0/2;}itvar3=var1*var2;returvar3;}Build→It使用纯基于库的方法,并且不需要任何特殊的编译器修改,这使得它具有极高的可移植性,并且易于集成到现有的代码库中。使用Build→It很简单,只需包含一些头文件,并针对Build→It库进行链接。
Build→It使用声明的变量和表达式类型来确定绑定时间。添加了2个新的通用类型-static_var和dy_var,使用户程序可以分为2个阶段。这些类型可以任意嵌套以产生更多阶段的代码。
什么是multi-stageprogrammig,以及为什么multi-stageprogrammig对高性能DSL很重要?具体可查看官方发表的一篇论文。
评论