c语言编写fun函数使其实现,函数式语言Corefun的设计与实现(全文完整版)

《函数式语言Corefun的设计与实现.ppt》由会员分享,可免费在线阅读全文,更多与《函数式语言Corefun的设计与实现》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。

1、对栈的操作。优化PUSH操作后紧接着GET操作抽象机的实现状态的实现GMachine的一个状态是一个元组在试验中用C语言程序实现了这些成分闭包的表示:实验中用C语言的变长结构来实现,闭包:tyedefstructgm_closure{void(*code)(structgm_closure*c);intargc;structgm_node*argv[];}gm_closure;程序的工作模式Corefun的形式虽然如:实际计算是是把它当作emainexxfexxfmmmninletemainexxfexxfmmmn程序的一开始先完成一些初始化工作,然后把顺序压入栈中,然后计算main的值,接着输出计算的结果,最后完成一些收尾工作。C代码的生成GMachine的指令由C程序实现从Gcode的序列到C代码的影射想到简单:只需要把Gcode替换成对C函数或宏的调用即可。例如SLIDEn替换成C函数调用gm_slide(n);即可。Prelude的实现实现了几个基本的内部函数,包括四则运算,if函数和逻辑运算。为了保证效率,这些基本的内部都直接用C语言编写,直接操作栈,和调用其它C函数。更复杂的函数如ma,functor,可以用corefun自己实现。垃圾回收使用C语言库函数分配和释放内存。采用了最简单的内存管理办法:引用计数法。即每一个图的结点都有一个引用计数,记录了该节点被共享的次数,当某个地方不再使用某个节点时就将该节点的引用计数减,当引用计数为时,该节点无法在被访问,因此这时需要释放该节点的空间。未来的工作前端更多的relude,包括输入输出(IO)操作优化:严格性分析,及一些源到源优化使用泛型编程技术提高代码的质量,。

2、AP@+(f)MKAP@+@@+@(h)SLIDE前后对比扩展后(a)PUSHINIT(b)PUSHFUN+(c)MKAP_EX(,,)@+@@+@(e)SLIDE+@+(c)MKAP_EX(,,)Gcode窥孔优化先生成抽象机代码的好处:可以在抽象机代码级先进行优化。合并相邻SLIDE,SLIDEn;SLIDEm用SLIDE(n+m)代替。在栈中生存周期很短的指针,考虑经过寄存器来中转,减少成fxy=lettu=(x,y)c(x,y)=Ec(x,y)=Eing(ctu)(ctu)@@yfx@@cgcxy表达式全懒惰构造过去的办法对let语法成分不太适用,因为参数不能共享。引入闭包后可以把所有的变量对应到静态函数,表达式中用到的变量不是通过参数传递,而是放在闭包的结构中。不通过参数传递节省了调用时栈的开销。三种方法比较构造c的表示))((*babacba@@*@@@@@bf_ca+@−abf_ccodeab(a)(b)(c)扩展MKAP指令先生成抽象机代码的好处:容易启发更多的改进思路。MKAP:创建一个应用节点(@节点),其左、右指针分别是当前栈顶元素和其下面一个元素。把刚使用过的两个元素弹出栈,新建立的这个节点的指针入栈。扩展MKAP指令C[letx=in+xx]r=PUSHINT;PUSH;PUSH;PUSHFUN+;MKAP;MKAP;SLIDE;引入一个新的操作MKAP_EX(n,m,o),它的作用是创建一个新的应用节点,用栈中TOSn位置指向的图作为其左子树(函数),用栈中TOSmx)(succ)+(succ)(succ)+抽象机技术SECDGMachineSinelessGMachineSinelessTaglessG。

3、gv[];}gm_closure;程序的工作模式Corefun的形式虽然如:实际计算是是把它当作emainexxfexxfmmmninletemainexxfexxfmmmn程序的一开始先完成一些初始化工作,然后把顺序压入栈中,然后计算main的值,接着输出计算的结果,最后完成一些收尾工作。C代码的生成GMachine的指令由C程序实现从Gcode的序列到C代码的影射想到简单:只需要把Gcode替换成对C函数或宏的调用即可。例如SLIDEn替换成C函数调用gm_slide(n);即可。Prelude的实现实现了几个基本的内部函数,包括四则运算,if函位置指向的图作为其右子树(参数),然后从栈中弹出o个元素(其可能取值为,,),然后把新的应用节点的指针压入栈。扩展MKAP指令MKAP_EX本身可以用宏或者inline函数来实现,所以扩展MKAP成MKAP_EX,不会增加栈的使用。MKAP_EX的工作量总是小于等于MKAP的C[letx=in+xx]r=PUSHINT;PUSHFUN+;MKAP_EX(,,);MKAP_EX(,,);SLIDE;前后对比扩展前(a)PUSHINIT(b)PUSH(c)PUSH(d)PUSHFUN++(e)MKAP@+(f)MKAP@+@@+@(h)SLIDE前后对比扩展后(a)PUSHINIT(b)PUSHFUN+(c)MKAP_EX(,,)@+@@+@(e)SLIDE+@+(c)MKAP_EX(,,)Gcode窥孔优化先生成抽象机代码的好处:可以在抽象机代码级先进行优化。合并相邻SLIDE,SLIDEn;SLIDEm用SLIDE(n+m)代替。在栈中生存周期很短的指针,考虑经过寄存器来中转,减。

4、果是Run:run的结果是其他语言特点变量局部作用域let中定义的变量在对应的in中使用letrec中定义的变量在整个letrec中使用静态绑定a=fx=+axleta=inf=gt抽象机改进与优化STGM函数式语言Corefun的设计与实现研究生:欧阳坚导师:张素琴年月内容概要函数式语言图归约技术整体设计Corelan语言设计抽象机改进与优化现在的实现与未来的工作函数式语言函数式程序设计范式“I’lltellyouwhat,youworkouthow”描述的不是解决问题的方法而是问题本身函数式程序设计语言良好的数学基础(λ演算)程序简洁易于推理和正确性证明高阶函数、惰性计算例子(Haskell)简洁、抽象,面向问题qsort[]=[]qsort(x:xs)=qsort[y|y=x]高阶函数maf[]=[]maf(x:xs)=fx:mafxs惰性计算natural=[]主要障碍学院派程序员不适应在传统体系结构上的效率不高图归约技术λ演算δ归约:β归约:归约技术串归约环境归约图归约λ提升(lambdalifting)*)xx*x(yexyex)(图归约技术@FAFA+λxB@@+λxB@λx@@x+x@succ@@+@succ@@+(λx+xx对栈的操作。优化PUSH操作后紧接着GET操作抽象机的实现状态的实现GMachine的一个状态是一个元组在试验中用C语言程序实现了这些成分闭包的表示:实验中用C语言的变长结构来实现,闭包:tyedefstructgm_closure{void(*code)(structgm_closure*c);intargc;structgm_node*ar。

5、有利于以后的改进和维护谢谢!问题?achine过去的抽象机代码由抽象机指令的序列组成,每条指令通过状态转移系统被赋予精确的操作语义。STGMachine抽象机语言本身是一种很简单的函数式语言,它有通常的指称语义,并且每个语言成分有一个直接的操作语义。缺点:跨度过大,切断了语法成分之间的联系,不容易发现更多的改进空间。抽象机改进与优化改造原来的SinelessGMachine的操作语义通过增加闭包,表达式全懒惰构造使其具有和STGMachine类似的优点。得到一个比STGMachine容易理解和改进的抽象机模型。在此基础上尝试了:扩展MKAP指令,Gcode窥孔优化等提高抽象机效率的方法。增加闭包λ提升不高效的编译方法。STG中采用一种很紧凑的方式表示函数:静态的代码(被所有实例共享)和自由变量合在一起表示函数,通常这样的结构叫做闭包(closure)freevariablescode表达式全懒惰构造GMachine和SinelessGMachine的缺点:不会被计算的表达式却会被构造@@yfx@@EgEfxy=gEE表达式全懒惰构造过去的办法:fxy=gEE变换位置指向的图作为其右子树(参数),然后从栈中弹出o个元素(其可能取值为,,),然后把新的应用节点的指针压入栈。扩展MKAP指令MKAP_EX本身可以用宏或者inline函数来实现,所以扩展MKAP成MKAP_EX,不会增加栈的使用。MKAP_EX的工作量总是小于等于MKAP的C[letx=in+xx]r=PUSHINT;PUSHFUN+;MKAP_EX(,,);MKAP_EX(,,);SLIDE;前后对比扩展前(a)PUSHINIT(b)PUSH(c)PUSH(d)PUSHFUN++(e)MK。

6、achine整体设计主要研究编译器后端:从中间语言开始。定义中间语言corefun的语法:程序、表达式;完成一个arser,它把corefun程序转换成corefun的内部表示;完成一个rettyrinter,它把corefun的内部表示打印成程序;用抽象机技术为corefun实现一个编译器;完成最基本的标准函数库(standardrelude),和运行时支持。整体设计CoreIRGCodeOtimizationsCschemeEschemeBschemeFschemeCorefunProgramParser(flex,bison)CProgramAbstractMachineCProgramGMachineInstructionsPreludeObjectProgramRuntimeLibarayCComilerOtimizationsExecutableProgamlinkerCorelan语言设计定位于编译器中间语言。包含类型信息,并假设类型检查已经完成,已经保证类型正确。一种函数式语言,支持highorderfunction。惰性的语言,即采用lazyevaluation。直接支持反射语义,而不是用λ演算来表示反射。语法注释“”入口“main”一个例子反射元编程(metarogramming)克服传统程序设的局限性,例如语言的表达能力,程序的灵活性及程序执行的效率程序反射(roceduralreflection)程序语言一级支持元编程强调程序的自我观察,思考自身的状态,并能自我调节的能力反射语法的设计Quotation:表示+这个表达式的数据结构,与不同Antiquotation:~gt的结果是Lift:lift(+)的结。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值