跳到主要内容
10.1145/512760.512761acm会议文章/章节视图摘要出版物页面波普尔会议记录会议集合
第条
免费访问

APL中的编译和延迟评估

出版:1978年1月1日出版历史记录

摘要

大多数现有的APL实施本质上是解释性的,也就是说,每次遇到APL语句时都会执行它通过一组完全通用的代码,即能够计算任何APL表达式,并且决不是针对现有报表。这种代价高昂的普遍性据说是合理的因为APL变量是无类型的,因此可以在程序执行期间的类型、形状和大小。这是什么论点忽视了APL的操作语义语句不会因它的变量。

关于非完全解释性执行的第一项建议是P.Abrams[1]的论文,其中有一位高级口译员可以通过编译代码推迟执行某些操作稍后必须调用低级解释器来执行。这个由此获得的好处是,从更广泛的上下文可以影响对子表达式。因此,在评估(A类+B类)[],仅添加A类[]+B类[]将是已执行。最近,A.Perlis和他的几个学生耶鲁[9,10]提出了一个方案,通过该方案,一个成熟的APL可以编写编译器。然后生成的编译代码可以是在专门的硬件处理器上非常有效地执行。A类新发布的HP/3000 APL也采用了类似的方案[12]。

本文在几个方面建立并扩展了上述观点指示。我们从深入研究两个关键概念开始所有这些工作都有共同点,即汇编延迟评估在APL的背景下。被延迟评估是指推迟计算的策略中间结果,直到需要时为止。如此之大中间表达式不是在存储中构建的;而不是他们的元素在时间上是“流式”的。APL评估延迟可能首先由巴顿提出(见[8])。

许多APL操作员没有对应任何实际数据操作。相反,它们的作用是重命名他们行动的阵列。一大类此类操作员,我们将打电话给网格选择器,基本上可以通过将它们向下推到表达式树并将其影响叶片存取器。从语义上来说,这相当于这个拖着走艾布拉姆斯描述的转变。执行此优化将显示为不可或缺的一部分延迟评估。

为了将我们的注意力集中在上述问题上,我们做了一个简化假设的数量。我们只关注代码编译单个APL表达式,例如“APL计算器”,其中不允许使用用户定义的函数。当然,我们将非常关注编译后的代码用于将来的评估。我们也忽略了不同APL原语类型之间的区别,并假设我们所有的数组都是一个统一的数字类型。我们研究了没有这些简化假设的情况,但计划报告在其他地方。

以下是该项目的主要贡献列表纸张。

“我们提出了一种合并选择器的算法运算符转换为表达式树叶的访问器。算法的运行时间与树的大小成比例,如下所示与路径长度相反(这是[10] 和[12])。

尽管上述方法无法处理任意形状算法,一种特别重要的情况可以是:符合重塑形象。重塑A类ñB类称为一致ifñB类是a的后缀。

“通过使用一致性重塑,我们可以消除内部和外部表达式树中的乘积并将其替换为标量最后一个维度上的运算符和约简。我们是这样做的在产品参数上引入适当的选择器,然后最终将这些选择器吸收到叶访问器中。这个相同的机械手柄标量扩展,公约使标量运算符的标量操作数符合任意数组。

“一旦产品、标量扩展和选择器删除后,剩下的是一个表达式树标量运算符和沿最后一个维度的约简。作为一个结果,在执行期间,当前正在处理的维度on遵守严格的堆叠式纪律。这意味着我们可以生成非常高效的代码独立于参数的等级。

几个APL运算符使用其操作数的元素次。纯延迟评估策略需要多次重新估价。

“我们引入了一种通用的缓冲机制,称为切片,它允许子表达式中重复需要保存,以避免将来重新计算。切片与需求评估机制结合得很好。例如,当中断流的操作员遇到时,使用切片来确定缓冲区的最小大小在子表达式可以传递其结果,以及完整表达式需要它的顺序。

“编译后的代码非常有效变量被维护,访问器被尽可能多的用户共享尽可能表达原子。最后,生成的代码很好适用于普通小型计算机执行,如PDP-11,或Data General Nova。我们已经在施乐PARC的高级计算机。

论文的计划是这样的:我们从一个概述开始讨论编译和延迟评估。然后我们激励我们需要介绍的结构和算法处理越来越广泛的原始APL运算符。我们讨论了为特定对象定制评估器的各种方法表达。这种剪裁的一些可能仅基于表达式本身,而其他优化需要了解表达式中原子绑定的(大小)。读者应始终警惕所使用的知识类型,因为这会影响重新执行期间编译代码的有效性声明的。

工具书类

  1. Philip Abrams,“APL机器”,SLAC报告#114,斯坦福大学,1970年2月谷歌学者谷歌学者
  2. 达尔·伯特利斯特尔(Dahl Birtwistle,Dahl,Myhrhaug)和尼加尔(Nygaard,SIMULA BEGIN,奥尔巴赫),1973年谷歌学者谷歌学者数字图书馆数字图书馆
  3. A.P.Ershov,“编译的本质”,IFIP编程概念形式描述会议记录,1977年8月,第1.1-1.28页谷歌学者谷歌学者
  4. Peter Henderson和James H.Morris,Jr.,“懒惰的评估者”,第三届ACM编程语言原理研讨会论文集,1976年1月,第95-103页谷歌学者谷歌学者数字图书馆数字图书馆
  5. Alan Kay等人,SMALLTALK-72说明手册,施乐PARC技术报告,SSL 76-61976谷歌学者谷歌学者
  6. 唐纳德·E·克努思,“上下文无关语言的语义学”,麻省理工学院。系统。1968年12月2日谷歌学者谷歌学者交叉引用交叉引用
  7. Liskov、Snyder、Atkinson和Schaffert,“CLU中的抽象机制”,《ACM可靠软件语言设计会议论文集》,1977年3月,第166-178页谷歌学者谷歌学者数字图书馆数字图书馆
  8. W.M.McKeeman,“计算机语言设计方法”,斯坦福大学博士论文,1966年谷歌学者谷歌学者数字图书馆数字图书馆
  9. 特里·米勒,《编译动态语言》,耶鲁大学博士论文,1977年谷歌学者谷歌学者
  10. Alan J.Perlis,“APL编译器的步骤-更新”,研究报告#24,耶鲁大学计算机科学系,1975年3月谷歌学者谷歌学者
  11. 雅各布·T·施瓦茨(Jacob T.Schwartz),“关于编程:SETL项目的中期报告;第一部分:概述”,纽约大学Courant Institute计算机科学系,1973年2月谷歌学者谷歌学者
  12. Eric J.Van Dyke,“解释语言的动态增量编译器”,《Hewlett-Packard杂志》,1977年7月,第17-23页谷歌学者谷歌学者
  13. Wulf,London和Shaw,“Alphard中的抽象和验证:介绍和方法”,卡内基梅隆大学和南加州大学信息科学研究所技术报告,1976年谷歌学者谷歌学者

建议

评论

登录选项

检查您是否可以通过登录凭据或您的机构访问本文。

登录

完全访问权限

  • 发布于

    封面图片ACM会议
    POPL’78:第五届ACM SIGACT-SIGPLAN编程语言原理研讨会会议记录
    1978年1月
    264页
    国际标准图书编号:9781450373487
    内政部:10.1145/512760

    版权所有©1978 ACM

    如果复制品不是为了盈利或商业利益而制作或分发的,并且复制品的第一页载有本通知和完整引文,则允许免费制作本作品的全部或部分数字或硬拷贝以供个人或课堂使用。必须尊重ACM以外的其他人对本作品组成部分的版权。允许用信用证进行摘要。要以其他方式复制或重新发布,在服务器上发布或重新发布到列表,需要事先获得特定许可和/或付费。从请求权限[电子邮件保护]

    出版商

    计算机协会

    美国纽约州纽约市

    出版历史记录

    • 出版:1978年1月1日

    权限

    请求有关此文章的权限。

    请求权限

    检查更新

    限定符

    • 第条

    验收费率

    78年流行音乐纸张接受率27属于135提交文件,20%总体验收率824属于4,130提交文件,20%

    即将召开的会议

    流行乐'25
    第52届ACM SIGPLAN编程语言原理年会
    2025年1月19日至25日
    丹佛,CO,美国

PDF格式

以PDF文件查看或下载。

PDF格式

电子阅读器

使用eReader联机查看。

电子阅读器