LISP and Functional Programming最新文献

筛选
英文 中文
Reasoning with continuations II: full abstraction for models of control 延续推理II:控制模型的完全抽象
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91626
Dorai Sitaram, M. Felleisen
{"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 尾部递归语言的有效堆栈分配
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91603
C. Hanson
{"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 评价顺序的投影分析及其应用
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91655
G. Burn
{"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项的一种表示形式,适合于基于其含义的操作
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91682
G. Nadathur, D. S. Wilson
{"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 基于连续的函数式编程语言并行实现
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91648
J. Giorgi, D. Métayer
{"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 用矫顽力计算
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91590
V. Tannen, Carl A. Gunter, A. Scedrov
{"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 部分求值法在数值计算中的应用
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91612
A. Berlin
{"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 离散多态
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91675
D. Leivant
{"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 用于大规模并行计算机的函数式编程语言编译器
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91610
Clifford Walinsky, Deb Banerjee
{"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没有逆向工程
LISP and Functional Programming Pub Date : 1990-05-01 DOI: 10.1145/91556.91564
A. Tolmach, A. Appel
{"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
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
相关产品
×
本文献相关产品
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术官方微信