首页 > 最新文献

Proceedings of the 18th ACM SIGPLAN international conference on Functional programming最新文献

英文 中文
OXenstored: an efficient hierarchical and transactional database using functional programming with reference cell comparisons OXenstored:一个高效的层次化事务性数据库,使用带有参考单元比较的函数式编程
T. Gazagnaire, Vincent Hanquez
We describe in this paper our implementation of the Xenstored service which is part of the Xen architecture. Xenstored maintains a hierarchical and transactional database, used for storing and managing configuration values. We demonstrate in this paper that mixing functional data-structures together with reference cell comparison, which is a limited form of pointer comparison, is: (i) safe; and (ii) efficient. This demonstration is based, first, on an axiomatization of operations on the tree-like structure we used to represent the Xenstored database. From this axiomatization, we then derive an efficient algorithm for coalescing concurrent transactions modifying that structure. Finally, we experimentally compare the performance of our implementation, that we called OXenstored, and the C implementation of the Xenstored service distributed with the Xen hypervisor sources: the results show that Oxenstored is much more efficient than its C counterpart. As a direct result of this work, OXenstored will be included in future releases of Xenserver, the virtualization product distributed by Citrix Systems, where it will replace the current implementation of the Xenstored service.
本文描述了Xenstored服务的实现,它是Xen架构的一部分。Xenstored维护一个分层和事务性数据库,用于存储和管理配置值。我们在本文中证明,将函数数据结构与引用单元比较(指针比较的一种有限形式)混合在一起是:(i)安全的;(二)高效。这个演示首先基于我们用来表示Xenstored数据库的树状结构上的操作的公理化。从这个公理出发,我们推导出一个有效的算法,用于合并修改该结构的并发事务。最后,我们通过实验比较了我们的实现(称为OXenstored)和使用Xen管理程序源分发的Xenstored服务的C实现的性能:结果表明,OXenstored比它的C对等体要高效得多。作为这项工作的直接结果,OXenstored将包含在Xenserver (Citrix Systems发行的虚拟化产品)的未来版本中,它将取代Xenstored服务的当前实现。
{"title":"OXenstored: an efficient hierarchical and transactional database using functional programming with reference cell comparisons","authors":"T. Gazagnaire, Vincent Hanquez","doi":"10.1145/1596550.1596581","DOIUrl":"https://doi.org/10.1145/1596550.1596581","url":null,"abstract":"We describe in this paper our implementation of the Xenstored service which is part of the Xen architecture. Xenstored maintains a hierarchical and transactional database, used for storing and managing configuration values.\u0000 We demonstrate in this paper that mixing functional data-structures together with reference cell comparison, which is a limited form of pointer comparison, is: (i) safe; and (ii) efficient. This demonstration is based, first, on an axiomatization of operations on the tree-like structure we used to represent the Xenstored database. From this axiomatization, we then derive an efficient algorithm for coalescing concurrent transactions modifying that structure. Finally, we experimentally compare the performance of our implementation, that we called OXenstored, and the C implementation of the Xenstored service distributed with the Xen hypervisor sources: the results show that Oxenstored is much more efficient than its C counterpart.\u0000 As a direct result of this work, OXenstored will be included in future releases of Xenserver, the virtualization product distributed by Citrix Systems, where it will replace the current implementation of the Xenstored service.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"136 1","pages":"203-214"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"74693405","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}
引用次数: 17
Beautiful differentiation 美丽的分化
Conal Elliott
Automatic differentiation (AD) is a precise, efficient, and convenient method for computing derivatives of functions. Its forward-mode implementation can be quite simple even when extended to compute all of the higher-order derivatives as well. The higher-dimensional case has also been tackled, though with extra complexity. This paper develops an implementation of higher-dimensional, higher-order, forward-mode AD in the extremely general and elegant setting of calculus on manifolds and derives that implementation from a simple and precise specification. In order to motivate and discover the implementation, the paper poses the question "What does AD mean, independently of implementation?" An answer arises in the form of naturality of sampling a function and its derivative. Automatic differentiation flows out of this naturality condition, together with the chain rule. Graduating from first-order to higher-order AD corresponds to sampling all derivatives instead of just one. Next, the setting is expanded to arbitrary vector spaces, in which derivative values are linear maps. The specification of AD adapts to this elegant and very general setting, which even simplifies the development.
自动微分法是一种精确、高效、方便的计算函数导数的方法。它的前向模式实现非常简单,即使扩展到计算所有的高阶导数也是如此。高维的情况也得到了解决,尽管更加复杂。本文在流形微积分的极其一般和优雅的设置下,给出了高维、高阶、前向模AD的一种实现,并从一个简单而精确的规范中推导出了该实现。为了激励和发现实施,本文提出了“独立于实施之外的AD是什么意思?”答案出现在对函数及其导数进行自然采样的形式中。自动微分和链式法则一起从这个自然条件中产生。从一阶AD过渡到高阶AD对应于对所有导数而不是一个导数进行采样。接下来,将设置扩展到任意向量空间,其中导数值是线性映射。AD规范适应这种优雅且非常通用的设置,这甚至简化了开发。
{"title":"Beautiful differentiation","authors":"Conal Elliott","doi":"10.1145/1596550.1596579","DOIUrl":"https://doi.org/10.1145/1596550.1596579","url":null,"abstract":"Automatic differentiation (AD) is a precise, efficient, and convenient method for computing derivatives of functions. Its forward-mode implementation can be quite simple even when extended to compute all of the higher-order derivatives as well. The higher-dimensional case has also been tackled, though with extra complexity. This paper develops an implementation of higher-dimensional, higher-order, forward-mode AD in the extremely general and elegant setting of calculus on manifolds and derives that implementation from a simple and precise specification. In order to motivate and discover the implementation, the paper poses the question \"What does AD mean, independently of implementation?\" An answer arises in the form of naturality of sampling a function and its derivative. Automatic differentiation flows out of this naturality condition, together with the chain rule. Graduating from first-order to higher-order AD corresponds to sampling all derivatives instead of just one. Next, the setting is expanded to arbitrary vector spaces, in which derivative values are linear maps. The specification of AD adapts to this elegant and very general setting, which even simplifies the development.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"181 1","pages":"191-202"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"80685579","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}
引用次数: 52
Functional pearl: la tour d'Hanoï 功能珍珠:la tour d'Hanoï
Ralf Hinze
This pearl aims to demonstrate the ideas of wholemeal and projective programming using the Towers of Hanoi puzzle as a running example. The puzzle has its own beauty, which we hope to expose along the way.
这颗珍珠旨在用河内塔拼图作为一个运行的例子来展示全麦和投影规划的想法。这个谜题有它自己的美,我们希望在这个过程中揭露出来。
{"title":"Functional pearl: la tour d'Hanoï","authors":"Ralf Hinze","doi":"10.1145/1596550.1596555","DOIUrl":"https://doi.org/10.1145/1596550.1596555","url":null,"abstract":"This pearl aims to demonstrate the ideas of wholemeal and projective programming using the Towers of Hanoi puzzle as a running example. The puzzle has its own beauty, which we hope to expose along the way.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"46 1","pages":"3-10"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"87906738","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}
引用次数: 3
Lambda, the ultimate TA: using a proof assistant to teach programming language foundations Lambda,终极助教:使用证明助手来教授编程语言基础
Benjamin C. Pierce
Ambitious experiments using proof assistants for programming language research and teaching are all the rage. In this talk, I'll report on one now underway at the University of Pennsylvania and several other sites: a one-semester graduate course in the theory of programming languages presented entirely - every lecture, every homework assignment - in Coq. I'll try to give a sense of what the course is like for both instructors and students, describe some of the most interesting challenges in developing it, and explain why I now believe such machine-assisted courses are the way of the future.
在编程语言研究和教学中使用证明助手的雄心勃勃的实验正在风靡一时。在这次演讲中,我将报告宾夕法尼亚大学和其他几个地方正在进行的一个项目:一个学期的编程语言理论研究生课程——每堂课、每项家庭作业——全部用Coq讲授。我将试着给老师和学生一个课程的感觉,描述一些开发过程中最有趣的挑战,并解释为什么我现在相信这种机器辅助课程是未来的方式。
{"title":"Lambda, the ultimate TA: using a proof assistant to teach programming language foundations","authors":"Benjamin C. Pierce","doi":"10.1145/1596550.1596552","DOIUrl":"https://doi.org/10.1145/1596550.1596552","url":null,"abstract":"Ambitious experiments using proof assistants for programming language research and teaching are all the rage. In this talk, I'll report on one now underway at the University of Pennsylvania and several other sites: a one-semester graduate course in the theory of programming languages presented entirely - every lecture, every homework assignment - in Coq. I'll try to give a sense of what the course is like for both instructors and students, describe some of the most interesting challenges in developing it, and explain why I now believe such machine-assisted courses are the way of the future.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"29 1","pages":"121-122"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"85547786","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}
引用次数: 22
Organizing functional code for parallel execution or, foldl and foldr considered slightly harmful 组织并行执行的功能代码或,折叠和折叠被认为是轻微有害的
G. Steele
Alan Perlis, inverting OscarWilde's famous quip about cynics, once suggested, decades ago, that a Lisp programmer is one who knows the value of everything and the cost of nothing. Now that the conference on Lisp and Functional Programming has become ICFP, some may think that OCaml and Haskell programmers have inherited this (now undeserved) epigram. I do believe that as multicore processors are becoming prominent, and soon ubiquitous, it behooves all programmers to rethink their programming style, strategies, and tactics, so that their code may have excellent performance. For the last six years I have been part of a team working on a programming language, Fortress, that has borrowed ideas not only from Fortran, not only from Java, not only from Algol and Alphard and CLU, not only from MADCAP and MODCAP and MIRFAC and the Klerer-May system-but also from Haskell, and I would like to repay the favor. In this talk I will discuss three ideas (none original with me) that I have found to be especially powerful in organizing Fortress programs so that they may be executed equally effectively either sequentially or in parallel: user-defined associative operators (and, more generally, user-defined monoids); conjugate transforms of data; and monoid-caching trees (as described, for example, by Hinze and Paterson). I will exhibit pleasant little code examples (some original with me) that make use of these ideas.
几十年前,Alan Perlis颠倒了奥斯卡·王尔德关于愤世嫉俗者的著名俏皮话,他曾经说过,Lisp程序员是一个知道所有东西的价值,却不知道任何东西的成本的人。现在,关于Lisp和函数式编程的会议已经变成了ICFP,有些人可能会认为OCaml和Haskell程序员继承了这个(现在不值得的)警句。我确实相信,随着多核处理器变得越来越突出,并且很快无处不在,所有程序员都应该重新思考他们的编程风格、策略和战术,以便他们的代码具有出色的性能。在过去的六年里,我一直是编程语言“要塞”团队的一员,它不仅从Fortran、Java、Algol、Alphard和CLU、MADCAP、MODCAP、MIRFAC和Klerer-May系统中借鉴了一些想法,而且还从Haskell中借鉴了一些想法,我想回报他们的帮助。在这次演讲中,我将讨论我发现的在组织Fortress程序方面特别强大的三个想法(不是我的独创),以便它们可以依次或并行地同等有效地执行:用户定义的关联运算符(以及更普遍的用户定义的monoids);数据的共轭变换;和一元缓存树(如Hinze和Paterson所描述的)。我将展示一些利用这些思想的令人愉快的小代码示例(其中一些是我原创的)。
{"title":"Organizing functional code for parallel execution or, foldl and foldr considered slightly harmful","authors":"G. Steele","doi":"10.1145/1631687.1596551","DOIUrl":"https://doi.org/10.1145/1631687.1596551","url":null,"abstract":"Alan Perlis, inverting OscarWilde's famous quip about cynics, once suggested, decades ago, that a Lisp programmer is one who knows the value of everything and the cost of nothing. Now that the conference on Lisp and Functional Programming has become ICFP, some may think that OCaml and Haskell programmers have inherited this (now undeserved) epigram.\u0000 I do believe that as multicore processors are becoming prominent, and soon ubiquitous, it behooves all programmers to rethink their programming style, strategies, and tactics, so that their code may have excellent performance. For the last six years I have been part of a team working on a programming language, Fortress, that has borrowed ideas not only from Fortran, not only from Java, not only from Algol and Alphard and CLU, not only from MADCAP and MODCAP and MIRFAC and the Klerer-May system-but also from Haskell, and I would like to repay the favor.\u0000 In this talk I will discuss three ideas (none original with me) that I have found to be especially powerful in organizing Fortress programs so that they may be executed equally effectively either sequentially or in parallel: user-defined associative operators (and, more generally, user-defined monoids); conjugate transforms of data; and monoid-caching trees (as described, for example, by Hinze and Paterson). I will exhibit pleasant little code examples (some original with me) that make use of these ideas.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"30 1","pages":"1-2"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"84981620","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}
引用次数: 30
Effective interactive proofs for higher-order imperative programs 高阶命令式程序的有效交互证明
A. Chlipala, G. Malecha, Greg Morrisett, Avraham Shinnar, Ryan Wisnesky
We present a new approach for constructing and verifying higher-order, imperative programs using the Coq proof assistant. We build on the past work on the Ynot system, which is based on Hoare Type Theory. That original system was a proof of concept, where every program verification was accomplished via laborious manual proofs, with much code devoted to uninteresting low-level details. In this paper, we present a re-implementation of Ynot which makes it possible to implement fully-verified, higher-order imperative programs with reasonable proof burden. At the same time, our new system is implemented entirely in Coq source files, showcasing the versatility of that proof assistant as a platform for research on language design and verification. Both versions of the system have been evaluated with case studies in the verification of imperative data structures, such as hash tables with higher-order iterators. The verification burden in our new system is reduced by at least an order of magnitude compared to the old system, by replacing manual proof with automation. The core of the automation is a simplification procedure for implications in higher-order separation logic, with hooks that allow programmers to add domain-specific simplification rules. We argue for the effectiveness of our infrastructure by verifying a number of data structures and a packrat parser, and we compare to similar efforts within other projects. Compared to competing approaches to data structure verification, our system includes much less code that must be trusted; namely, about a hundred lines of Coq code defining a program logic. All of our theorems and decision procedures have or build machine-checkable correctness proofs from first principles, removing opportunities for tool bugs to create faulty verifications.
我们提出了一种使用Coq证明助手来构造和验证高阶命令式程序的新方法。我们建立在过去基于Hoare类型理论的Ynot系统的基础上。最初的系统是一个概念证明,其中每个程序验证都是通过费力的手工证明完成的,许多代码用于无趣的低级细节。在本文中,我们提出了Ynot的一种重新实现,它使得实现具有合理证明负担的完全验证的高阶命令式程序成为可能。同时,我们的新系统完全在Coq源文件中实现,展示了该证明助手作为语言设计和验证研究平台的多功能性。这两个版本的系统都通过验证命令式数据结构的案例研究进行了评估,比如带有高阶迭代器的哈希表。通过用自动化取代人工证明,我们新系统中的验证负担与旧系统相比至少减少了一个数量级。自动化的核心是对高阶分离逻辑中的含义的简化过程,使用允许程序员添加特定于领域的简化规则的挂钩。我们通过验证大量数据结构和packrat解析器来论证我们的基础设施的有效性,并将其与其他项目中的类似工作进行比较。与数据结构验证的竞争方法相比,我们的系统包含的必须信任的代码要少得多;也就是说,大约一百行Coq代码定义了一个程序逻辑。我们所有的定理和决策过程都具有或构建了机器可检查的正确性证明,这些证明来自于第一原理,从而消除了工具错误产生错误验证的机会。
{"title":"Effective interactive proofs for higher-order imperative programs","authors":"A. Chlipala, G. Malecha, Greg Morrisett, Avraham Shinnar, Ryan Wisnesky","doi":"10.1145/1596550.1596565","DOIUrl":"https://doi.org/10.1145/1596550.1596565","url":null,"abstract":"We present a new approach for constructing and verifying higher-order, imperative programs using the Coq proof assistant. We build on the past work on the Ynot system, which is based on Hoare Type Theory. That original system was a proof of concept, where every program verification was accomplished via laborious manual proofs, with much code devoted to uninteresting low-level details. In this paper, we present a re-implementation of Ynot which makes it possible to implement fully-verified, higher-order imperative programs with reasonable proof burden. At the same time, our new system is implemented entirely in Coq source files, showcasing the versatility of that proof assistant as a platform for research on language design and verification. Both versions of the system have been evaluated with case studies in the verification of imperative data structures, such as hash tables with higher-order iterators. The verification burden in our new system is reduced by at least an order of magnitude compared to the old system, by replacing manual proof with automation. The core of the automation is a simplification procedure for implications in higher-order separation logic, with hooks that allow programmers to add domain-specific simplification rules.\u0000 We argue for the effectiveness of our infrastructure by verifying a number of data structures and a packrat parser, and we compare to similar efforts within other projects. Compared to competing approaches to data structure verification, our system includes much less code that must be trusted; namely, about a hundred lines of Coq code defining a program logic. All of our theorems and decision procedures have or build machine-checkable correctness proofs from first principles, removing opportunities for tool bugs to create faulty verifications.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"33 14","pages":"79-90"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"91490233","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}
引用次数: 104
Commutative monads, diagrams and knots 交换单子,图和结
Dan Piponi
There is certain diverse class of diagram that is found in a variety of branches of mathematics and which all share this property: there is a common scheme for translating all of these diagrams into useful functional code. These diagrams include Bayesian networks, quantum computer circuits [1], trace diagrams for multilinear algebra [2], Feynman diagrams and even knot diagrams [3]. I will show how a common thread lying behind these diagrams is the presence of a commutative monad and I will show how we can use this fact to translate these diagrams directly into Haskell code making use of do-notation for monads. I will also show a number of examples of such translated code at work and use it to solve problems ranging from Bayesian inference to the topological problem of untangling tangled strings. Along the way I hope to give a little insight into the subjects mentioned above and illustrate how a functional programming language can be a valuable tool in mathematical research and experimentation.
在数学的不同分支中有不同种类的图表,它们都有一个共同的特性:有一个共同的方案可以将所有这些图表转换成有用的功能代码。这些图包括贝叶斯网络、量子计算机电路[1]、多线性代数的迹图[2]、费曼图甚至结图[3]。我将展示这些图背后的一个共同线索是交换单子的存在,我将展示我们如何利用这一事实,利用单子的do-notation将这些图直接转换为Haskell代码。我还将展示一些这样的翻译代码的示例,并使用它来解决从贝叶斯推理到解开缠结字符串的拓扑问题。在此过程中,我希望对上面提到的主题给出一点见解,并说明函数式编程语言如何成为数学研究和实验中的有价值的工具。
{"title":"Commutative monads, diagrams and knots","authors":"Dan Piponi","doi":"10.1145/1596550.1596553","DOIUrl":"https://doi.org/10.1145/1596550.1596553","url":null,"abstract":"There is certain diverse class of diagram that is found in a variety of branches of mathematics and which all share this property: there is a common scheme for translating all of these diagrams into useful functional code. These diagrams include Bayesian networks, quantum computer circuits [1], trace diagrams for multilinear algebra [2], Feynman diagrams and even knot diagrams [3]. I will show how a common thread lying behind these diagrams is the presence of a commutative monad and I will show how we can use this fact to translate these diagrams directly into Haskell code making use of do-notation for monads. I will also show a number of examples of such translated code at work and use it to solve problems ranging from Bayesian inference to the topological problem of untangling tangled strings. Along the way I hope to give a little insight into the subjects mentioned above and illustrate how a functional programming language can be a valuable tool in mathematical research and experimentation.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"51 1","pages":"231-232"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"84655439","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}
引用次数: 3
Runtime support for multicore Haskell 运行时支持多核Haskell
S. Marlow, S. Jones, Satnam Singh
Purely functional programs should run well on parallel hardware because of the absence of side effects, but it has proved hard to realise this potential in practice. Plenty of papers describe promising ideas, but vastly fewer describe real implementations with good wall-clock performance. We describe just such an implementation, and quantitatively explore some of the complex design tradeoffs that make such implementations hard to build. Our measurements are necessarily detailed and specific, but they are reproducible, and we believe that they offer some general insights.
纯函数式程序应该在并行硬件上运行良好,因为没有副作用,但在实践中很难实现这一潜力。大量的论文描述了有前途的想法,但描述具有良好时钟性能的实际实现的论文却少得多。我们将描述这样一个实现,并定量地探讨一些复杂的设计权衡,这些权衡使得难以构建这样的实现。我们的测量必须是详细和具体的,但它们是可重复的,我们相信它们提供了一些一般的见解。
{"title":"Runtime support for multicore Haskell","authors":"S. Marlow, S. Jones, Satnam Singh","doi":"10.1145/1596550.1596563","DOIUrl":"https://doi.org/10.1145/1596550.1596563","url":null,"abstract":"Purely functional programs should run well on parallel hardware because of the absence of side effects, but it has proved hard to realise this potential in practice. Plenty of papers describe promising ideas, but vastly fewer describe real implementations with good wall-clock performance. We describe just such an implementation, and quantitatively explore some of the complex design tradeoffs that make such implementations hard to build. Our measurements are necessarily detailed and specific, but they are reproducible, and we believe that they offer some general insights.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"1 1","pages":"65-78"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"88908746","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}
引用次数: 142
Experience report: seL4: formally verifying a high-performance microkernel 体验报告:seL4:正式验证高性能微内核
G. Klein, Philip Derrin, Kevin Elphinstone
We report on our experience using Haskell as an executable specification language in the formal verification of the seL4 microkernel. The verification connects an abstract operational specification in the theorem prover Isabelle/HOL to a C implementation of the microkernel. We describe how this project differs from other efforts, and examine the effect of using Haskell in a large-scale formal verification. The kernel comprises 8,700 lines of C code; the verification more than 150,000 lines of proof script.
在seL4微内核的正式验证中,我们报告了使用Haskell作为可执行规范语言的经验。验证将定理证明器Isabelle/HOL中的抽象操作规范连接到微内核的C实现。我们描述了这个项目与其他项目的不同之处,并检查了在大规模形式化验证中使用Haskell的效果。内核由8700行C代码组成;该验证验证脚本超过15万行。
{"title":"Experience report: seL4: formally verifying a high-performance microkernel","authors":"G. Klein, Philip Derrin, Kevin Elphinstone","doi":"10.1145/1596550.1596566","DOIUrl":"https://doi.org/10.1145/1596550.1596566","url":null,"abstract":"We report on our experience using Haskell as an executable specification language in the formal verification of the seL4 microkernel. The verification connects an abstract operational specification in the theorem prover Isabelle/HOL to a C implementation of the microkernel. We describe how this project differs from other efforts, and examine the effect of using Haskell in a large-scale formal verification. The kernel comprises 8,700 lines of C code; the verification more than 150,000 lines of proof script.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"14 1","pages":"91-96"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"73182353","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}
引用次数: 40
Attribute grammars fly first-class: how to do aspect oriented programming in Haskell 属性语法是一流的:如何在Haskell中进行面向方面的编程
Marcos Viera, S. Swierstra, Wouter Swierstra
Attribute Grammars (AGs), a general-purpose formalism for describing recursive computations over data types, avoid the trade-off which arises when building software incrementally: should it be easy to add new data types and data type alternatives or to add new operations on existing data types? However, AGs are usually implemented as a pre-processor, leaving e.g. type checking to later processing phases and making interactive development, proper error reporting and debugging difficult. Embedding AG into Haskell as a combinator library solves these problems. Previous attempts at embedding AGs as a domain-specific language were based on extensible records and thus exploiting Haskell's type system to check the well formedness of the AG, but fell short in compactness and the possibility to abstract over oft occurring AG patterns. Other attempts used a very generic mapping for which the AG well-formedness could not be statically checked. We present a typed embedding of AG in Haskell satisfying all these requirements. The key lies in using HList-like typed heterogeneous collections (extensible polymorphic records) and expressing AG well-formedness conditions as type-level predicates (i.e., type-class constraints). By further type-level programming we can also express common programming patterns, corresponding to the typical use cases of monads such as Reader, Writer and State. The paper presents a realistic example of type-class-based type-level programming in Haskell.
属性语法(Attribute Grammars, AGs)是一种用于描述数据类型递归计算的通用形式,它避免了增量构建软件时出现的权衡:添加新数据类型和数据类型替代方案是否容易,或者在现有数据类型上添加新操作是否容易?然而,AGs通常是作为预处理器来实现的,将类型检查等问题留到后面的处理阶段,使交互式开发、适当的错误报告和调试变得困难。将AG作为组合子库嵌入Haskell解决了这些问题。之前将AGs作为特定于领域的语言嵌入的尝试是基于可扩展的记录,从而利用Haskell的类型系统来检查AG的良好格式,但在紧凑性和抽象经常出现的AG模式的可能性方面存在不足。其他尝试使用了非常通用的映射,无法静态检查AG的格式良好性。我们在Haskell中给出了一种满足所有这些要求的AG类型嵌入。关键在于使用类hlist类型异构集合(可扩展多态记录),并将AG格式良好的条件表示为类型级谓词(即类型-类约束)。通过进一步的类型级编程,我们还可以表达常见的编程模式,对应于单子(如Reader、Writer和State)的典型用例。本文给出了一个在Haskell中基于类型-类的类型级编程的实例。
{"title":"Attribute grammars fly first-class: how to do aspect oriented programming in Haskell","authors":"Marcos Viera, S. Swierstra, Wouter Swierstra","doi":"10.1145/1596550.1596586","DOIUrl":"https://doi.org/10.1145/1596550.1596586","url":null,"abstract":"Attribute Grammars (AGs), a general-purpose formalism for describing recursive computations over data types, avoid the trade-off which arises when building software incrementally: should it be easy to add new data types and data type alternatives or to add new operations on existing data types? However, AGs are usually implemented as a pre-processor, leaving e.g. type checking to later processing phases and making interactive development, proper error reporting and debugging difficult. Embedding AG into Haskell as a combinator library solves these problems.\u0000 Previous attempts at embedding AGs as a domain-specific language were based on extensible records and thus exploiting Haskell's type system to check the well formedness of the AG, but fell short in compactness and the possibility to abstract over oft occurring AG patterns. Other attempts used a very generic mapping for which the AG well-formedness could not be statically checked.\u0000 We present a typed embedding of AG in Haskell satisfying all these requirements. The key lies in using HList-like typed heterogeneous collections (extensible polymorphic records) and expressing AG well-formedness conditions as type-level predicates (i.e., type-class constraints). By further type-level programming we can also express common programming patterns, corresponding to the typical use cases of monads such as Reader, Writer and State. The paper presents a realistic example of type-class-based type-level programming in Haskell.","PeriodicalId":20504,"journal":{"name":"Proceedings of the 18th ACM SIGPLAN international conference on Functional programming","volume":"21 1","pages":"245-256"},"PeriodicalIF":0.0,"publicationDate":"2009-08-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"77592272","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}
引用次数: 47
期刊
Proceedings of the 18th ACM SIGPLAN international conference on 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