《函数式语言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(+)的结。

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

  1. R语言编写自定义函数计算R方、使用自助法Bootstrapping估计多元回归模型的R方的置信区间、可视化获得的boot对象、估计单个统计量的置信区间、分别使用分位数法和BCa法

    R语言编写自定义函数计算R方.使用自助法Bootstrapping估计多元回归模型的R方的置信区间.可视化获得的boot对象.估计单个统计量的置信区间.分别使用分位数法和BCa法(Bootstrapp ...

  2. R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小

    R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录

  3. R语言编写自定义函数、评估回归模型预测变量的相对重要性(Relative importance)、通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加、评估预测变量的重要度、并通过点图可视化

    R语言编写自定义函数.评估回归模型预测变量的相对重要性(Relative importance).通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加.来评估预测变量的重要程度.并通过点图可 ...

  4. R语言编写自定义函数、创建使用ggplot2生成图标(icon)的主题(theme)函数、使用ggplot2以及自定义的图标主题函数创建箱图(boxplot)图标、ggsave保存图标(png、svg

    R语言编写自定义函数.创建使用ggplot2生成图标(icon)的主题(theme)函数.使用ggplot2以及自定义的图标主题函数创建箱图(boxplot)图标.ggsave保存图标(png.svg ...

  5. R语言编写自定义函数基于ggsumarystats函数计算每个分组的统计值、自定义可视化分组分面条形图,并在X轴标签下方添加分组对应的统计值(样本数N、中位数median、四分位数的间距iqr)

    R语言编写自定义函数基于ggsumarystats函数计算每个分组的统计值.自定义可视化分组分面条形图,并在X轴标签下方添加分组对应的统计值(样本数N.中位数median.四分位数的间距iqr) 目录

  6. R语言编写自定义函数使用Wilcoxon符号秩检验(Wilcoxon signed rank)实现多分组非参数成对检验(pairwise)、并使用p.adjust函数调整概率值

    R语言编写自定义函数使用Wilcoxon符号秩检验(Wilcoxon signed rank)实现多分组非参数成对检验(Nonparametric pairwise multiple comparis ...

  7. python定义函数prime判断是否是素数_用自定义函数判断素数 用C语言编写自定义函数prime(int x),判断x是否为素数?...

    用C语言编写自定义函数prime(int x),判断x是否为素数? int prime(int x) { int i,k k=(int)sqrt( (double)x ) for(i=2i&l ...

  8. R语言编写自定义函数计算分类模型评估指标:准确度、特异度、敏感度、PPV、NPV、数据数据为模型预测后的混淆矩阵、比较多个分类模型分类性能(逻辑回归、决策树、随机森林、支持向量机)

    R语言编写自定义函数计算分类模型评估指标:准确度.特异度.敏感度.PPV.NPV.数据数据为模型预测后的混淆矩阵.比较多个分类模型分类性能(逻辑回归.决策树.随机森林.支持向量机) 目录

  9. 自定义strcpy函数c语言,c语言编写strcpy函数的方法

    c语言编写strcpy函数的方法 1.搭建基本的C语言程序框架,注意添加#include头文件 2.定义两个字符数组 3.strcpy函数原型:char *strcpy(char *dest, con ...

最新文章

  1. R语言ggplot2可视化线图(line plot):当数据有中断、缺失时R不会将数据绘制为连续的线图、而是出现断点
  2. linux下使用binfmt_misc设定不同二进制的打开程序
  3. better-scroll 的介绍
  4. VC++ 使用预编译头
  5. 使用缓冲流有什么好处_使用PVC石笼网有什么好处?
  6. java web响应式框架_Web开发的十佳HTML5响应式框架
  7. XNA开发思考之3D开发中的小常识
  8. 【Kafka】kafka OutOfMemoryError: Direct buffer memory Java heap space
  9. VS2008文档自动生成
  10. JDK 1.6环境变量的设置
  11. 二叉树转为单链表——Flatten Binary Tree to Linked List
  12. 《艺技回忆录》 ——观《达芬奇的人生密码》有感
  13. RS触发器、D触发器、JK触发器、T,T‘触发器的功能详细总结
  14. 计算机辅助翻译与笔译的关系,机器翻译 vs 计算机辅助翻译:有什么区别?
  15. Vue使用Upload上传图片报错:TypeError: Cannot create property 'xxx' on string 'xxxx'
  16. QT实现OPC_UA客户端程序以及与OPC_UA服务器通信
  17. 深度学习之图像分类(九)--ResNeXt 网络结构
  18. VSCode Competitive Programming Helper (cph)插件和Code Runner的C++17设置
  19. postman--常用公共函数
  20. 订阅号服务器消息推送数量,如何解决微信公众号一个月只能发4次消息的问题...

热门文章

  1. windows系统开启tftp服务器,win7系统怎么开启tftp服务器
  2. mybatis 中的条件转义字符处理
  3. Netty学习(一)-- Netty 底层 Java NIO
  4. C、C++和C#区别概述C#、C++ 和 C 之间的差异
  5. 电大计算机基础知识word,中央电大2015年4月计算机基础操作题
  6. pytorch eq()函数
  7. 使用Acolite批量大气校正Sentinel-2 L1C数据
  8. border-box和content-box最直观的区别和解释
  9. 第五人格服务器要维修到几点,第五人格维护登不上怎么办 服务器维护中详情...
  10. PyTorch训练加速技巧