首页 > 最新文献

LISP and Functional Programming最新文献

英文 中文
Reasoning with continuations II: full abstraction for models of control 延续推理II:控制模型的完全抽象
Pub Date : 1990-05-01 DOI: 10.1145/91556.91626
Dorai Sitaram, M. Felleisen
A fully abstract model of a programming language assigns the same meaning to two terms if and only if they have the same operational behavior. Such models are well-known for functional languages but little is known about extended functional languages with sophisticated control structures. We show that a direct model with error values and the conventional continuation model are adequate for functional languages augmented with first- and higher-order control facilities, respectively. Furthermore, both models become fully abstract on adding a control delimiter and a parallel conditional to the programming languages.
当且仅当两个术语具有相同的操作行为时,编程语言的完全抽象模型赋予它们相同的含义。这样的模型对于函数式语言是众所周知的,但是对于具有复杂控制结构的扩展函数式语言却知之甚少。我们证明了带有误差值的直接模型和传统的延拓模型分别适合于带有一阶和高阶控制设施的函数式语言。此外,在向编程语言中添加控制分隔符和并行条件时,这两个模型都变得完全抽象。
{"title":"Reasoning with continuations II: full abstraction for models of control","authors":"Dorai Sitaram, M. Felleisen","doi":"10.1145/91556.91626","DOIUrl":"https://doi.org/10.1145/91556.91626","url":null,"abstract":"A fully abstract model of a programming language assigns the same meaning to two terms if and only if they have the same operational behavior. Such models are well-known for functional languages but little is known about extended functional languages with sophisticated control structures. We show that a direct model with error values and the conventional continuation model are adequate for functional languages augmented with first- and higher-order control facilities, respectively. Furthermore, both models become fully abstract on adding a control delimiter and a parallel conditional to the programming languages.","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"120830003","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 62
Efficient stack allocation for tail-recursive languages 尾部递归语言的有效堆栈分配
Pub Date : 1990-05-01 DOI: 10.1145/91556.91603
C. Hanson
The Scheme dialect of Lisp [9] is properly tail-recuraiwit relies entirely on procedure calls to express iteration. In Scheme, a tail-recursive procedure call (that is, a call in which the calling procedure does not do any further processing of the returned due) is essentially a goto that passes arguments, sa was first pointed out by Steele [13]. In a prop erly tail-recursive language, there is no need for any explicit iteration constructs such as do or vhile; these can all be defined in terms of ordinary procedure calls. As elegant as tail-recursion may be from the perspective of the programmer or the theoretician, it poses challenges for the compiler designer. One of the crucial decisions in the design of a compiler is the formation of a strategy for memory allocation and deallocation. An important aspect of this strategy is the treatment of memory locations used to hold the bindings of local variables. Because local variables play a significant role in most computer languages, their treatment can have a noticeable impact on a program’s execution speed and run-time space requirements. Compilers for many block-structured languages use a simple strategy when allocating local variables: stack allocation. This strategy is supported by hardware on many computers, and by software mechanisms such as the aceem link and the display. However, the standard methods for implementing stack allocation assume that the language is not tail-recursive, and a straightforward application of these methods to a tailrecursive language can result in non-tail-recursive compiled code.’ This paper describes stack-allocation techniques for compiling tail-recursive languages. We do not claim that these are the only techniquea that can be used to solve the prob lem, nor do we compare them to other techniques. Instead, we use our techniques as a concrete example to demonstrate that it is possible to implement stack allocation of local variables without sacrificing tail recursion, which to our knowledge has not previously been shown. We have implemented these techniques in the MIT
Lisp的Scheme方言[9]是正确的尾部递归,完全依赖于过程调用来表达迭代。在Scheme中,尾部递归过程调用(即调用过程不对返回的due进行任何进一步处理的调用)本质上是传递参数的goto,这是由Steele[13]首先指出的。在完全尾部递归的语言中,不需要任何显式的迭代结构,如do或while;这些都可以根据普通过程调用来定义。从程序员或理论家的角度来看,尾递归可能是优雅的,但它对编译器设计者提出了挑战。编译器设计中的一个关键决策是形成内存分配和释放策略。该策略的一个重要方面是处理用于保存局部变量绑定的内存位置。由于局部变量在大多数计算机语言中扮演着重要的角色,因此它们的处理方式会对程序的执行速度和运行时空间需求产生明显的影响。许多块结构语言的编译器在分配局部变量时使用一种简单的策略:堆栈分配。许多计算机上的硬件和软件机制(如aceem链接和显示)都支持这种策略。但是,实现堆栈分配的标准方法假定语言不是尾递归的,并且将这些方法直接应用于尾递归语言可能会产生非尾递归的编译代码。本文描述了用于编译尾递归语言的堆栈分配技术。我们并不声称这些是唯一可以用来解决问题的技术,我们也不将它们与其他技术进行比较。相反,我们使用我们的技术作为一个具体的例子来证明,在不牺牲尾部递归的情况下实现局部变量的堆栈分配是可能的,据我们所知,这在以前没有显示过。我们已经在MIT实现了这些技术
{"title":"Efficient stack allocation for tail-recursive languages","authors":"C. Hanson","doi":"10.1145/91556.91603","DOIUrl":"https://doi.org/10.1145/91556.91603","url":null,"abstract":"The Scheme dialect of Lisp [9] is properly tail-recuraiwit relies entirely on procedure calls to express iteration. In Scheme, a tail-recursive procedure call (that is, a call in which the calling procedure does not do any further processing of the returned due) is essentially a goto that passes arguments, sa was first pointed out by Steele [13]. In a prop erly tail-recursive language, there is no need for any explicit iteration constructs such as do or vhile; these can all be defined in terms of ordinary procedure calls. As elegant as tail-recursion may be from the perspective of the programmer or the theoretician, it poses challenges for the compiler designer. One of the crucial decisions in the design of a compiler is the formation of a strategy for memory allocation and deallocation. An important aspect of this strategy is the treatment of memory locations used to hold the bindings of local variables. Because local variables play a significant role in most computer languages, their treatment can have a noticeable impact on a program’s execution speed and run-time space requirements. Compilers for many block-structured languages use a simple strategy when allocating local variables: stack allocation. This strategy is supported by hardware on many computers, and by software mechanisms such as the aceem link and the display. However, the standard methods for implementing stack allocation assume that the language is not tail-recursive, and a straightforward application of these methods to a tailrecursive language can result in non-tail-recursive compiled code.’ This paper describes stack-allocation techniques for compiling tail-recursive languages. We do not claim that these are the only techniquea that can be used to solve the prob lem, nor do we compare them to other techniques. Instead, we use our techniques as a concrete example to demonstrate that it is possible to implement stack allocation of local variables without sacrificing tail recursion, which to our knowledge has not previously been shown. We have implemented these techniques in the MIT","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125965240","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 29
Using projection analysis of evaluation-order and its application 评价顺序的投影分析及其应用
Pub Date : 1990-05-01 DOI: 10.1145/91556.91655
G. Burn
Projection analysis is a technique for finding out information about lazy functional programs. We show how the information obtained from this analysis can be used to speed up sequential implementations, and introduce parallelism into parallel implementations. The underlying evaluation model is evaluation transformers, where the amount of evaluation that is allowed of an argument in a function application depends on the amount of evaluation allowed of the application. We prove that the transformed programs preserve the semantics of the original programs.Compilation rules, which encode the information from the analysis, are given for sequential and parallel machines.
投影分析是一种发现惰性函数式程序信息的技术。我们将展示如何使用从该分析中获得的信息来加速顺序实现,并在并行实现中引入并行性。底层的求值模型是求值转换器,其中函数应用程序中允许的参数求值量取决于应用程序允许的求值量。我们证明了变换后的程序保留了原程序的语义。给出了顺序机和并行机的编译规则,对分析所得的信息进行编码。
{"title":"Using projection analysis of evaluation-order and its application","authors":"G. Burn","doi":"10.1145/91556.91655","DOIUrl":"https://doi.org/10.1145/91556.91655","url":null,"abstract":"Projection analysis is a technique for finding out information about lazy functional programs. We show how the information obtained from this analysis can be used to speed up sequential implementations, and introduce parallelism into parallel implementations. The underlying evaluation model is evaluation transformers, where the amount of evaluation that is allowed of an argument in a function application depends on the amount of evaluation allowed of the application. We prove that the transformed programs preserve the semantics of the original programs.\u0000Compilation rules, which encode the information from the analysis, are given for sequential and parallel machines.","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133990397","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 6
A representation of Lambda terms suitable for operations on their intensions Lambda项的一种表示形式,适合于基于其含义的操作
Pub Date : 1990-05-01 DOI: 10.1145/91556.91682
G. Nadathur, D. S. Wilson
A representation for lambda terms is described based on the scheme of de Bruijn for eliminating variable names. The new notation provides for a class of terms that can encode other terms together with substitutions to be performed on them. The notion of an environment is used to realize this “delaying” of substitutions. The precise mechanism that is used is, however, more complex than the usual so as to support the ability to examine subterms embedded under abstractions. A virtue of our representation is that it permits substitution to be realized as an atomic operation and thereby provides for efficient implementations of β-reduction. Operations on lgr;-terms are described based on our representation and the relationship of these to the conventional definitions are exhibited.
基于de Bruijn消除变量名的方案,描述了lambda项的表示。新的表示法提供了一类术语,这些术语可以对其他术语进行编码,并对它们进行替换。环境的概念被用来实现这种替换的“延迟”。但是,所使用的精确机制比通常的机制更复杂,以便支持检查嵌入在抽象中的子术语的能力。我们的表示法的一个优点是,它允许替代作为原子操作来实现,从而提供了β-还原的有效实现。基于我们的表示描述了对lgr -term的操作,并展示了这些操作与传统定义的关系。
{"title":"A representation of Lambda terms suitable for operations on their intensions","authors":"G. Nadathur, D. S. Wilson","doi":"10.1145/91556.91682","DOIUrl":"https://doi.org/10.1145/91556.91682","url":null,"abstract":"A representation for lambda terms is described based on the scheme of de Bruijn for eliminating variable names. The new notation provides for a class of terms that can encode other terms together with substitutions to be performed on them. The notion of an environment is used to realize this “delaying” of substitutions. The precise mechanism that is used is, however, more complex than the usual so as to support the ability to examine subterms embedded under abstractions. A virtue of our representation is that it permits substitution to be realized as an atomic operation and thereby provides for efficient implementations of β-reduction. Operations on lgr;-terms are described based on our representation and the relationship of these to the conventional definitions are exhibited.","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121498812","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 43
Continuation-based parallel implementation of functional programming languages 基于连续的函数式编程语言并行实现
Pub Date : 1990-05-01 DOI: 10.1145/91556.91648
J. Giorgi, D. Métayer
It has been claimed for a long time that functional languages are attractive candidates for execution on parallel architectures. This belief is based on the fact that functional programs are free of side effects and often contain a great deal of implicit parallelism. However the first parallel implementations of functional languages [Vegdahl 841 didn’t really support this claim because they were based on a somewhat dogmatic view of parallelism : the normal execution mode was supposed to be the parallel mode, the extreme consequence being that each expression might be considered as a process. The uniformity of this approach makes it attractive in theory but it is not really effective (at least in the present state of the art in hardware technology) because it entails significant overhead costs that may outweigh any benefit gained from exploiting parallelism. It is now recognized that a parallel implementation of a functional language must satisfy two criteria in order to be competitive :
很长一段时间以来,函数式语言一直被认为是在并行架构上执行的有吸引力的候选者。这种信念是基于这样一个事实:函数式程序没有副作用,而且经常包含大量的隐式并行性。然而,第一批函数式语言的并行实现[Vegdahl 841]并没有真正支持这种说法,因为它们基于一种有点教条式的并行性观点:正常的执行模式应该是并行模式,极端的结果是每个表达式都可能被视为一个进程。这种方法的一致性使它在理论上很有吸引力,但实际上并不有效(至少在目前的硬件技术中是这样),因为它需要大量的开销,可能超过利用并行性所获得的任何好处。现在人们认识到,函数式语言的并行实现必须满足两个标准才能具有竞争力:
{"title":"Continuation-based parallel implementation of functional programming languages","authors":"J. Giorgi, D. Métayer","doi":"10.1145/91556.91648","DOIUrl":"https://doi.org/10.1145/91556.91648","url":null,"abstract":"It has been claimed for a long time that functional languages are attractive candidates for execution on parallel architectures. This belief is based on the fact that functional programs are free of side effects and often contain a great deal of implicit parallelism. However the first parallel implementations of functional languages [Vegdahl 841 didn’t really support this claim because they were based on a somewhat dogmatic view of parallelism : the normal execution mode was supposed to be the parallel mode, the extreme consequence being that each expression might be considered as a process. The uniformity of this approach makes it attractive in theory but it is not really effective (at least in the present state of the art in hardware technology) because it entails significant overhead costs that may outweigh any benefit gained from exploiting parallelism. It is now recognized that a parallel implementation of a functional language must satisfy two criteria in order to be competitive :","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127621059","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 6
Computing with coercions 用矫顽力计算
Pub Date : 1990-05-01 DOI: 10.1145/91556.91590
V. Tannen, Carl A. Gunter, A. Scedrov
This paper relates two views of the operational semantics of a language with multiple inheritance. It is shown that the introduction of explicit coercions as an interpretation for the implicit coercion of inheritance does not affect the evaluation of a program in an essential way. The result is proved by semantic means using a denotational model and a computational adequacy result to relate the operational and denotational semantics.
本文讨论了具有多重继承的语言的操作语义的两种观点。结果表明,引入显式强制作为对继承的隐式强制的解释并不会在本质上影响程序的评估。用一个指称模型和计算充分性结果证明了这一结果。
{"title":"Computing with coercions","authors":"V. Tannen, Carl A. Gunter, A. Scedrov","doi":"10.1145/91556.91590","DOIUrl":"https://doi.org/10.1145/91556.91590","url":null,"abstract":"This paper relates two views of the operational semantics of a language with multiple inheritance. It is shown that the introduction of explicit coercions as an interpretation for the implicit coercion of inheritance does not affect the evaluation of a program in an essential way. The result is proved by semantic means using a denotational model and a computational adequacy result to relate the operational and denotational semantics.","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116703093","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 35
Partial evaluation applied to numerical computation 部分求值法在数值计算中的应用
Pub Date : 1990-05-01 DOI: 10.1145/91556.91612
A. Berlin
There have been many demonstrations that the expressive power of Lisp can greatly simplify the process of writing numerical programs, but at the cost of reduced performance.[10][16] I show that by coupling Lisp's abstract, expressive style of programming with a compiler that uses partial evaluation, data abstractions can be eliminated at compile time, producing extremely high-performance code. For an important class of numerical programs, partial evaluation achieves order-of-magnitude speed-ups over conventional Lisp compilation technology. This approach has proven to be especially effective when used in conjunction with schedulers for VLIW and highly pipelined architectures, because the elimination of data structures and procedural abstractions exposes the low-level parallelism inherent in a computation.
有很多例子表明,Lisp的表达能力可以极大地简化编写数值程序的过程,但代价是性能降低。我展示了通过将Lisp抽象的、富有表现力的编程风格与使用部分求值的编译器相结合,可以在编译时消除数据抽象,从而生成非常高性能的代码。对于一类重要的数值程序,部分求值比传统的Lisp编译技术实现了数量级的加速。事实证明,这种方法在与VLIW和高度流水线架构的调度器结合使用时特别有效,因为消除了数据结构和过程抽象,暴露了计算中固有的低级并行性。
{"title":"Partial evaluation applied to numerical computation","authors":"A. Berlin","doi":"10.1145/91556.91612","DOIUrl":"https://doi.org/10.1145/91556.91612","url":null,"abstract":"There have been many demonstrations that the expressive power of Lisp can greatly simplify the process of writing numerical programs, but at the cost of reduced performance.[10][16] I show that by coupling Lisp's abstract, expressive style of programming with a compiler that uses partial evaluation, data abstractions can be eliminated at compile time, producing extremely high-performance code. For an important class of numerical programs, partial evaluation achieves order-of-magnitude speed-ups over conventional Lisp compilation technology. This approach has proven to be especially effective when used in conjunction with schedulers for VLIW and highly pipelined architectures, because the elimination of data structures and procedural abstractions exposes the low-level parallelism inherent in a computation.","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115626350","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 54
Discrete polymorphism 离散多态
Pub Date : 1990-05-01 DOI: 10.1145/91556.91675
D. Leivant
Polymorphic typing comes in two flavors: parametric as in ML and in Girard-Reynolds’s second order X-calculus 2X, and discrete as in Forsyth [Rey88] and Coppo-Dezani’s X-calculus with intersection types, JX. At first blush, intersection types might look as the ultimate form of discrete polymorphism, since all normalizable X-expressions are (suitably) typable. However, the typings obtained in JX for normalizable X-expressions may be highly non-uniform. For instance, if P is a X-expression representing a unary numeric [unction f, then Pii will be typable for every Church numeral ii, but there may be no type T common to all numerals and such that P has a type of the form r + . . . (see Theorem 14 below). Thus, while intersection-types serve well a.s guarantor of functional well-behavior, for each individual input, they are not all-powerful as compile-time checks for the functional well-behavior of procedures as a whole. We consider here a discipline JmX with infinite type int,ersection, for which we outline a mathematical theory. This has several advantages:
多态分两种类型:参数型如ML和Girard-Reynolds二阶X-calculus 2X,离散型如Forsyth [Rey88]和Coppo-Dezani的X-calculus with intersection types, JX。乍一看,交叉类型可能看起来像是离散多态性的最终形式,因为所有可规范化的x表达式都是(适当地)可类型的。但是,在JX中为可规范化的x表达式获得的类型可能高度不一致。例如,如果P是表示一元数值函数f的x表达式,则Pii将可用于所有教会数字ii,但可能没有所有数字共有的类型T,因此P具有形式为r +…(见定理14)。因此,虽然交叉类型作为功能良好行为的保证人很好地服务,但对于每个单独的输入,它们并不是作为整个过程的功能良好行为的编译时检查的全能。我们在这里考虑一个具有无限类型int的学科JmX,我们为它概述了一个数学理论。这有几个好处:
{"title":"Discrete polymorphism","authors":"D. Leivant","doi":"10.1145/91556.91675","DOIUrl":"https://doi.org/10.1145/91556.91675","url":null,"abstract":"Polymorphic typing comes in two flavors: parametric as in ML and in Girard-Reynolds’s second order X-calculus 2X, and discrete as in Forsyth [Rey88] and Coppo-Dezani’s X-calculus with intersection types, JX. At first blush, intersection types might look as the ultimate form of discrete polymorphism, since all normalizable X-expressions are (suitably) typable. However, the typings obtained in JX for normalizable X-expressions may be highly non-uniform. For instance, if P is a X-expression representing a unary numeric [unction f, then Pii will be typable for every Church numeral ii, but there may be no type T common to all numerals and such that P has a type of the form r + . . . (see Theorem 14 below). Thus, while intersection-types serve well a.s guarantor of functional well-behavior, for each individual input, they are not all-powerful as compile-time checks for the functional well-behavior of procedures as a whole. We consider here a discipline JmX with infinite type int,ersection, for which we outline a mathematical theory. This has several advantages:","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130345288","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 27
A functional programming language compiler for massively parallel computers 用于大规模并行计算机的函数式编程语言编译器
Pub Date : 1990-05-01 DOI: 10.1145/91556.91610
Clifford Walinsky, Deb Banerjee
Functional programming languages remove programmers from low-level machine details, an important achievement when programming massively parallel systems. We present an overview of an FP compiler that generates programs capable of exploiting data-parallelism, a view of parallelism where distinct data elements reside on distinct processors and all processors execute a single instruction stream. To achieve this form of parallelism, FP's sequences are represented as arrays. This representation makes possible optimization techniques developed for APL compilers that compose routing functions at compile-time. These techniques are described succinctly by a set of axioms and inference rules. We demonstrate the optimizations by compiling several FP functions, obtaining optimal performance.
函数式编程语言将程序员从底层机器细节中解放出来,这是为大规模并行系统编程时的一个重要成就。我们概述了一个FP编译器,该编译器生成能够利用数据并行性的程序,并行性的观点是不同的数据元素驻留在不同的处理器上,所有处理器执行单个指令流。为了实现这种形式的并行性,FP的序列被表示为数组。这种表示使得为在编译时组合路由函数的APL编译器开发的优化技术成为可能。这些技术由一组公理和推理规则简明地描述。我们通过编译几个FP函数来演示优化,获得了最佳性能。
{"title":"A functional programming language compiler for massively parallel computers","authors":"Clifford Walinsky, Deb Banerjee","doi":"10.1145/91556.91610","DOIUrl":"https://doi.org/10.1145/91556.91610","url":null,"abstract":"Functional programming languages remove programmers from low-level machine details, an important achievement when programming massively parallel systems. We present an overview of an FP compiler that generates programs capable of exploiting data-parallelism, a view of parallelism where distinct data elements reside on distinct processors and all processors execute a single instruction stream. To achieve this form of parallelism, FP's sequences are represented as arrays. This representation makes possible optimization techniques developed for APL compilers that compose routing functions at compile-time. These techniques are described succinctly by a set of axioms and inference rules. We demonstrate the optimizations by compiling several FP functions, obtaining optimal performance.","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121992635","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 15
Debugging standard ML without reverse engineering 调试标准ML没有逆向工程
Pub Date : 1990-05-01 DOI: 10.1145/91556.91564
A. Tolmach, A. Appel
We have built a novel and efficient replay debugger for our Standard ML compiler. Debugging facilities are provided by instrumenting the user's source code; this approach, made feasible by ML's safety property, is machine-independent and back-end independent. Replay is practical because ML is normally used functionally, and our compiler uses continuation-passing style; thus most of the program's state can be checkpointed quickly and compactly using call-with-current-continuation. Together, instrumentation and replay support a simple and elegant debugger featuring full variable display, polymorphic type resolution, stack trace-back, breakpointing, and reverse execution, even though our compiler is very highly optimizing and has no run-time stack.
我们为我们的标准ML编译器构建了一个新颖而高效的重放调试器。调试工具是通过检测用户的源代码提供的;这种方法是独立于机器和后端的,由于ML的安全特性而变得可行。重放是实用的,因为ML通常是函数式使用的,我们的编译器使用延续传递风格;因此,可以使用call-with-current-continuation快速而紧凑地检查程序的大部分状态。插装和重放一起支持一个简单而优雅的调试器,它具有完整的变量显示、多态类型解析、堆栈回溯、断点和反向执行,尽管我们的编译器非常优化并且没有运行时堆栈。
{"title":"Debugging standard ML without reverse engineering","authors":"A. Tolmach, A. Appel","doi":"10.1145/91556.91564","DOIUrl":"https://doi.org/10.1145/91556.91564","url":null,"abstract":"We have built a novel and efficient replay debugger for our Standard ML compiler. Debugging facilities are provided by instrumenting the user's source code; this approach, made feasible by ML's safety property, is machine-independent and back-end independent. Replay is practical because ML is normally used functionally, and our compiler uses continuation-passing style; thus most of the program's state can be checkpointed quickly and compactly using call-with-current-continuation. Together, instrumentation and replay support a simple and elegant debugger featuring full variable display, polymorphic type resolution, stack trace-back, breakpointing, and reverse execution, even though our compiler is very highly optimizing and has no run-time stack.","PeriodicalId":409945,"journal":{"name":"LISP and Functional Programming","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1990-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130345372","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 87
期刊
LISP and Functional Programming
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1