Nilang.jl,一个可逆的Julia DSL

2020-10-11 18:10:27

Jl(DSLLang),是一种允许程序回到过去的可逆域特定语言(逆)。

现在,函数数据视图由x|>;双射指定,例如,在可逆上下文中,先前的grad(X)现在应该写为x|>;grad。

可逆计算之所以奇怪,主要是因为我们缺乏使用它的经验。--亨利·贝克(Henry Baker,1992)。

对i=1:length(X)y+=x[i]^2end res+=sqrt(Y)endjulia>;res_out,y_out,x_out=f(3.7416573867739413,14.0,[1.0,2.0,3.0])julia>;使用NiLangjulia>;@i函数f(res,y,x)对i=1:Length(X)y+=x[i]^2end res+=sqrt(Y)endjulia>;res_out,y_out,x_out=f(0.0,0,[1,2,3.0])Julia>;(~f)(RES_OUT,y_OUT,x_OUT)#自动生成的反向程序。(0.0,0.0,[1.0,2.0,3.0])julia>;∂res,∂y,∂x=nilang.AD。GRADER(val(1),f,(0.0,0.0,[1,2,3.0]))#自动微分,`val(1)`表示`f`的第一个参数为损失。(1.0,0.1336306209562122,[0.2672612419124244,0.5345224838248488,0.8017837257372732])。

可逆编程自动区分的性能远远好于大多数传统框架。这就是为什么,以及它是如何工作的,

@misc{刘2020,title={用可逆编程语言区分一切},作者={刘金国和赵丹妮},年份={2020},电子打印={2003.04617},存档前缀={arxiv},主要类={cs.PL}}