首页 > 最新文献

Proceedings of the 9th International Symposium on Haskell最新文献

英文 中文
The Key monad: type-safe unconstrained dynamic typing Key单子:类型安全的无约束动态类型
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976008
A. V. D. Ploeg, Koen Claessen, Pablo Buiras
We present a small extension to Haskell called the Key monad. With the Key monad, unique keys of different types can be created and can be tested for equality. When two keys are equal, we also obtain a concrete proof that their types are equal. This gives us a form of dynamic typing, without the need for Typeable constraints. We show that our extension allows us to safely do things we could not otherwise do: it allows us to implement the ST monad (inefficiently), to implement an embedded form of arrow notation, and to translate parametric HOAS to typed de Bruijn indices, among others. Although strongly related to the ST monad, the Key monad is simpler and might be easier to prove safe. We do not provide such a proof of the safety of the Key monad, but we note that, surprisingly, a full proof of the safety of the ST monad also remains elusive to this day. Hence, another reason for studying the Key monad is that a safety proof for it might be a stepping stone towards a safety proof of the ST monad.
我们为Haskell提供了一个名为Key monad的小扩展。使用Key单子,可以创建不同类型的唯一键,并且可以测试其是否相等。当两个键相等时,我们也得到了它们类型相等的具体证明。这为我们提供了一种不需要Typeable约束的动态类型。我们展示了我们的扩展允许我们安全地做一些我们不能做的事情:它允许我们实现ST单子(低效率),实现嵌入形式的箭头符号,以及将参数HOAS转换为类型的de Bruijn索引,等等。虽然与ST单子密切相关,但Key单子更简单,可能更容易证明是安全的。我们没有提供Key monad安全性的证明,但我们注意到,令人惊讶的是,ST monad安全性的完整证明至今仍难以捉摸。因此,研究Key单子的另一个原因是,它的安全性证明可能是通向ST单子安全性证明的垫脚石。
{"title":"The Key monad: type-safe unconstrained dynamic typing","authors":"A. V. D. Ploeg, Koen Claessen, Pablo Buiras","doi":"10.1145/2976002.2976008","DOIUrl":"https://doi.org/10.1145/2976002.2976008","url":null,"abstract":"We present a small extension to Haskell called the Key monad. With the Key monad, unique keys of different types can be created and can be tested for equality. When two keys are equal, we also obtain a concrete proof that their types are equal. This gives us a form of dynamic typing, without the need for Typeable constraints. We show that our extension allows us to safely do things we could not otherwise do: it allows us to implement the ST monad (inefficiently), to implement an embedded form of arrow notation, and to translate parametric HOAS to typed de Bruijn indices, among others. Although strongly related to the ST monad, the Key monad is simpler and might be easier to prove safe. We do not provide such a proof of the safety of the Key monad, but we note that, surprisingly, a full proof of the safety of the ST monad also remains elusive to this day. Hence, another reason for studying the Key monad is that a safety proof for it might be a stepping stone towards a safety proof of the ST monad.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"74217356","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}
引用次数: 1
How to twist pointers without breaking them 如何在不破坏指针的情况下扭转指针
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976004
Satvik Chauhan, Piyush P. Kurur, Brent A. Yorgey
Using the theory of monoids and monoid actions, we give a unified framework that handles three common pointer manipulation tasks, namely, data serialisation, deserialisation, and memory allocation. Our main theoretical contribution is the formulation of the notion of a twisted functor, a generalisation of the semi-direct product construction for monoids. We show that semi-direct products and twisted functors are particularly well suited as an abstraction for many pointer manipulation tasks. We describe the implementation of these abstractions in the context of a cryptographic library for Haskell. Twisted functors allow us to abstract all pointer arithmetic and size calculations into a few lines of code, significantly reducing the opportunities for buffer overflows.
利用单类理论和单类动作,我们给出了一个统一的框架来处理三种常见的指针操作任务,即数据序列化、反序列化和内存分配。我们的主要理论贡献是提出了扭曲函子的概念,这是对单群的半直接积构造的推广。我们展示了半直接积和扭曲函子特别适合作为许多指针操作任务的抽象。我们在Haskell的加密库上下文中描述了这些抽象的实现。扭曲函数允许我们将所有指针算术和大小计算抽象到几行代码中,从而大大减少了缓冲区溢出的可能性。
{"title":"How to twist pointers without breaking them","authors":"Satvik Chauhan, Piyush P. Kurur, Brent A. Yorgey","doi":"10.1145/2976002.2976004","DOIUrl":"https://doi.org/10.1145/2976002.2976004","url":null,"abstract":"Using the theory of monoids and monoid actions, we give a unified framework that handles three common pointer manipulation tasks, namely, data serialisation, deserialisation, and memory allocation. Our main theoretical contribution is the formulation of the notion of a twisted functor, a generalisation of the semi-direct product construction for monoids. We show that semi-direct products and twisted functors are particularly well suited as an abstraction for many pointer manipulation tasks. We describe the implementation of these abstractions in the context of a cryptographic library for Haskell. Twisted functors allow us to abstract all pointer arithmetic and size calculations into a few lines of code, significantly reducing the opportunities for buffer overflows.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"77169663","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
Lazy graph processing in Haskell Haskell中的延迟图形处理
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976014
Philip Dexter, Yu David Liu, K. Chiu
This paper presents a Haskell library for graph processing: DeltaGraph. One unique feature of this system is that intentions to perform graph updates can be memoized in-graph in a decentralized fashion, and the propagation of these intentions within the graph can be decoupled from the realization of the updates. As a result, DeltaGraph can respond to updates in constant time and work elegantly with parallelism support. We build a Twitter-like application on top of DeltaGraph to demonstrate its effectiveness and explore parallelism and opportunistic computing optimizations.
本文介绍了一个用于图形处理的Haskell库:deltaggraph。该系统的一个独特之处在于,执行图更新的意图可以以去中心化的方式存储在图中,并且这些意图在图中的传播可以与更新的实现解耦。因此,deltaggraph可以在固定时间内响应更新,并在并行性支持下优雅地工作。我们在deltaggraph之上构建了一个类似twitter的应用程序,以展示其有效性,并探索并行性和机会计算优化。
{"title":"Lazy graph processing in Haskell","authors":"Philip Dexter, Yu David Liu, K. Chiu","doi":"10.1145/2976002.2976014","DOIUrl":"https://doi.org/10.1145/2976002.2976014","url":null,"abstract":"This paper presents a Haskell library for graph processing: DeltaGraph. One unique feature of this system is that intentions to perform graph updates can be memoized in-graph in a decentralized fashion, and the propagation of these intentions within the graph can be decoupled from the realization of the updates. As a result, DeltaGraph can respond to updates in constant time and work elegantly with parallelism support. We build a Twitter-like application on top of DeltaGraph to demonstrate its effectiveness and explore parallelism and opportunistic computing optimizations.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"89061940","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}
引用次数: 7
Revisiting software transactional memory in Haskell 回顾Haskell中的软件事务性内存
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976020
Matthew Le, Ryan Yates, M. Fluet
Software Transactional Memory (STM) has become very popular in Haskell. Currently, there are nearly 500 packages on Haskell’s package archive that directly use STM. Despite the widespread use in real world applications, Haskell’s STM implementation has seen very few updates since its introduction in 2005. In this work, we describe our efforts to redesign the STM implementation in the Glasgow Haskell Compiler (GHC), based on a TL2-like implementation that is able to support both orElse and retry without the use of traditional nested transactions. We argue that our implementation is simpler than the current GHC implementation while supporting opacity. We also demonstrate that our implementation performs better than the current GHC implementation on a number of benchmarks by multiple orders of magnitude for long-running transactions. In an effort to measure the performance of orElse and retry, we present an STM-based work stealing scheduler. With orElse and retry, we are able to elegantly implement the scheduler in just a few lines of code. We have modified the Par Monad, a real-world Haskell package that provides deterministic parallelism, to use our STM-based work stealing scheduler and show that it is not only simpler but is able to perform as well as the current scheduler.
软件事务性内存(STM)在Haskell中变得非常流行。目前,Haskell的包归档中有近500个包直接使用了STM。尽管在现实世界的应用程序中广泛使用,Haskell的STM实现自2005年引入以来很少更新。在这项工作中,我们描述了我们在格拉斯哥Haskell编译器(GHC)中重新设计STM实现的努力,该实现基于类似tl2的实现,能够在不使用传统嵌套事务的情况下支持orElse和retry。我们认为我们的实现比当前的GHC实现更简单,同时支持不透明性。我们还证明,对于长时间运行的事务,我们的实现在许多基准测试中比当前的GHC实现表现好几个数量级。为了测量orElse和retry的性能,我们提出了一个基于stm的工作窃取调度器。使用orElse和retry,我们可以在几行代码中优雅地实现调度器。我们修改了Par Monad(一个提供确定性并行性的真实的Haskell包),以使用我们基于stm的工作窃取调度程序,并表明它不仅更简单,而且能够像当前的调度程序一样执行得很好。
{"title":"Revisiting software transactional memory in Haskell","authors":"Matthew Le, Ryan Yates, M. Fluet","doi":"10.1145/2976002.2976020","DOIUrl":"https://doi.org/10.1145/2976002.2976020","url":null,"abstract":"Software Transactional Memory (STM) has become very popular in Haskell. Currently, there are nearly 500 packages on Haskell’s package archive that directly use STM. Despite the widespread use in real world applications, Haskell’s STM implementation has seen very few updates since its introduction in 2005. In this work, we describe our efforts to redesign the STM implementation in the Glasgow Haskell Compiler (GHC), based on a TL2-like implementation that is able to support both orElse and retry without the use of traditional nested transactions. We argue that our implementation is simpler than the current GHC implementation while supporting opacity. We also demonstrate that our implementation performs better than the current GHC implementation on a number of benchmarks by multiple orders of magnitude for long-running transactions. In an effort to measure the performance of orElse and retry, we present an STM-based work stealing scheduler. With orElse and retry, we are able to elegantly implement the scheduler in just a few lines of code. We have modified the Par Monad, a real-world Haskell package that provides deterministic parallelism, to use our STM-based work stealing scheduler and show that it is not only simpler but is able to perform as well as the current scheduler.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"86563017","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
Experience report: types for a relational algebra library 经验报告:关系代数库的类型
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976016
L. Augustsson, Martin Ågren
As part of our software toolkit at a major financial institution we have a library for relational algebra. This library is written in C++ and the type checking of the operations on the relations is very dynamic; all relations have the same static type. Of course, relational algebra operations have stringent type constraints, and since we believe in static typing, we would prefer these to be checked at compile time. We have managed to get full static type checking of the relational code, using some modern extensions to the Haskell type system, such as closed type families, type level strings, user-defined kinds, and custom type errors. The static type checking incurs no runtime overhead compared to the dynamically checked library. Some effort has gone into making the use of the typed library similar to the dynamically typed version. We have also tried to produce good error messages when something is wrong.
作为我们在一家大型金融机构的软件工具包的一部分,我们有一个关系代数库。这个库是用c++编写的,对关系操作的类型检查是非常动态的;所有关系都具有相同的静态类型。当然,关系代数操作有严格的类型约束,因为我们相信静态类型,所以我们希望在编译时检查这些约束。通过使用Haskell类型系统的一些现代扩展,例如封闭类型族、类型级别字符串、用户定义类型和自定义类型错误,我们已经成功地对关系代码进行了完整的静态类型检查。与动态检查的库相比,静态类型检查不会产生运行时开销。在使类型化库的使用类似于动态类型化版本方面已经做了一些努力。我们还尝试在出现错误时产生良好的错误消息。
{"title":"Experience report: types for a relational algebra library","authors":"L. Augustsson, Martin Ågren","doi":"10.1145/2976002.2976016","DOIUrl":"https://doi.org/10.1145/2976002.2976016","url":null,"abstract":"As part of our software toolkit at a major financial institution we have a library for relational algebra. This library is written in C++ and the type checking of the operations on the relations is very dynamic; all relations have the same static type. Of course, relational algebra operations have stringent type constraints, and since we believe in static typing, we would prefer these to be checked at compile time. We have managed to get full static type checking of the relational code, using some modern extensions to the Haskell type system, such as closed type families, type level strings, user-defined kinds, and custom type errors. The static type checking incurs no runtime overhead compared to the dynamically checked library. Some effort has gone into making the use of the typed library similar to the dynamically typed version. We have also tried to produce good error messages when something is wrong.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"88479573","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 6
Supermonads: one notion to bind them all 超级单子:一个概念来绑定它们
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976012
J. Bracker, H. Nilsson
Several popular generalizations of monads have been implemented in Haskell. Unfortunately, because the shape of the associated type constructors do not match the standard Haskell monad interface, each such implementation provides its own type class and versions of associated library functions. Furthermore, simultaneous use of different monadic notions can be cumbersome as it in general is necessary to be explicit about which notion is used where. In this paper we introduce supermonads: an encoding of monadic notions that captures several different generalizations along with a version of the standard library of monadic functions that work uniformly with all of them. As standard Haskell type inference does not work for supermonads due to their generality, our supermonad implementation is accompanied with a language extension, in the form of a plugin for the Glasgow Haskell Compiler (GHC), that allows type inference for supermonads, obviating the need for manual annotations.
Haskell中已经实现了几个流行的monad泛化。不幸的是,由于关联类型构造函数的形状与标准Haskell单接口不匹配,每个这样的实现都提供了自己的类型类和关联库函数的版本。此外,同时使用不同的一元概念可能会很麻烦,因为通常需要明确哪个概念在哪里使用。在本文中,我们介绍了超单元:一种单元概念的编码,它捕获了几种不同的泛化,以及与所有这些统一工作的单元函数标准库的一个版本。由于标准的Haskell类型推断由于其通用性而不适用于supermonad,我们的supermonad实现附带了一个语言扩展,以格拉斯哥Haskell编译器(GHC)插件的形式,它允许对supermonad进行类型推断,从而避免了手动注释的需要。
{"title":"Supermonads: one notion to bind them all","authors":"J. Bracker, H. Nilsson","doi":"10.1145/2976002.2976012","DOIUrl":"https://doi.org/10.1145/2976002.2976012","url":null,"abstract":"Several popular generalizations of monads have been implemented in Haskell. Unfortunately, because the shape of the associated type constructors do not match the standard Haskell monad interface, each such implementation provides its own type class and versions of associated library functions. Furthermore, simultaneous use of different monadic notions can be cumbersome as it in general is necessary to be explicit about which notion is used where. In this paper we introduce supermonads: an encoding of monadic notions that captures several different generalizations along with a version of the standard library of monadic functions that work uniformly with all of them. As standard Haskell type inference does not work for supermonads due to their generality, our supermonad implementation is accompanied with a language extension, in the form of a plugin for the Glasgow Haskell Compiler (GHC), that allows type inference for supermonads, obviating the need for manual annotations.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"86928356","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 6
High-performance client-side web applications through Haskell EDSLs 通过Haskell EDSLs实现高性能客户端web应用
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976015
A. Ekblad
We present Aplite, a domain-specific language embedded in Haskell for implementing performance-critical functions in client-side web applications. In Aplite, we apply partial evaluation, multi-stage programming and techniques adapted from machine code-targeting, high-performance EDSLs to the domain of web applications. We use Aplite to implement, among other benchmarks, procedural animation using Perlin noise, symmetrical encryption and K-means clustering, showing Aplite to be consistently faster than equivalent hand-written JavaScript -- up to an order of magnitude for some benchmarks. We also demonstrate how Aplite's multi-staged nature can be used to automatically tune programs to the environment in which they are running, as well as to inputs representative of the programs' intended workload. High-performance computation in the web browser is an attractive goal for many reasons: interactive simulations and games, cryptographic applications and reducing web companies' electricity bills by outsourcing expensive computations to users' web browsers. Similarly, functional programming in the browser is attractive due to its promises of simpler, shorter, safer programs. In this paper, we propose a way to combine the two.
我们介绍了applite,一种嵌入在Haskell中的特定领域语言,用于在客户端web应用程序中实现性能关键功能。在applite中,我们将部分评估、多阶段编程和机器代码定位、高性能edsl等技术应用于web应用领域。在其他基准测试中,我们使用Aplite来实现使用柏林噪声、对称加密和K-means聚类的过程动画,这表明Aplite始终比同等的手写JavaScript更快——在某些基准测试中达到一个数量级。我们还演示了如何使用applite的多阶段特性自动将程序调优到它们运行的环境,以及程序预期工作负载的输入代表。web浏览器中的高性能计算是一个有吸引力的目标,原因有很多:交互式模拟和游戏、加密应用程序,以及通过将昂贵的计算外包给用户的web浏览器来减少网络公司的电费。同样,浏览器中的函数式编程也很有吸引力,因为它承诺提供更简单、更短、更安全的程序。在本文中,我们提出了一种将两者结合起来的方法。
{"title":"High-performance client-side web applications through Haskell EDSLs","authors":"A. Ekblad","doi":"10.1145/2976002.2976015","DOIUrl":"https://doi.org/10.1145/2976002.2976015","url":null,"abstract":"We present Aplite, a domain-specific language embedded in Haskell for implementing performance-critical functions in client-side web applications. In Aplite, we apply partial evaluation, multi-stage programming and techniques adapted from machine code-targeting, high-performance EDSLs to the domain of web applications. We use Aplite to implement, among other benchmarks, procedural animation using Perlin noise, symmetrical encryption and K-means clustering, showing Aplite to be consistently faster than equivalent hand-written JavaScript -- up to an order of magnitude for some benchmarks. We also demonstrate how Aplite's multi-staged nature can be used to automatically tune programs to the environment in which they are running, as well as to inputs representative of the programs' intended workload. High-performance computation in the web browser is an attractive goal for many reasons: interactive simulations and games, cryptographic applications and reducing web companies' electricity bills by outsourcing expensive computations to users' web browsers. Similarly, functional programming in the browser is attractive due to its promises of simpler, shorter, safer programs. In this paper, we propose a way to combine the two.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"82922521","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
Experience report: developing high performance HTTP/2 server in Haskell 经验报告:用Haskell开发高性能HTTP/2服务器
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976006
Kazuhiko Yamamoto
While the speed of the Internet has been increasing, HTTP/1.1 has been plagued by head-of-line blocking, low concurrency and redundant headers. To solve these problems, HTTP/2 was standardized. This paper summarizes our experience implementing HTTP/2 in Haskell. We found several techniques to improve the performance of the header compression and identified a suitable data structure for HTTP/2 priority. Also, we showed that Haskell lightweight threads are useful for HTTP/2 where the common tactics of one lightweight thread per connection cannot be used. The HTTP/2 implementation of Warp, the popular HTTP server library in Haskell, ultimately provides better throughput than its HTTP/1.1 counterpart.
虽然互联网的速度一直在提高,但HTTP/1.1一直受到行首阻塞、低并发性和冗余头的困扰。为了解决这些问题,HTTP/2被标准化了。本文总结了我们在Haskell中实现HTTP/2的经验。我们找到了几种提高报头压缩性能的技术,并确定了适合HTTP/2优先级的数据结构。此外,我们还展示了Haskell轻量级线程对于HTTP/2非常有用,在这种情况下,不能使用每个连接一个轻量级线程的常见策略。HTTP/2实现的Warp (Haskell中流行的HTTP服务器库)最终提供了比HTTP/1.1更好的吞吐量。
{"title":"Experience report: developing high performance HTTP/2 server in Haskell","authors":"Kazuhiko Yamamoto","doi":"10.1145/2976002.2976006","DOIUrl":"https://doi.org/10.1145/2976002.2976006","url":null,"abstract":"While the speed of the Internet has been increasing, HTTP/1.1 has been plagued by head-of-line blocking, low concurrency and redundant headers. To solve these problems, HTTP/2 was standardized. This paper summarizes our experience implementing HTTP/2 in Haskell. We found several techniques to improve the performance of the header compression and identified a suitable data structure for HTTP/2 priority. Also, we showed that Haskell lightweight threads are useful for HTTP/2 where the common tactics of one lightweight thread per connection cannot be used. The HTTP/2 implementation of Warp, the popular HTTP server library in Haskell, ultimately provides better throughput than its HTTP/1.1 counterpart.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"74589013","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
QuickFuzz: an automatic random fuzzer for common file formats QuickFuzz:通用文件格式的自动随机模糊器
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976017
Gustavo Grieco, Martín Ceresa, Pablo Buiras
Fuzzing is a technique that involves testing programs using invalid or erroneous inputs. Most fuzzers require a set of valid inputs as a starting point, in which mutations are then introduced. QuickFuzz is a fuzzer that leverages QuickCheck-style random test-case generationto automatically test programs that manipulate common file formats by fuzzing. We rely on existing Haskell implementations of file-format-handling libraries found on Hackage, the community-driven Haskell code repository. We have tried QuickFuzz in the wild and found that the approach is effective in discovering vulnerabilities in real-world implementations of browsers, image processing utilities and file compressors among others. In addition, we introduce a mechanism to automatically derive random generators for the types representing these formats. QuickFuzz handles most well-known image and media formats, and can be used to test programs and libraries written in any language.
模糊测试是一种使用无效或错误输入测试程序的技术。大多数模糊器需要一组有效的输入作为起点,然后在其中引入突变。QuickFuzz是一个模糊测试器,它利用quickcheck风格的随机测试用例生成,通过模糊测试来自动测试操作通用文件格式的程序。我们依赖于在Hackage(社区驱动的Haskell代码存储库)上找到的现有的Haskell文件格式处理库的实现。我们已经在野外尝试了QuickFuzz,并发现该方法在发现浏览器、图像处理实用程序和文件压缩器等实际实现中的漏洞方面非常有效。此外,我们还引入了一种机制,为表示这些格式的类型自动派生随机生成器。QuickFuzz处理大多数知名的图像和媒体格式,并可用于测试用任何语言编写的程序和库。
{"title":"QuickFuzz: an automatic random fuzzer for common file formats","authors":"Gustavo Grieco, Martín Ceresa, Pablo Buiras","doi":"10.1145/2976002.2976017","DOIUrl":"https://doi.org/10.1145/2976002.2976017","url":null,"abstract":"Fuzzing is a technique that involves testing programs using invalid or erroneous inputs. Most fuzzers require a set of valid inputs as a starting point, in which mutations are then introduced. QuickFuzz is a fuzzer that leverages QuickCheck-style random test-case generationto automatically test programs that manipulate common file formats by fuzzing. We rely on existing Haskell implementations of file-format-handling libraries found on Hackage, the community-driven Haskell code repository. We have tried QuickFuzz in the wild and found that the approach is effective in discovering vulnerabilities in real-world implementations of browsers, image processing utilities and file compressors among others. In addition, we introduce a mechanism to automatically derive random generators for the types representing these formats. QuickFuzz handles most well-known image and media formats, and can be used to test programs and libraries written in any language.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"77386469","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}
引用次数: 46
Embedding session types in Haskell 在Haskell中嵌入会话类型
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976018
S. Lindley, J. Garrett Morris
We present a novel embedding of session-typed concurrency in Haskell. We extend an existing HOAS embedding of linear λ-calculus with a set of core session-typed primitives, using indexed type families to express the constraints of the session typing discipline. We give two interpretations of our embedding, one in terms of GHC’s built-in concurrency and another in terms of purely functional continuations. Our safety guarantees, including deadlock freedom, are assured statically and introduce no additional runtime overhead.
我们提出了一种在Haskell中嵌入会话类型并发的新方法。我们用一组核心会话类型原语扩展了现有的线性λ-微积分的HOAS嵌入,使用索引类型族来表示会话类型规则的约束。我们对我们的嵌入给出了两种解释,一种是基于GHC的内置并发性,另一种是基于纯粹的功能延续。我们的安全保证(包括死锁自由)是静态保证的,不会带来额外的运行时开销。
{"title":"Embedding session types in Haskell","authors":"S. Lindley, J. Garrett Morris","doi":"10.1145/2976002.2976018","DOIUrl":"https://doi.org/10.1145/2976002.2976018","url":null,"abstract":"We present a novel embedding of session-typed concurrency in Haskell. We extend an existing HOAS embedding of linear λ-calculus with a set of core session-typed primitives, using indexed type families to express the constraints of the session typing discipline. We give two interpretations of our embedding, one in terms of GHC’s built-in concurrency and another in terms of purely functional continuations. Our safety guarantees, including deadlock freedom, are assured statically and introduce no additional runtime overhead.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"77202894","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}
引用次数: 48
期刊
Proceedings of the 9th International Symposium on Haskell
全部 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