首页 > 最新文献

Summit on Advances in Programming Languages最新文献

英文 中文
From Theory to Systems: A Grounded Approach to Programming Language Education 从理论到系统:程序设计语言教育的基础方法
Pub Date : 2019-04-14 DOI: 10.4230/LIPIcs.SNAPL.2019.4
Will Crichton
I present a new approach to teaching a graduate-level programming languages course focused on using systems programming ideas and languages like WebAssembly and Rust to motivate PL theory. Drawing on students' prior experience with low-level languages, the course shows how type systems and PL theory are used to avoid tricky real-world errors that students encounter in practice. I reflect on the curricular design and lessons learned from two years of teaching at Stanford, showing that integrating systems ideas can provide students a more grounded and enjoyable education in programming languages. The curriculum, course notes, and assignments are freely available: this http URL
我提出了一种新的方法来教授研究生水平的编程语言课程,重点是使用系统编程思想和语言(如WebAssembly和Rust)来激发PL理论。根据学生先前使用低级语言的经验,该课程展示了如何使用类型系统和PL理论来避免学生在实践中遇到的棘手的现实世界错误。我反思了课程设计和在斯坦福大学两年教学的经验教训,表明整合系统思想可以为学生提供更扎实、更愉快的编程语言教育。课程,课程笔记和作业都是免费的:这个http URL
{"title":"From Theory to Systems: A Grounded Approach to Programming Language Education","authors":"Will Crichton","doi":"10.4230/LIPIcs.SNAPL.2019.4","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2019.4","url":null,"abstract":"I present a new approach to teaching a graduate-level programming languages course focused on using systems programming ideas and languages like WebAssembly and Rust to motivate PL theory. Drawing on students' prior experience with low-level languages, the course shows how type systems and PL theory are used to avoid tricky real-world errors that students encounter in practice. I reflect on the curricular design and lessons learned from two years of teaching at Stanford, showing that integrating systems ideas can provide students a more grounded and enjoyable education in programming languages. The curriculum, course notes, and assignments are freely available: this http URL","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2019-04-14","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125643241","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}
引用次数: 0
Linking Types for Multi-Language Software: Have Your Cake and Eat It Too 多语言软件的链接类型:鱼与熊掌兼得
Pub Date : 2017-11-13 DOI: 10.4230/LIPIcs.SNAPL.2017.12
Daniel Patterson, Amal J. Ahmed
Software developers compose systems from components written in many different languages. A business-logic component may be written in Java or OCaml, a resource-intensive component in C or Rust, and a high-assurance component in Coq. In this multi-language world, program execution sends values from one linguistic context to another. This boundary-crossing exposes values to contexts with unforeseen behavior---that is, behavior that could not arise in the source language of the value. For example, a Rust function may end up being applied in an ML context that violates the memory usage policy enforced by Rust's type system. This leads to the question of how developers ought to reason about code in such a multi-language world where behavior inexpressible in one language is easily realized in another. This paper proposes the novel idea of linking types to address the problem of reasoning about single-language components in a multi-lingual setting. Specifically, linking types allow programmers to annotate where in a program they can link with components inexpressible in their unadulterated language. This enables developers to reason about (behavioral) equality using only their own language and the annotations, even though their code may be linked with code written in a language with more expressive power.
软件开发人员用许多不同语言编写的组件组成系统。业务逻辑组件可以用Java或OCaml编写,资源密集型组件可以用C或Rust编写,高保证组件可以用Coq编写。在这个多语言的世界中,程序执行将值从一种语言上下文中发送到另一种语言上下文中。这种跨界将值暴露在具有不可预见行为的上下文中——也就是说,在值的源语言中不可能出现的行为。例如,一个Rust函数可能最终被应用于一个违反Rust类型系统强制的内存使用策略的ML上下文中。这就引出了一个问题:在这样一个多语言的世界里,一种语言无法表达的行为在另一种语言中很容易实现,开发人员应该如何对代码进行推理。本文提出了链接类型的新思想来解决多语言环境下单语言组件的推理问题。具体来说,链接类型允许程序员注释程序中他们可以链接的组件,这些组件在纯语言中是无法表达的。这使得开发人员能够仅使用他们自己的语言和注释来推断(行为)平等,即使他们的代码可能与用具有更强表达能力的语言编写的代码相关联。
{"title":"Linking Types for Multi-Language Software: Have Your Cake and Eat It Too","authors":"Daniel Patterson, Amal J. Ahmed","doi":"10.4230/LIPIcs.SNAPL.2017.12","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.12","url":null,"abstract":"Software developers compose systems from components written in many different languages. A business-logic component may be written in Java or OCaml, a resource-intensive component in C or Rust, and a high-assurance component in Coq. In this multi-language world, program execution sends values from one linguistic context to another. This boundary-crossing exposes values to contexts with unforeseen behavior---that is, behavior that could not arise in the source language of the value. For example, a Rust function may end up being applied in an ML context that violates the memory usage policy enforced by Rust's type system. This leads to the question of how developers ought to reason about code in such a multi-language world where behavior inexpressible in one language is easily realized in another. \u0000This paper proposes the novel idea of linking types to address the problem of reasoning about single-language components in a multi-lingual setting. Specifically, linking types allow programmers to annotate where in a program they can link with components inexpressible in their unadulterated language. This enables developers to reason about (behavioral) equality using only their own language and the annotations, even though their code may be linked with code written in a language with more expressive power.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2017-11-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122759928","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
AP: Artificial Programming 美联社:人工编程
Pub Date : 2017-06-06 DOI: 10.4230/LIPIcs.SNAPL.2017.16
Rishabh Singh, Pushmeet Kohli
The ability to automatically discover a program consistent with a given user intent (specification) is the holy grail of Computer Science. While significant progress has been made on the so-called problem of Program Synthesis, a number of challenges remain; particularly for the case of synthesizing richer and larger programs. This is in large part due to the difficulty of search over the space of programs. In this paper, we argue that the above-mentioned challenge can be tackled by learning synthesizers automatically from a large amount of training data. We present a first step in this direction by describing our novel synthesis approach based on two neural architectures for tackling the two key challenges of Learning to understand partial input-output specifications and Learning to search programs. The first neural architecture called the Spec Encoder computes a continuous representation of the specification, whereas the second neural architecture called the Program Generator incrementally constructs programs in a hypothesis space that is conditioned by the specification vector. The key idea of the approach is to train these architectures using a large set of (spec,P) pairs, where P denotes a program sampled from the DSL L and spec denotes the corresponding specification satisfied by P. We demonstrate the effectiveness of our approach on two preliminary instantiations. The first instantiation, called Neural FlashFill, corresponds to the domain of string manipulation programs similar to that of FlashFill. The second domain considers string transformation programs consisting of composition of API functions. We show that a neural system is able to perform quite well in learning a large majority of programs from few input-output examples. We believe this new approach will not only dramatically expand the applicability and effectiveness of Program Synthesis, but also would lead to the coming together of the Program Synthesis and Machine Learning research disciplines.
自动发现与给定用户意图(规范)一致的程序的能力是计算机科学的圣杯。虽然在所谓的方案综合问题上取得了重大进展,但仍然存在一些挑战;特别是对于合成更丰富和更大的程序的情况。这在很大程度上是由于程序空间搜索的困难。在本文中,我们认为上述挑战可以通过从大量训练数据中自动学习合成器来解决。我们在这个方向上迈出了第一步,描述了我们基于两种神经体系结构的新型合成方法,用于解决学习理解部分输入输出规范和学习搜索程序这两个关键挑战。第一个被称为规范编码器的神经结构计算规范的连续表示,而第二个被称为程序生成器的神经结构在一个由规范向量限定的假设空间中增量地构建程序。该方法的关键思想是使用大量(spec,P)对来训练这些体系结构,其中P表示从DSL L中采样的程序,spec表示P满足的相应规范。我们在两个初步实例上证明了我们的方法的有效性。第一个实例称为Neural FlashFill,对应于类似于FlashFill的字符串处理程序的领域。第二个领域考虑由API函数组合组成的字符串转换程序。我们表明,神经系统能够从很少的输入输出示例中学习绝大多数程序。我们相信这种新方法不仅会极大地扩展程序综合的适用性和有效性,而且还会导致程序综合和机器学习研究学科的结合。
{"title":"AP: Artificial Programming","authors":"Rishabh Singh, Pushmeet Kohli","doi":"10.4230/LIPIcs.SNAPL.2017.16","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.16","url":null,"abstract":"The ability to automatically discover a program consistent with a given user intent (specification) is the holy grail of Computer Science. While significant progress has been made on the so-called problem of Program Synthesis, a number of challenges remain; particularly for the case of synthesizing richer and larger programs. This is in large part due to the difficulty of search over the space of programs. In this paper, we argue that the above-mentioned challenge can be tackled by learning synthesizers automatically from a large amount of training data. We present a first step in this direction by describing our novel synthesis approach based on two neural architectures for tackling the two key challenges of Learning to understand partial input-output specifications and Learning to search programs. The first neural architecture called the Spec Encoder computes a continuous representation of the specification, whereas the second neural architecture called the Program Generator incrementally constructs programs in a hypothesis space that is conditioned by the specification vector. The key idea of the approach is to train these architectures using a large set of (spec,P) pairs, where P denotes a program sampled from the DSL L and spec denotes the corresponding specification satisfied by P. We demonstrate the effectiveness of our approach on two preliminary instantiations. The first instantiation, called Neural FlashFill, corresponds to the domain of string manipulation programs similar to that of FlashFill. The second domain considers string transformation programs consisting of composition of API functions. We show that a neural system is able to perform quite well in learning a large majority of programs from few input-output examples. We believe this new approach will not only dramatically expand the applicability and effectiveness of Program Synthesis, but also would lead to the coming together of the Program Synthesis and Machine Learning research disciplines.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2017-06-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128781197","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}
引用次数: 13
Fission: Secure Dynamic Code-Splitting for JavaScript 裂变:JavaScript的安全动态代码分裂
Pub Date : 2017-05-01 DOI: 10.4230/LIPIcs.SNAPL.2017.5
Arjun Guha, Jean-Baptiste Jeannin, Rachit Nigam, J. Tangen, Rian Shambaugh
Traditional web programming involves the creation of two distinct programs: a client-side front-end, a server-side back-end, and a lot of communications boilerplate. An alternative approach is to use a tierless programming model, where a single program describes the behavior of both the client and the server, and the runtime system takes care of communication. Unfortunately, this usually entails adopting a new language and thus abandoning well-worn libraries and web programming tools. In this paper, we present our ongoing work on Fission, a platform that uses dynamic tier-splitting and dynamic information flow control to transparently run a single JavaScript program across the client and server. Although static tier-splitting has been studied before, our focus on dynamic approaches presents several new challenges and opportunities. For example, Fission supports characteristic JavaScript features such as eval and sophisticated JavaScript libraries like React. Therefore, programmers can reason about the integrity and confidentiality of information while continuing to use common libraries and programming patterns. Moreover, by unifying the client and server into a single program, Fission allows language-based tools, like type systems and IDEs, to manipulate complete web applications. To illustrate, we use TypeScript to ensure that client-server communication does not go wrong.
传统的web编程包括创建两个不同的程序:客户端前端、服务器端后端和大量的通信样板。另一种方法是使用无层编程模型,其中单个程序描述客户机和服务器的行为,而运行时系统负责通信。不幸的是,这通常需要采用一种新的语言,从而放弃陈旧的库和web编程工具。在本文中,我们展示了我们正在进行的关于Fission的工作,这是一个使用动态分层和动态信息流控制的平台,可以在客户端和服务器端透明地运行单个JavaScript程序。虽然以前已经研究过静态层拆分,但我们对动态方法的关注带来了一些新的挑战和机遇。例如,Fission支持eval等JavaScript特性和React等复杂的JavaScript库。因此,程序员可以在继续使用公共库和编程模式的同时考虑信息的完整性和机密性。此外,通过将客户端和服务器统一到一个程序中,Fission允许基于语言的工具(如类型系统和ide)来操作完整的web应用程序。为了说明这一点,我们使用TypeScript来确保客户端与服务器之间的通信不会出错。
{"title":"Fission: Secure Dynamic Code-Splitting for JavaScript","authors":"Arjun Guha, Jean-Baptiste Jeannin, Rachit Nigam, J. Tangen, Rian Shambaugh","doi":"10.4230/LIPIcs.SNAPL.2017.5","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.5","url":null,"abstract":"Traditional web programming involves the creation of two distinct programs: a client-side front-end, a server-side back-end, and a lot of communications boilerplate. An alternative approach is to use a tierless programming model, where a single program describes the behavior of both the client and the server, and the runtime system takes care of communication. Unfortunately, this usually entails adopting a new language and thus abandoning well-worn libraries and web programming tools. \u0000 \u0000In this paper, we present our ongoing work on Fission, a platform that uses dynamic tier-splitting and dynamic information flow control to transparently run a single JavaScript program across the client and server. Although static tier-splitting has been studied before, our focus on dynamic approaches presents several new challenges and opportunities. For example, Fission supports characteristic JavaScript features such as eval and sophisticated JavaScript libraries like React. Therefore, programmers can reason about the integrity and confidentiality of information while continuing to use common libraries and programming patterns. Moreover, by unifying the client and server into a single program, Fission allows language-based tools, like type systems and IDEs, to manipulate complete web applications. To illustrate, we use TypeScript to ensure that client-server communication does not go wrong.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2017-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125245799","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
Migratory Typing: Ten Years Later 迁移型分型:十年后
Pub Date : 2017-05-01 DOI: 10.4230/LIPIcs.SNAPL.2017.17
Sam Tobin-Hochstadt, M. Felleisen, R. Findler, M. Flatt, B. Greenman, A. Kent, Vincent St-Amour, T. Strickland, Asumu Takikawa
In this day and age, many developers work on large, untyped code repositories. Even if they are the creators of the code, they notice that they have to figure out the equivalent of method signatures every time they work on old code. This step is time consuming and error prone. Ten years ago, the two lead authors outlined a linguistic solution to this problem. Specifically they proposed the creation of typed twins for untyped programming languages so that developers could migrate scripts from the untyped world to a typed one in an incremental manner. Their programmatic paper also spelled out three guiding design principles concerning the acceptance of grown idioms, the soundness of mixed-typed programs, and the units of migration. This paper revisits this idea of a migratory type system as implemented for Racket. It explains how the design principles have been used to produce the Typed Racket twin and presents an assessment of the project's status, highlighting successes and failures.
在这个时代,许多开发人员都在大型、无类型的代码库上工作。即使他们是代码的创建者,他们也会注意到,每次处理旧代码时,他们都必须找出与方法签名等效的方法。此步骤耗时且容易出错。十年前,两位主要作者概述了这个问题的语言解决方案。具体来说,他们建议为非类型化编程语言创建类型双胞胎,这样开发人员就可以以增量的方式将脚本从非类型化世界迁移到类型化世界。他们的纲领性文件还详细阐述了三个指导设计原则,涉及对成熟成语的接受,混合类型程序的合理性以及迁移单位。本文重新审视了在Racket中实现的迁移类型系统的思想。它解释了如何使用设计原则来生产类型型球拍双胞胎,并提出了项目状态的评估,突出了成功和失败。
{"title":"Migratory Typing: Ten Years Later","authors":"Sam Tobin-Hochstadt, M. Felleisen, R. Findler, M. Flatt, B. Greenman, A. Kent, Vincent St-Amour, T. Strickland, Asumu Takikawa","doi":"10.4230/LIPIcs.SNAPL.2017.17","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.17","url":null,"abstract":"In this day and age, many developers work on large, untyped code repositories. Even if they are the creators of the code, they notice that they have to figure out the equivalent of method signatures every time they work on old code. This step is time consuming and error prone. \u0000 \u0000Ten years ago, the two lead authors outlined a linguistic solution to this problem. Specifically they proposed the creation of typed twins for untyped programming languages so that developers could migrate scripts from the untyped world to a typed one in an incremental manner. Their programmatic paper also spelled out three guiding design principles concerning the acceptance of grown idioms, the soundness of mixed-typed programs, and the units of migration. \u0000 \u0000This paper revisits this idea of a migratory type system as implemented for Racket. It explains how the design principles have been used to produce the Typed Racket twin and presents an assessment of the project's status, highlighting successes and failures.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2017-05-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126990791","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
Everest: Towards a Verified, Drop-in Replacement of HTTPS 珠穆朗玛峰:迈向一个经过验证的、可直接替换的HTTPS
Pub Date : 2017-04-30 DOI: 10.4230/LIPIcs.SNAPL.2017.1
K. Bhargavan, Barry Bond, Antoine Delignat-Lavaud, C. Fournet, C. Hawblitzel, Catalin Hritcu, Samin S. Ishtiaq, Markulf Kohlweiss, Rustan Leino, Jacob R. Lorch, K. Maillard, J. Pan, Bryan Parno, Jonathan Protzenko, T. Ramananandro, A. Rane, Aseem Rastogi, N. Swamy, Laure Thompson, Peng Wang, Santiago Zanella-Béguelin, J. Zinzindohoué
The HTTPS ecosystem is the foundation on which Internet security is built. At the heart of this ecosystem is the Transport Layer Security (TLS) protocol, which in turn uses the X.509 public-key infrastructure and numerous cryptographic constructions and algorithms. Unfortunately, this ecosystem is extremely brittle, with headline-grabbing attacks and emergency patches many times a year. We describe our ongoing efforts in Everest (The Everest VERified End-to-end Secure Transport) a project that aims to build and deploy a verified version of TLS and other components of HTTPS, replacing the current infrastructure with proven, secure software. Aiming both at full verification and usability, we conduct high-level code-based, game-playing proofs of security on cryptographic implementations that yield efficient, deployable code, at the level of C and assembly. Concretely, we use F*, a dependently typed language for programming, meta-programming, and proving at a high level, while relying on low-level DSLs embedded within F* for programming low-level components when necessary for performance and, sometimes, side-channel resistance. To compose the pieces, we compile all our code to source-like C and assembly, suitable for deployment and integration with existing code bases, as well as audit by independent security experts. Our main results so far include (1) the design of Low*, a subset of F* designed for C-like imperative programming but with high-level verification support, and KreMLin, a compiler that extracts Low* programs to C; (2) an implementation of the TLS-1.3 record layer in Low*, together with a proof of its concrete cryptographic security; (3) Vale, a new DSL for verified assembly language, and several optimized cryptographic primitives proven functionally correct and side-channel resistant. In an early deployment, all our verified software is integrated and deployed within libcurl, a widely used library of networking protocols.
HTTPS生态系统是构建互联网安全的基础。这个生态系统的核心是传输层安全(TLS)协议,它又使用X.509公钥基础设施和许多加密结构和算法。不幸的是,这个生态系统非常脆弱,每年都会有很多次引人注目的攻击和紧急补丁。我们描述了我们在Everest(珠峰验证端到端安全传输)项目中正在进行的努力,该项目旨在构建和部署经过验证的TLS版本和其他HTTPS组件,用经过验证的安全软件取代当前的基础设施。为了充分验证和可用性,我们在C和汇编级别上对加密实现进行了基于代码的高级安全证明,从而产生了高效的、可部署的代码。具体地说,我们使用F*,这是一种用于编程、元编程和高层次证明的依赖类型语言,而当需要提高性能时,我们依赖于F*中嵌入的低级dsl来编程低级组件,有时还需要侧通道阻力。为了组合这些片段,我们将所有的代码编译为类似于源代码的C语言和汇编语言,适合于部署和与现有代码库集成,并由独立的安全专家进行审计。到目前为止,我们的主要成果包括:(1)Low*的设计,它是F*的一个子集,专为类似C的命令式编程而设计,但具有高级验证支持,以及KreMLin,一个将Low*程序提取为C的编译器;(2) Low*中TLS-1.3记录层的实现,并证明其具体的加密安全性;(3)经过验证的汇编语言的新DSL Vale和几个经过优化的加密原语被证明功能正确且抗侧信道。在早期部署中,我们所有经过验证的软件都集成并部署在libcurl中,libcurl是一个广泛使用的网络协议库。
{"title":"Everest: Towards a Verified, Drop-in Replacement of HTTPS","authors":"K. Bhargavan, Barry Bond, Antoine Delignat-Lavaud, C. Fournet, C. Hawblitzel, Catalin Hritcu, Samin S. Ishtiaq, Markulf Kohlweiss, Rustan Leino, Jacob R. Lorch, K. Maillard, J. Pan, Bryan Parno, Jonathan Protzenko, T. Ramananandro, A. Rane, Aseem Rastogi, N. Swamy, Laure Thompson, Peng Wang, Santiago Zanella-Béguelin, J. Zinzindohoué","doi":"10.4230/LIPIcs.SNAPL.2017.1","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.1","url":null,"abstract":"The HTTPS ecosystem is the foundation on which Internet security is built. At the heart of this ecosystem is the Transport Layer Security (TLS) protocol, which in turn uses the X.509 public-key infrastructure and numerous cryptographic constructions and algorithms. Unfortunately, this ecosystem is extremely brittle, with headline-grabbing attacks and emergency patches many times a year. We describe our ongoing efforts in Everest (The Everest VERified End-to-end Secure Transport) a project that aims to build and deploy a verified version of TLS and other components of HTTPS, replacing the current infrastructure with proven, secure software. \u0000 \u0000Aiming both at full verification and usability, we conduct high-level code-based, game-playing proofs of security on cryptographic implementations that yield efficient, deployable code, at the level of C and assembly. Concretely, we use F*, a dependently typed language for programming, meta-programming, and proving at a high level, while relying on low-level DSLs embedded within F* for programming low-level components when necessary for performance and, sometimes, side-channel resistance. To compose the pieces, we compile all our code to source-like C and assembly, suitable for deployment and integration with existing code bases, as well as audit by independent security experts. \u0000 \u0000Our main results so far include (1) the design of Low*, a subset of F* designed for C-like imperative programming but with high-level verification support, and KreMLin, a compiler that extracts Low* programs to C; (2) an implementation of the TLS-1.3 record layer in Low*, together with a proof of its concrete cryptographic security; (3) Vale, a new DSL for verified assembly language, and several optimized cryptographic primitives proven functionally correct and side-channel resistant. In an early deployment, all our verified software is integrated and deployed within libcurl, a widely used library of networking protocols.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2017-04-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132983535","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}
引用次数: 65
Toward Semantic Foundations for Program Editors 面向程序编辑器的语义基础
Pub Date : 2017-03-01 DOI: 10.4230/LIPIcs.SNAPL.2017.11
Cyrus Omar, Ian Voysey, Michael C Hilton, Joshua Sunshine, Claire Le Goues, Jonathan Aldrich, Matthew A. Hammer
Programming language definitions assign formal meaning to complete programs. Programmers, however, spend a substantial amount of time interacting with incomplete programs - programs with holes, type inconsistencies and binding inconsistencies - using tools like program editors and live programming environments (which interleave editing and evaluation). Semanticists have done comparatively little to formally characterize (1) the static and dynamic semantics of incomplete programs; (2) the actions available to programmers as they edit and inspect incomplete programs; and (3) the behavior of editor services that suggest likely edit actions to the programmer based on semantic information extracted from the incomplete program being edited, and from programs that the system has encountered in the past. This paper serves as a vision statement for a research program that seeks to develop these "missing" semantic foundations. Our hope is that these contributions, which will take the form of a series of simple formal calculi equipped with a tractable metatheory, will guide the design of a variety of current and future interactive programming tools, much as various lambda calculi have guided modern language designs. Our own research will apply these principles in the design of Hazel, an experimental live lab notebook programming environment designed for data science tasks. We plan to co-design the Hazel language with the editor so that we can explore concepts such as edit-time semantic conflict resolution mechanisms and mechanisms that allow library providers to install library-specific editor services.
编程语言定义赋予完整的程序正式的意义。然而,程序员花了大量的时间与不完整的程序交互——有漏洞、类型不一致和绑定不一致的程序——使用程序编辑器和实时编程环境(它们将编辑和求值交织在一起)这样的工具。语义学家在正式描述(1)不完整程序的静态和动态语义方面做得相对较少;(2)程序员在编辑和检查未完成的程序时可以采取的行动;(3)编辑器服务的行为,它根据从正在编辑的不完整程序和系统过去遇到的程序中提取的语义信息,向程序员建议可能的编辑操作。本文作为一个研究项目的愿景陈述,旨在开发这些“缺失”的语义基础。我们的希望是这些贡献,它们将以一系列简单的形式演算的形式配备一个可处理的元理论,将指导各种当前和未来的交互式编程工具的设计,就像各种lambda演算指导现代语言设计一样。我们自己的研究将在Hazel的设计中应用这些原则,Hazel是一个为数据科学任务设计的实验性实时实验室笔记本编程环境。我们计划与编辑器共同设计Hazel语言,这样我们就可以探索诸如编辑时语义冲突解决机制和允许库提供者安装库特定编辑器服务的机制等概念。
{"title":"Toward Semantic Foundations for Program Editors","authors":"Cyrus Omar, Ian Voysey, Michael C Hilton, Joshua Sunshine, Claire Le Goues, Jonathan Aldrich, Matthew A. Hammer","doi":"10.4230/LIPIcs.SNAPL.2017.11","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.11","url":null,"abstract":"Programming language definitions assign formal meaning to complete programs. Programmers, however, spend a substantial amount of time interacting with incomplete programs - programs with holes, type inconsistencies and binding inconsistencies - using tools like program editors and live programming environments (which interleave editing and evaluation). Semanticists have done comparatively little to formally characterize (1) the static and dynamic semantics of incomplete programs; (2) the actions available to programmers as they edit and inspect incomplete programs; and (3) the behavior of editor services that suggest likely edit actions to the programmer based on semantic information extracted from the incomplete program being edited, and from programs that the system has encountered in the past. \u0000 \u0000This paper serves as a vision statement for a research program that seeks to develop these \"missing\" semantic foundations. Our hope is that these contributions, which will take the form of a series of simple formal calculi equipped with a tractable metatheory, will guide the design of a variety of current and future interactive programming tools, much as various lambda calculi have guided modern language designs. Our own research will apply these principles in the design of Hazel, an experimental live lab notebook programming environment designed for data science tasks. We plan to co-design the Hazel language with the editor so that we can explore concepts such as edit-time semantic conflict resolution mechanisms and mechanisms that allow library providers to install library-specific editor services.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2017-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124280223","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}
引用次数: 25
Search for Program Structure 搜索程序结构
Pub Date : 2017-01-06 DOI: 10.4230/LIPIcs.SNAPL.2017.15
Gabriel Scherer
The community of programming language research loves the Curry-Howard correspondence between proofs and programs. Cut-elimination as computation, theorems for free, call/cc as excluded middle, dependently typed languages as proof assistants, etc. Yet we have, for all these years, missed an obvious observation: “the structure of programs corresponds to the structure of proof search”. For pure programs and intuitionistic logic, more is known about the latter than the former. We think we know what programs are, but logicians
编程语言研究社区喜欢证明和程序之间的Curry-Howard对应关系。Cut-elimination作为计算,定理是免费的,call/cc作为排除中间,依赖类型语言作为证明助手等。然而,这么多年来,我们忽略了一个明显的观察:“程序的结构对应于证明搜索的结构”。对于纯程序和直觉逻辑,后者比前者了解得更多。我们以为我们知道程序是什么,但逻辑学家
{"title":"Search for Program Structure","authors":"Gabriel Scherer","doi":"10.4230/LIPIcs.SNAPL.2017.15","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2017.15","url":null,"abstract":"The community of programming language research loves the Curry-Howard correspondence between proofs and programs. Cut-elimination as computation, theorems for free, call/cc as excluded middle, dependently typed languages as proof assistants, etc. Yet we have, for all these years, missed an obvious observation: “the structure of programs corresponds to the structure of proof search”. For pure programs and intuitionistic logic, more is known about the latter than the former. We think we know what programs are, but logicians","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2017-01-06","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128786997","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
Draining the Swamp: Micro Virtual Machines as Solid Foundation for Language Development 排干沼泽:微虚拟机作为语言开发的坚实基础
Pub Date : 2015-05-03 DOI: 10.4230/LIPIcs.SNAPL.2015.321
Kunshan Wang, Yi Lin, S. Blackburn, Michael Norrish, Antony Lloyd Hosking
Many of today’s programming languages are broken. Poor performance, lack of features and hard-to-reason-about semantics can cost dearly in software maintenance and inecient execution. The problem is only getting worse with programming languages proliferating and hardware becoming more complicated. An important reason for this brokenness is that much of language design is implementation-driven. The diculties in implementation and insucient understanding of concepts bake bad designs into the language itself. Concurrency, architectural details and garbage collection are three fundamental concerns that contribute much to the complexities of implementing managed languages. We propose the micro virtual machine, a thin abstraction designed specifically to relieve implementers of managed languages of the most fundamental implementation challenges that currently impede good design. The micro virtual machine targets abstractions over memory (garbage collection), architecture (compiler backend), and concurrency. We motivate the micro virtual machine and give an account of the design and initial experience of a concrete instance, which we call Mu, built over a two year period. Our goal is to remove an important barrier to performant and semantically sound managed language design and implementation.
今天的许多编程语言都是坏的。性能差、缺乏特性和难以理解的语义会在软件维护和执行效率方面付出高昂的代价。随着编程语言的激增和硬件变得越来越复杂,这个问题只会变得更糟。造成这种差异的一个重要原因是,大部分语言设计都是由实现驱动的。实现上的困难和对概念的无知理解将糟糕的设计带入了语言本身。并发性、架构细节和垃圾收集是导致托管语言实现复杂性的三个基本关注点。我们提出了微虚拟机,这是一种薄抽象,专门用于减轻托管语言实现者目前阻碍良好设计的最基本实现挑战。微虚拟机的目标是对内存(垃圾收集)、体系结构(编译器后端)和并发性的抽象。我们对微虚拟机进行了激励,并给出了一个具体实例的设计和初始体验,我们称之为Mu,历时两年建成。我们的目标是消除性能和语义良好的托管语言设计和实现的一个重要障碍。
{"title":"Draining the Swamp: Micro Virtual Machines as Solid Foundation for Language Development","authors":"Kunshan Wang, Yi Lin, S. Blackburn, Michael Norrish, Antony Lloyd Hosking","doi":"10.4230/LIPIcs.SNAPL.2015.321","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2015.321","url":null,"abstract":"Many of today’s programming languages are broken. Poor performance, lack of features and hard-to-reason-about semantics can cost dearly in software maintenance and inecient execution. The problem is only getting worse with programming languages proliferating and hardware becoming more complicated. An important reason for this brokenness is that much of language design is implementation-driven. The diculties in implementation and insucient understanding of concepts bake bad designs into the language itself. Concurrency, architectural details and garbage collection are three fundamental concerns that contribute much to the complexities of implementing managed languages. We propose the micro virtual machine, a thin abstraction designed specifically to relieve implementers of managed languages of the most fundamental implementation challenges that currently impede good design. The micro virtual machine targets abstractions over memory (garbage collection), architecture (compiler backend), and concurrency. We motivate the micro virtual machine and give an account of the design and initial experience of a concrete instance, which we call Mu, built over a two year period. Our goal is to remove an important barrier to performant and semantically sound managed language design and implementation.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2015-05-03","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124207253","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}
引用次数: 14
The Need for Language Support for Fault-Tolerant Distributed Systems 容错分布式系统对语言支持的需求
Pub Date : 2015-05-03 DOI: 10.4230/LIPIcs.SNAPL.2015.90
Cezara Dragoi, T. Henzinger, D. Zufferey
Fault-tolerant distributed algorithms play an important role in many critical/high-availability applications. These algorithms are notoriously difficult to implement correctly, due to asynchronous communication and the occurrence of faults, such as the network dropping messages or computers crashing. Nonetheless there is surprisingly little language and verification support to build distributed systems based on fault-tolerant algorithms. In this paper, we present some of the challenges that a designer has to overcome to implement a fault-tolerant distributed system. Then we review different models that have been proposed to reason about distributed algorithms and sketch how such a model can form the basis for a domain-specific programming language. Adopting a high-level programming model can simplify the programmer's life and make the code amenable to automated verification, while still compiling to efficiently executable code. We conclude by summarizing the current status of an ongoing language design and implementation project that is based on this idea.
容错分布式算法在许多关键/高可用性应用程序中发挥着重要作用。众所周知,由于异步通信和故障的发生,例如网络丢失消息或计算机崩溃,这些算法很难正确实现。然而,基于容错算法构建分布式系统的语言和验证支持却少得惊人。在本文中,我们提出了设计人员在实现容错分布式系统时必须克服的一些挑战。然后,我们回顾了已经提出的用于推断分布式算法的不同模型,并概述了这种模型如何构成特定领域编程语言的基础。采用高级编程模型可以简化程序员的工作,使代码易于自动验证,同时仍然可以编译成有效的可执行代码。最后,我们总结了基于这一思想的正在进行的语言设计和实现项目的现状。
{"title":"The Need for Language Support for Fault-Tolerant Distributed Systems","authors":"Cezara Dragoi, T. Henzinger, D. Zufferey","doi":"10.4230/LIPIcs.SNAPL.2015.90","DOIUrl":"https://doi.org/10.4230/LIPIcs.SNAPL.2015.90","url":null,"abstract":"Fault-tolerant distributed algorithms play an important role in many critical/high-availability applications. These algorithms are notoriously difficult to implement correctly, due to asynchronous communication and the occurrence of faults, such as the network dropping messages or computers crashing. Nonetheless there is surprisingly little language and verification support to build distributed systems based on fault-tolerant algorithms. In this paper, we present some of the challenges that a designer has to overcome to implement a fault-tolerant distributed system. Then we review different models that have been proposed to reason about distributed algorithms and sketch how such a model can form the basis for a domain-specific programming language. Adopting a high-level programming model can simplify the programmer's life and make the code amenable to automated verification, while still compiling to efficiently executable code. We conclude by summarizing the current status of an ongoing language design and implementation project that is based on this idea.","PeriodicalId":231548,"journal":{"name":"Summit on Advances in Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2015-05-03","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133881933","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}
引用次数: 10
期刊
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