首页 > 最新文献

Summit on Advances in Programming Languages最新文献

英文 中文
A Golden Age of Hardware Description Languages: Applying Programming Language Techniques to Improve Design Productivity 硬件描述语言的黄金时代:应用程序设计语言技术提高设计效率
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2019.7
Lenny Truong, P. Hanrahan
Leading experts have declared that there is an impending golden age of computer architecture. During this age, the rate at which architects will be able to innovate will be directly tied to the design and implementation of the hardware description languages they use. Thus, the programming languages community stands on the critical path to this new golden age. This implies that we are also on the cusp of a golden age of hardware description languages. In this paper, we discuss the intellectual challenges facing researchers interested in hardware description language design, compilers, and formal methods. The major theme will be identifying opportunities to apply programming language techniques to address issues in hardware design productivity. Then, we present a vision for a multi-language system that provides a framework for developing solutions to these intellectual problems. This vision is based on a meta-programmed host language combined with a core embedded hardware description language that is used as the basis for the research and development of a sea of domain-specific languages. Central to the design of this system is the core language which is based on an abstraction that provides a general mechanism for the composition of hardware components described in any language.
权威专家宣称,计算机架构的黄金时代即将到来。在这个时代,架构师能够创新的速度将直接与他们使用的硬件描述语言的设计和实现联系在一起。因此,编程语言社区正站在通往这个新的黄金时代的关键道路上。这意味着我们也正处于硬件描述语言的黄金时代的尖端。在本文中,我们讨论了对硬件描述语言设计、编译器和形式化方法感兴趣的研究人员所面临的智力挑战。主要的主题将是确定应用编程语言技术来解决硬件设计生产力问题的机会。然后,我们提出了一个多语言系统的愿景,为开发这些智力问题的解决方案提供了一个框架。这一愿景是基于元编程主机语言和核心嵌入式硬件描述语言的结合,该语言被用作研究和开发领域特定语言海洋的基础。该系统设计的核心是基于抽象的核心语言,该抽象为用任何语言描述的硬件组件的组合提供了通用机制。
{"title":"A Golden Age of Hardware Description Languages: Applying Programming Language Techniques to Improve Design Productivity","authors":"Lenny Truong, P. Hanrahan","doi":"10.4230/LIPIcs.SNAPL.2019.7","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2019.7","url":null,"abstract":"Leading experts have declared that there is an impending golden age of computer architecture. During this age, the rate at which architects will be able to innovate will be directly tied to the design and implementation of the hardware description languages they use. Thus, the programming languages community stands on the critical path to this new golden age. This implies that we are also on the cusp of a golden age of hardware description languages. In this paper, we discuss the intellectual challenges facing researchers interested in hardware description language design, compilers, and formal methods. The major theme will be identifying opportunities to apply programming language techniques to address issues in hardware design productivity. Then, we present a vision for a multi-language system that provides a framework for developing solutions to these intellectual problems. This vision is based on a meta-programmed host language combined with a core embedded hardware description language that is used as the basis for the research and development of a sea of domain-specific languages. Central to the design of this system is the core language which is based on an abstraction that provides a general mechanism for the composition of hardware components described in any language.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127380943","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
A Complement to Blame 责备的补充
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2015.309
P. Wadler
Contracts, gradual typing, and hybrid typing all permit less-precisely typed and more-precisely typed code to interact. Blame calculus encompasses these, and guarantees blame safety: blame for type errors always lays with less-precisely typed code. This paper serves as a complement to the literature on blame calculus: it elaborates on motivation, comments on the reception of the work, critiques some work for not properly attending to blame, and looks forward to applications. No knowledge of contracts, gradual typing, hybrid typing, or blame calculus is assumed.
契约、渐进类型和混合类型都允许不精确类型和更精确类型的代码进行交互。责备演算包含了这些,并保证了责备的安全性:类型错误的责备总是落在类型不精确的代码上。本文是对责备演算文献的补充:阐述了动机,评论了工作的接受情况,批评了一些没有正确关注责备的工作,并展望了应用。假定不了解契约、渐进类型、混合类型或责任演算。
{"title":"A Complement to Blame","authors":"P. Wadler","doi":"10.4230/LIPIcs.SNAPL.2015.309","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2015.309","url":null,"abstract":"Contracts, gradual typing, and hybrid typing all permit less-precisely typed and more-precisely typed code to interact. Blame calculus encompasses these, and guarantees blame safety: blame for type errors always lays with less-precisely typed code. This paper serves as a complement to the literature on blame calculus: it elaborates on motivation, comments on the reception of the work, critiques some work for not properly attending to blame, and looks forward to applications. No knowledge of contracts, gradual typing, hybrid typing, or blame calculus is assumed.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126088284","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}
引用次数: 19
From Macros to DSLs: The Evolution of Racket 从宏到dsl:球拍的演变
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2019.5
Ryan Culpepper, M. Felleisen, M. Flatt, S. Krishnamurthi
The Racket language promotes a language-oriented style of programming. Developers create many domain-specific languages, write programs in them, and compose these programs via Racket code. This style of programming can work only if creating and composing little languages is simple and effective. While Racket’s Lisp heritage might suggest that macros suffice, its design team discovered significant shortcomings and had to improve them in many ways. This paper presents the evolution of Racket’s macro system, including a false start, and assesses its current state. 2012 ACM Subject Classification Software and its engineering → Semantics
Racket语言促进了一种面向语言的编程风格。开发人员创建许多特定于领域的语言,用它们编写程序,并通过Racket代码组合这些程序。这种编程风格只有在创建和编写小语言简单有效的情况下才能发挥作用。虽然Racket的Lisp遗产可能表明宏就足够了,但它的设计团队发现了重大缺陷,不得不从许多方面进行改进。本文介绍了Racket宏观系统的演变,包括一个错误的开始,并评估了它的当前状态。2012 ACM主题分类软件及其工程→语义
{"title":"From Macros to DSLs: The Evolution of Racket","authors":"Ryan Culpepper, M. Felleisen, M. Flatt, S. Krishnamurthi","doi":"10.4230/LIPIcs.SNAPL.2019.5","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2019.5","url":null,"abstract":"The Racket language promotes a language-oriented style of programming. Developers create many domain-specific languages, write programs in them, and compose these programs via Racket code. This style of programming can work only if creating and composing little languages is simple and effective. While Racket’s Lisp heritage might suggest that macros suffice, its design team discovered significant shortcomings and had to improve them in many ways. This paper presents the evolution of Racket’s macro system, including a false start, and assesses its current state. 2012 ACM Subject Classification Software and its engineering → Semantics","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125622260","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}
引用次数: 2
Bridging the Gap Between General-Purpose and Domain-Specific Compilers with Synthesis 用合成弥合通用和特定领域编译器之间的差距
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2015.51
Alvin Cheung, S. Kamil, Armando Solar-Lezama
This paper describes a new approach to program optimization that allows general purpose code to benefit from the optimization power of domain-specific compilers. The key to this approach is a synthesis-based technique to raise the level of abstraction of general-purpose code to enable aggressive domain-specific optimizations. We have been implementing this approach in an extensible system called Herd. The system is designed around a collection of parameterized kernel translators. Each kernel translator is associated with a domain-specific compiler, and the role of each kernel translator is to scan the input code in search of code fragments that can be optimized by the domain-specific compiler embedded within each kernel translator. By leveraging general synthesis technology, it is possible to have a generic kernel translator that can be specialized by compiler developers for each domain-specific compiler, making it easy to build new domain knowledge into the overall system. We illustrate this new approach to build optimizing compilers in two different domains, and highlight research challenges that need to be addressed in order to achieve the ultimate vision.
本文描述了一种新的程序优化方法,该方法允许通用代码受益于特定领域编译器的优化能力。这种方法的关键是一种基于综合的技术,它可以提高通用代码的抽象级别,从而实现积极的特定于领域的优化。我们一直在一个名为Herd的可扩展系统中实现这种方法。该系统是围绕一组参数化内核翻译器设计的。每个内核转换器都与一个特定于领域的编译器相关联,每个内核转换器的作用是扫描输入代码,查找可以由嵌入在每个内核转换器中的特定于领域的编译器进行优化的代码片段。通过利用通用综合技术,编译器开发人员可以为每个特定于领域的编译器专门设计一个通用的内核转换器,从而很容易将新的领域知识构建到整个系统中。我们将演示这种在两个不同领域构建优化编译器的新方法,并强调为了实现最终愿景需要解决的研究挑战。
{"title":"Bridging the Gap Between General-Purpose and Domain-Specific Compilers with Synthesis","authors":"Alvin Cheung, S. Kamil, Armando Solar-Lezama","doi":"10.4230/LIPIcs.SNAPL.2015.51","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2015.51","url":null,"abstract":"This paper describes a new approach to program optimization that allows general purpose code to benefit from the optimization power of domain-specific compilers. The key to this approach is a synthesis-based technique to raise the level of abstraction of general-purpose code to enable aggressive domain-specific optimizations. \u0000 \u0000We have been implementing this approach in an extensible system called Herd. The system is designed around a collection of parameterized kernel translators. Each kernel translator is associated with a domain-specific compiler, and the role of each kernel translator is to scan the input code in search of code fragments that can be optimized by the domain-specific compiler embedded within each kernel translator. By leveraging general synthesis technology, it is possible to have a generic kernel translator that can be specialized by compiler developers for each domain-specific compiler, making it easy to build new domain knowledge into the overall system. \u0000 \u0000We illustrate this new approach to build optimizing compilers in two different domains, and highlight research challenges that need to be addressed in order to achieve the ultimate vision.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128143543","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}
引用次数: 4
The Design of Terra: Harnessing the Best Features of High-Level and Low-Level Languages Terra的设计:利用高级和低级语言的最佳特性
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2015.79
Zach DeVito, P. Hanrahan
Applications are often written using a combination of high-level and low-level languages since it allows performance critical parts to be carefully optimized, while other parts can be written more productively. This approach is used in web development, game programming, and in build systems for applications themselves. However, most languages were not designed with interoperability in mind, resulting in glue code and duplicated features that add complexity. We propose a two-language system where both languages were designed to interoperate. Lua is used for our high-level language since it was originally designed with interoperability in mind. We create a new low-level language, Terra, that we designed to interoperate with Lua. It is embedded in Lua, and meta-programmed from it, but has a low level of abstraction suited for writing high-performance code. We discuss important design decisions ‐ compartmentalized runtimes, glue-free interoperation, and meta-programming features ‐ that enable Lua and Terra to be more powerful than the sum of their parts. 1998 ACM Subject Classification D.3.3 Language Constructs and Features
应用程序通常使用高级和低级语言的组合编写,因为它允许对性能关键部分进行仔细优化,同时可以更有效地编写其他部分。这种方法用于web开发、游戏编程和为应用程序本身构建系统。然而,大多数语言在设计时并没有考虑到互操作性,这导致了粘合代码和重复的特性,增加了复杂性。我们提出了一个两种语言的系统,其中两种语言都被设计为互操作。Lua用于我们的高级语言,因为它最初设计时就考虑到互操作性。我们创建了一种新的低级语言Terra,我们设计它与Lua进行互操作。它嵌入在Lua中,并从中进行元编程,但具有适合编写高性能代码的低抽象级别。我们讨论了重要的设计决策——划分的运行时、无胶互操作和元编程特性——这些使Lua和Terra比它们各自部分的总和更强大。1998 ACM主题分类D.3.3语言结构和特征
{"title":"The Design of Terra: Harnessing the Best Features of High-Level and Low-Level Languages","authors":"Zach DeVito, P. Hanrahan","doi":"10.4230/LIPIcs.SNAPL.2015.79","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2015.79","url":null,"abstract":"Applications are often written using a combination of high-level and low-level languages since it allows performance critical parts to be carefully optimized, while other parts can be written more productively. This approach is used in web development, game programming, and in build systems for applications themselves. However, most languages were not designed with interoperability in mind, resulting in glue code and duplicated features that add complexity. We propose a two-language system where both languages were designed to interoperate. Lua is used for our high-level language since it was originally designed with interoperability in mind. We create a new low-level language, Terra, that we designed to interoperate with Lua. It is embedded in Lua, and meta-programmed from it, but has a low level of abstraction suited for writing high-performance code. We discuss important design decisions ‐ compartmentalized runtimes, glue-free interoperation, and meta-programming features ‐ that enable Lua and Terra to be more powerful than the sum of their parts. 1998 ACM Subject Classification D.3.3 Language Constructs and Features","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122228933","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}
引用次数: 2
Natural Language is a Programming Language: Applying Natural Language Processing to Software Development 自然语言是一种编程语言:将自然语言处理应用于软件开发
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2017.4
Michael D. Ernst
A powerful, but limited, way to view software is as source code alone. Treating a program as a sequence of instructions enables it to be formalized and makes it amenable to mathematical techniques such as abstract interpretation and model checking. A program consists of much more than a sequence of instructions. Developers make use of test cases, documentation, variable names, program structure, the version control repository, and more. I argue that it is time to take the blinders off of software analysis tools: tools should use all these artifacts to deduce more powerful and useful information about the program. Researchers are beginning to make progress towards this vision. This paper gives, as examples, four results that find bugs and generate code by applying natural language processing techniques to software artifacts. The four techniques use as input error messages, variable names, procedure documentation, and user questions. They use four different NLP techniques: document similarity, word semantics, parse trees, and neural networks. The initial results suggest that this is a promising avenue for future work.
查看软件的一种强大但有限的方法是将其单独视为源代码。将程序视为指令序列,可以使其形式化,并使其适用于抽象解释和模型检查等数学技术。程序不仅仅是由一系列指令组成的。开发人员利用测试用例、文档、变量名、程序结构、版本控制存储库等等。我认为是时候揭开软件分析工具的面纱了:工具应该使用所有这些工件来推断关于程序的更强大和有用的信息。研究人员正开始朝着这一愿景取得进展。作为例子,本文给出了将自然语言处理技术应用于软件工件的四种发现错误和生成代码的结果。这四种技术用作输入错误消息、变量名、过程文档和用户问题。他们使用四种不同的NLP技术:文档相似度、词语义、解析树和神经网络。初步结果表明,这是未来工作的一个有希望的途径。
{"title":"Natural Language is a Programming Language: Applying Natural Language Processing to Software Development","authors":"Michael D. Ernst","doi":"10.4230/LIPIcs.SNAPL.2017.4","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.4","url":null,"abstract":"A powerful, but limited, way to view software is as source code alone. Treating a program as a sequence of instructions enables it to be formalized and makes it amenable to mathematical techniques such as abstract interpretation and model checking. \u0000 \u0000A program consists of much more than a sequence of instructions. Developers make use of test cases, documentation, variable names, program structure, the version control repository, and more. I argue that it is time to take the blinders off of software analysis tools: tools should use all these artifacts to deduce more powerful and useful information about the program. \u0000 \u0000Researchers are beginning to make progress towards this vision. This paper gives, as examples, four results that find bugs and generate code by applying natural language processing techniques to software artifacts. The four techniques use as input error messages, variable names, procedure documentation, and user questions. They use four different NLP techniques: document similarity, word semantics, parse trees, and neural networks. \u0000 \u0000The initial results suggest that this is a promising avenue for future work.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123259481","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}
引用次数: 41
Refined Criteria for Gradual Typing 渐进分型的改进标准
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2015.274
Jeremy G. Siek, Michael M. Vitousek, M. Cimini, J. Boyland
Siek and Taha [2006] coined the term gradual typing to describe a theory for integrating static and dynamic typing within a single language that 1) puts the programmer in control of which regions of code are statically or dynamically typed and 2) enables the gradual evolution of code between the two typing disciplines. Since 2006, the term gradual typing has become quite popular but its meaning has become diluted to encompass anything related to the integration of static and dynamic typing. This dilution is partly the fault of the original paper, which provided an incomplete formal characterization of what it means to be gradually typed. In this paper we draw a crisp line in the sand that includes a new formal property, named the gradual guarantee, that relates the behavior of programs that differ only with respect to their type annotations. We argue that the gradual guarantee provides important guidance for designers of gradually typed languages. We survey the gradual typing literature, critiquing designs in light of the gradual guarantee. We also report on a mechanized proof that the gradual guarantee holds for the Gradually Typed Lambda Calculus.
Siek和Taha[2006]创造了术语“渐进类型”来描述一种在单一语言中集成静态和动态类型的理论,该理论1)使程序员能够控制代码的哪些区域是静态类型或动态类型,2)使代码在两种类型学科之间逐渐演变。自2006年以来,渐进式类型这个术语变得相当流行,但它的含义已经被淡化为包含与静态和动态类型集成相关的任何内容。这种淡化在一定程度上是原始论文的错误,它对什么是逐渐类型化提供了不完整的正式描述。在本文中,我们在沙地上画了一条清晰的线,其中包括一个新的形式性质,称为渐进保证,它将程序的行为联系起来,这些行为仅与它们的类型注释有关。我们认为渐进式保证为渐进式类型语言的设计者提供了重要的指导。我们回顾了渐进式打字的文献,从渐进式保证的角度对设计进行了批判。我们还报道了渐类型化λ演算的渐保证成立的一个机械化证明。
{"title":"Refined Criteria for Gradual Typing","authors":"Jeremy G. Siek, Michael M. Vitousek, M. Cimini, J. Boyland","doi":"10.4230/LIPIcs.SNAPL.2015.274","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2015.274","url":null,"abstract":"Siek and Taha [2006] coined the term gradual typing to describe a theory for integrating static and dynamic typing within a single language that 1) puts the programmer in control of which regions of code are statically or dynamically typed and 2) enables the gradual evolution of code between the two typing disciplines. Since 2006, the term gradual typing has become quite popular but its meaning has become diluted to encompass anything related to the integration of static and dynamic typing. This dilution is partly the fault of the original paper, which provided an incomplete formal characterization of what it means to be gradually typed. In this paper we draw a crisp line in the sand that includes a new formal property, named the gradual guarantee, that relates the behavior of programs that differ only with respect to their type annotations. We argue that the gradual guarantee provides important guidance for designers of gradually typed languages. We survey the gradual typing literature, critiquing designs in light of the gradual guarantee. We also report on a mechanized proof that the gradual guarantee holds for the Gradually Typed Lambda Calculus.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133979722","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}
引用次数: 149
The End of History? Using a Proof Assistant to Replace Language Design with Library Design 历史的终结?使用证明助手用库设计代替语言设计
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2017.3
A. Chlipala, Benjamin Delaware, Samuel Duchovni, Jason Gross, Clément Pit-Claudel, Sorawit Suriyakarn, Peng Wang, Katherine Q. Ye
Functionality of software systems has exploded in part because of advances in programming-language support for packaging reusable functionality as libraries. Developers benefit from the uniformity that comes of exposing many interfaces in the same language, as opposed to stringing together hodgepodges of command-line tools. Domain-specific languages may be viewed as an evolution of the power of reusable interfaces, when those interfaces become so flexible as to deserve to be called programming languages. However, common approaches to domain-specific languages give up many of the hard-won advantages of library-building in a rich common language, and even the traditional approach poses significant challenges in learning new APIs. We suggest that instead of continuing to develop new domain-specific languages, our community should embrace library-based ecosystems within very expressive languages that mix programming and theorem proving. Our prototype framework Fiat, a library for the Coq proof assistant, turns languages into easily comprehensible libraries via the key idea of modularizing functionality and performance away from each other, the former via macros that desugar into higher-order logic and the latter via optimization scripts that derive efficient code from logical programs.
软件系统的功能爆炸式增长,部分原因是编程语言支持将可重用功能打包为库的进步。开发人员受益于用同一种语言公开许多接口所带来的一致性,而不是将命令行工具的大杂烩串在一起。特定于领域的语言可以被看作是可重用接口功能的进化,当这些接口变得如此灵活以至于可以被称为编程语言时。然而,特定于领域的语言的通用方法放弃了用丰富的通用语言构建库的许多来之不易的优势,甚至传统方法在学习新的api方面也提出了重大挑战。我们建议不要继续开发新的特定于领域的语言,我们的社区应该在混合了编程和定理证明的非常有表现力的语言中拥抱基于库的生态系统。我们的原型框架Fiat是一个用于Coq证明助手的库,它通过将功能和性能彼此模块化的关键思想,将语言变成易于理解的库,前者通过将宏转化为高阶逻辑,后者通过从逻辑程序派生高效代码的优化脚本。
{"title":"The End of History? Using a Proof Assistant to Replace Language Design with Library Design","authors":"A. Chlipala, Benjamin Delaware, Samuel Duchovni, Jason Gross, Clément Pit-Claudel, Sorawit Suriyakarn, Peng Wang, Katherine Q. Ye","doi":"10.4230/LIPIcs.SNAPL.2017.3","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.3","url":null,"abstract":"Functionality of software systems has exploded in part because of advances in programming-language support for packaging reusable functionality as libraries. Developers benefit from the uniformity that comes of exposing many interfaces in the same language, as opposed to stringing together hodgepodges of command-line tools. Domain-specific languages may be viewed as an evolution of the power of reusable interfaces, when those interfaces become so flexible as to deserve to be called programming languages. However, common approaches to domain-specific languages give up many of the hard-won advantages of library-building in a rich common language, and even the traditional approach poses significant challenges in learning new APIs. We suggest that instead of continuing to develop new domain-specific languages, our community should embrace library-based ecosystems within very expressive languages that mix programming and theorem proving. Our prototype framework Fiat, a library for the Coq proof assistant, turns languages into easily comprehensible libraries via the key idea of modularizing functionality and performance away from each other, the former via macros that desugar into higher-order logic and the latter via optimization scripts that derive efficient code from logical programs.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133602937","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}
引用次数: 16
Uncanny Valleys in Declarative Language Design 陈述性语言设计中的恐怖谷
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2017.9
Mark S. Miller, D. V. Dincklage, V. Ercegovac, Brian Chin
When people write programs in conventional programming languages, they over-specify how to solve the problem they have in mind. Over-specification prevents the language’s implementation from making many optimization decisions, leaving programmers with this burden. In more declarative languages, programmers over-specify less, enabling the implementation to make more choices for them. As these decisions improve, programmers shift more attention from implementation to their real problems. This process easily overshoots. When under-specified programs almost always work well enough, programmers rarely need to think about implementation details. As their understanding of implementation choices atrophies, the controls provided so they can override these decisions become obscure. Our declarative language project, Yedalog, is in the midst of this dilemma. The improvements in question make our users more productive, so we cannot simply retreat back towards overspecification. To proceed forward instead, we must meet some of the expectations we prematurely provoked, and our implementation’s behavior must help users learn expectations more aligned with our intended semantics. These are general issues. Discussing their concrete manifestation in Yedalog should help other declarative systems that come to face these issues. 1998 ACM Subject Classification D.3.2 Constraint and Logic Languages
当人们用传统的编程语言编写程序时,他们过多地指定了如何解决他们心中的问题。过度规范阻止了语言的实现做出许多优化决策,给程序员留下了这个负担。在更多的声明性语言中,程序员的过度指定较少,从而使实现能够为他们做出更多的选择。随着这些决策的改进,程序员将更多的注意力从实现转移到他们真正的问题上。这个过程很容易过度。当未指定的程序几乎总是工作得很好时,程序员很少需要考虑实现细节。当他们对实现选择的理解萎缩时,提供的使他们能够覆盖这些决策的控制变得模糊。我们的声明性语言项目Yedalog正处于这种困境之中。所讨论的改进使我们的用户更有效率,因此我们不能简单地退回到过度规范。相反,要继续前进,我们必须满足我们过早引发的一些期望,并且我们的实现行为必须帮助用户了解与我们预期语义更一致的期望。这些都是一般性问题。讨论它们在Yedalog中的具体表现应该有助于其他面临这些问题的声明系统。1998 ACM学科分类D.3.2约束与逻辑语言
{"title":"Uncanny Valleys in Declarative Language Design","authors":"Mark S. Miller, D. V. Dincklage, V. Ercegovac, Brian Chin","doi":"10.4230/LIPIcs.SNAPL.2017.9","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.9","url":null,"abstract":"When people write programs in conventional programming languages, they over-specify how to solve the problem they have in mind. Over-specification prevents the language’s implementation from making many optimization decisions, leaving programmers with this burden. In more declarative languages, programmers over-specify less, enabling the implementation to make more choices for them. As these decisions improve, programmers shift more attention from implementation to their real problems. This process easily overshoots. When under-specified programs almost always work well enough, programmers rarely need to think about implementation details. As their understanding of implementation choices atrophies, the controls provided so they can override these decisions become obscure. Our declarative language project, Yedalog, is in the midst of this dilemma. The improvements in question make our users more productive, so we cannot simply retreat back towards overspecification. To proceed forward instead, we must meet some of the expectations we prematurely provoked, and our implementation’s behavior must help users learn expectations more aligned with our intended semantics. These are general issues. Discussing their concrete manifestation in Yedalog should help other declarative systems that come to face these issues. 1998 ACM Subject Classification D.3.2 Constraint and Logic Languages","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128946542","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}
引用次数: 4
Version Control Is for Your Data Too 版本控制也适用于你的数据
Pub Date : 1900-01-01 DOI: 10.4230/LIPIcs.SNAPL.2019.8
Gowtham Kaki, K. Sivaramakrishnan, S. Jagannathan
Programmers regularly use distributed version control systems (DVCS) such as Git to facilitate collaborative software development. The primary purpose of a DVCS is to maintain integrity of source code in the presence of concurrent, possibly conflicting edits from collaborators. In addition to safely merging concurrent non-conflicting edits, a DVCS extensively tracks source code provenance to help programmers contextualize and resolve conflicts. Provenance also facilitates debugging by letting programmers see diffs between versions and quickly find those edits that introduced the offending conflict (e.g., via git blame). In this paper, we posit that analogous workflows to collaborative software development also arise in distributed software execution; we argue that the characteristics that make a DVCS an ideal fit for the former also make it an ideal fit for the latter. Building on this observation, we propose a distributed programming model, called carmot that views distributed shared state as an entity evolving in time, manifested as a sequence of persistent versions, and relies on an explicitly defined merge semantics to reconcile concurrent conflicting versions. We show examples demonstrating how carmot simplifies distributed programming, while also enabling novel workflows integral to modern applications such as blockchains. We also describe a prototype implementation of carmot that we use to evaluate its practicality. 2012 ACM Subject Classification Computing methodologies→ Distributed programming languages; Software and its engineering → Software configuration management and version control systems; Software and its engineering → API languages
程序员经常使用分布式版本控制系统(DVCS),比如Git,来促进协同软件开发。DVCS的主要目的是在协作者进行并发的、可能有冲突的编辑时保持源代码的完整性。除了安全地合并并发的无冲突编辑之外,DVCS还广泛地跟踪源代码来源,以帮助程序员将冲突置于环境中并解决冲突。出处还可以让程序员看到版本之间的差异,并快速找到那些引入了令人不快的冲突的编辑(例如,通过git责备),从而方便调试。在本文中,我们假设协同软件开发的类似工作流也出现在分布式软件执行中;我们认为,使DVCS理想适合前者的特征也使其理想适合后者。基于这种观察,我们提出了一种分布式编程模型,称为carmot,它将分布式共享状态视为随时间演变的实体,表现为持久版本的序列,并依赖于显式定义的合并语义来协调并发冲突的版本。我们展示了一些例子,展示了carmot如何简化分布式编程,同时也使新的工作流成为现代应用程序(如区块链)的一部分。我们还描述了一个carmot的原型实现,我们使用它来评估其实用性。2012 ACM学科分类计算方法→分布式编程语言;软件及其工程→软件配置管理和版本控制系统;软件及其工程→API语言
{"title":"Version Control Is for Your Data Too","authors":"Gowtham Kaki, K. Sivaramakrishnan, S. Jagannathan","doi":"10.4230/LIPIcs.SNAPL.2019.8","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2019.8","url":null,"abstract":"Programmers regularly use distributed version control systems (DVCS) such as Git to facilitate collaborative software development. The primary purpose of a DVCS is to maintain integrity of source code in the presence of concurrent, possibly conflicting edits from collaborators. In addition to safely merging concurrent non-conflicting edits, a DVCS extensively tracks source code provenance to help programmers contextualize and resolve conflicts. Provenance also facilitates debugging by letting programmers see diffs between versions and quickly find those edits that introduced the offending conflict (e.g., via git blame). In this paper, we posit that analogous workflows to collaborative software development also arise in distributed software execution; we argue that the characteristics that make a DVCS an ideal fit for the former also make it an ideal fit for the latter. Building on this observation, we propose a distributed programming model, called carmot that views distributed shared state as an entity evolving in time, manifested as a sequence of persistent versions, and relies on an explicitly defined merge semantics to reconcile concurrent conflicting versions. We show examples demonstrating how carmot simplifies distributed programming, while also enabling novel workflows integral to modern applications such as blockchains. We also describe a prototype implementation of carmot that we use to evaluate its practicality. 2012 ACM Subject Classification Computing methodologies→ Distributed programming languages; Software and its engineering → Software configuration management and version control systems; Software and its engineering → API languages","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122524121","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}
引用次数: 4
期刊
Summit on Advances in Programming Languages
全部 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