首页 > 最新文献

Proceedings of the 21st Brazilian Symposium on Programming Languages最新文献

英文 中文
Transparent Replication Using Metaprogramming in Cyan 在青色中使用元编程的透明复制
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125375
Fellipe A. Ugliara, G. M. D. Vieira, J. Guimarães
Replication can be used to increase the availability of a service by creating many operational copies of its data called replicas. Active replication is a form of replication that has strong consistency semantics, easier to reason about and program. However, creating replicated services using active replication still demands from the programmer the knowledge of subtleties of the replication mechanism. In this paper we show how to use the metaprogramming infrastructure of the Cyan language to shield the application programmer from these details, allowing easier creation of fault-tolerant replicated applications through simple annotations.
复制可用于通过创建其数据的许多可操作副本(称为副本)来提高服务的可用性。主动复制是一种具有强一致性语义的复制形式,更容易推理和编程。但是,使用活动复制创建复制服务仍然要求程序员了解复制机制的细微之处。在本文中,我们将展示如何使用Cyan语言的元编程基础结构来保护应用程序程序员不受这些细节的影响,从而通过简单的注释更容易地创建容错复制应用程序。
{"title":"Transparent Replication Using Metaprogramming in Cyan","authors":"Fellipe A. Ugliara, G. M. D. Vieira, J. Guimarães","doi":"10.1145/3125374.3125375","DOIUrl":"https://doi.org/10.1145/3125374.3125375","url":null,"abstract":"Replication can be used to increase the availability of a service by creating many operational copies of its data called replicas. Active replication is a form of replication that has strong consistency semantics, easier to reason about and program. However, creating replicated services using active replication still demands from the programmer the knowledge of subtleties of the replication mechanism. In this paper we show how to use the metaprogramming infrastructure of the Cyan language to shield the application programmer from these details, allowing easier creation of fault-tolerant replicated applications through simple annotations.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"138 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123839199","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
Demand-driven less-than analysis 需求驱动的小于分析
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125379
Junio Cezar R. da Silva, Fernando Magno Quintão Pereira
A less-than analysis is a technique used by compilers to build a partial ordering between the integer variables in a program. Recently, researchers have shown how to use less-than information to improve the precision of alias analyses. The literature describes two techniques to build less-than relations. Both are asymptotically equivalent to computing a transitive closure in a graph. In this paper, we depart from this approach, and introduce an algorithm that builds less-than relations on demand. We claim that such algorithm is more adequate than the current state-of-the-art approaches, as it performs only the necessary work to satisfy the needs of its clients, i.e., alias analyses and optimizations that require less-than information. To validate our idea, we have implemented it onto the LLVM compilation infrastructure. Depending on the client analysis, our implementation may lead to runtime savings of up to 68% on large benchmarks, when compared to the more traditional approach based on the construction of the transitive closure.
小于分析是编译器用来在程序中的整数变量之间建立偏排序的一种技术。最近,研究人员展示了如何使用小于信息来提高别名分析的精度。文献描述了两种建立小于关系的技术。两者都渐近等价于计算图中的传递闭包。在本文中,我们脱离了这种方法,并引入了一种按需构建小于关系的算法。我们声称,这种算法比当前最先进的方法更充分,因为它只执行必要的工作,以满足其客户的需求,即别名分析和优化,需要较少的信息。为了验证我们的想法,我们在LLVM编译基础架构上实现了它。根据客户端分析,与基于传递闭包构造的更传统的方法相比,我们的实现可能会在大型基准测试上节省高达68%的运行时。
{"title":"Demand-driven less-than analysis","authors":"Junio Cezar R. da Silva, Fernando Magno Quintão Pereira","doi":"10.1145/3125374.3125379","DOIUrl":"https://doi.org/10.1145/3125374.3125379","url":null,"abstract":"A less-than analysis is a technique used by compilers to build a partial ordering between the integer variables in a program. Recently, researchers have shown how to use less-than information to improve the precision of alias analyses. The literature describes two techniques to build less-than relations. Both are asymptotically equivalent to computing a transitive closure in a graph. In this paper, we depart from this approach, and introduce an algorithm that builds less-than relations on demand. We claim that such algorithm is more adequate than the current state-of-the-art approaches, as it performs only the necessary work to satisfy the needs of its clients, i.e., alias analyses and optimizations that require less-than information. To validate our idea, we have implemented it onto the LLVM compilation infrastructure. Depending on the client analysis, our implementation may lead to runtime savings of up to 68% on large benchmarks, when compared to the more traditional approach based on the construction of the transitive closure.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"38 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114708485","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
Towards a Green Ranking for Programming Languages 迈向编程语言的绿色排名
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125382
Marco Couto, Rui Pereira, Francisco Ribeiro, Rui Rua, J. Saraiva
While in the past the primary goal to optimize software was the run time optimization, nowadays there is a growing awareness of the need to reduce energy consumption. Additionally, a growing number of developers wish to become more energy-aware when programming and feel a lack of tools and the knowledge to do so. In this paper we define a ranking of energy efficiency in programming languages. We consider a set of computing problems implemented in ten well-known programming languages, and monitored the energy consumed when executing each language. Our preliminary results show that although the fastest languages tend to be the lowest consuming ones, there are other interesting cases where slower languages are more energy efficient than faster ones.
虽然在过去优化软件的主要目标是运行时优化,但现在人们越来越意识到需要减少能耗。此外,越来越多的开发人员希望在编程时更有能源意识,但却感到缺乏这样做的工具和知识。在本文中,我们定义了编程语言的能效等级。我们考虑了一组用十种知名编程语言实现的计算问题,并监控了执行每种语言时所消耗的能量。我们的初步结果表明,尽管最快的语言往往是消耗最少的语言,但还有其他有趣的情况,即较慢的语言比较快的语言更节能。
{"title":"Towards a Green Ranking for Programming Languages","authors":"Marco Couto, Rui Pereira, Francisco Ribeiro, Rui Rua, J. Saraiva","doi":"10.1145/3125374.3125382","DOIUrl":"https://doi.org/10.1145/3125374.3125382","url":null,"abstract":"While in the past the primary goal to optimize software was the run time optimization, nowadays there is a growing awareness of the need to reduce energy consumption. Additionally, a growing number of developers wish to become more energy-aware when programming and feel a lack of tools and the knowledge to do so. In this paper we define a ranking of energy efficiency in programming languages. We consider a set of computing problems implemented in ten well-known programming languages, and monitored the energy consumed when executing each language. Our preliminary results show that although the fastest languages tend to be the lowest consuming ones, there are other interesting cases where slower languages are more energy efficient than faster ones.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"33 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128313481","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}
引用次数: 37
The Register Allocation and Instruction Scheduling Challenge 寄存器分配和指令调度的挑战
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125380
João F. N. Carvalho, B. L. Sousa, Marcus R. Araújo, Mariza Bigonha
Both register allocation and instruction scheduling are old and open issues in Computer Science, despite the efforts already made to address them separate or jointly. Register allocation may be seen as having two parts: allocation, which decides which values should be in registers, and assignment, which assigns a specific register to each value. Instruction scheduling aims at identifying and moving the instructions in the code, changing their original execution sequence, so that they may run in parallel. Register allocation and instruction scheduling attempt to minimize the execution time of the program, however, they are interdependent and are involved in a prioritization problem. This paper presents a Systematic Literature Review (SLR) related to this problem. From a total of 542 primary studies initially obtained on six databases, 25 studies closely related to this research theme were identified, 12 of them published between 2000 and October 2016. These studies were analyzed to answer the research questions proposed in this SLR, producing useful informations about this theme and about the approaches that, traditionally, have been used to solving this problem. An important finding of this research is the confirmation that this problem still has no definitive solution, and continues to be a relevant challenge for developers, since its solution is closely linked to the quality of the code generated by the compilers in general.
寄存器分配和指令调度都是计算机科学中古老而开放的问题,尽管人们已经努力单独或联合解决它们。寄存器分配可以被看作有两个部分:分配(allocation)和赋值(assignment),前者决定哪些值应该放在寄存器中,后者为每个值分配一个特定的寄存器。指令调度的目的是识别和移动代码中的指令,改变它们原来的执行顺序,使它们可以并行运行。寄存器分配和指令调度试图最小化程序的执行时间,然而,它们是相互依赖的,并且涉及优先级问题。本文就这一问题进行了系统的文献综述。从最初从六个数据库中获得的542项主要研究中,确定了25项与该研究主题密切相关的研究,其中12项发表于2000年至2016年10月之间。对这些研究进行了分析,以回答本单反中提出的研究问题,产生关于这一主题的有用信息,以及传统上用于解决这一问题的方法。这项研究的一个重要发现是确认了这个问题仍然没有明确的解决方案,并且仍然是开发人员面临的一个相关挑战,因为它的解决方案与编译器生成的代码质量密切相关。
{"title":"The Register Allocation and Instruction Scheduling Challenge","authors":"João F. N. Carvalho, B. L. Sousa, Marcus R. Araújo, Mariza Bigonha","doi":"10.1145/3125374.3125380","DOIUrl":"https://doi.org/10.1145/3125374.3125380","url":null,"abstract":"Both register allocation and instruction scheduling are old and open issues in Computer Science, despite the efforts already made to address them separate or jointly. Register allocation may be seen as having two parts: allocation, which decides which values should be in registers, and assignment, which assigns a specific register to each value. Instruction scheduling aims at identifying and moving the instructions in the code, changing their original execution sequence, so that they may run in parallel. Register allocation and instruction scheduling attempt to minimize the execution time of the program, however, they are interdependent and are involved in a prioritization problem. This paper presents a Systematic Literature Review (SLR) related to this problem. From a total of 542 primary studies initially obtained on six databases, 25 studies closely related to this research theme were identified, 12 of them published between 2000 and October 2016. These studies were analyzed to answer the research questions proposed in this SLR, producing useful informations about this theme and about the approaches that, traditionally, have been used to solving this problem. An important finding of this research is the confirmation that this problem still has no definitive solution, and continues to be a relevant challenge for developers, since its solution is closely linked to the quality of the code generated by the compilers in general.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"90 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130196631","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
The importance of being Extrinsic: Coherence and adequacy for a call-by-value language 外在性的重要性:价值召唤语言的一致性和充分性
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125378
Alejandro Gadea, Emmanuel Gunther, Miguel Pagano
In this paper we mechanize in Coq a typed, call-by-value language by specifying its operational semantics and giving intrinsic and extrinsic denotational semantics, both using domain theory. We also prove that the denotational semantics are equivalent; this is interesting because it leads to a direct proof of coherence for the intrinsic semantics. Finally, we prove the adequacy of the operational semantics with respect to the denotational semantics. As far as we know, this is the first mechanization of Reynolds' bracketing theorem and also the use of biorthogonality with extrinsic semantics instead of intrinsic semantics.
在本文中,我们使用领域理论,通过指定Coq的操作语义和给出内在和外在指称语义,机械化了Coq中的一种类型的、按值调用的语言。我们还证明了指称语义是等价的;这很有趣,因为它直接证明了内在语义的相干性。最后,我们证明了操作语义相对于指称语义的充分性。据我们所知,这是雷诺兹括号定理的第一次机械化,也是用外在语义代替内在语义的双正交性。
{"title":"The importance of being Extrinsic: Coherence and adequacy for a call-by-value language","authors":"Alejandro Gadea, Emmanuel Gunther, Miguel Pagano","doi":"10.1145/3125374.3125378","DOIUrl":"https://doi.org/10.1145/3125374.3125378","url":null,"abstract":"In this paper we mechanize in Coq a typed, call-by-value language by specifying its operational semantics and giving intrinsic and extrinsic denotational semantics, both using domain theory. We also prove that the denotational semantics are equivalent; this is interesting because it leads to a direct proof of coherence for the intrinsic semantics. Finally, we prove the adequacy of the operational semantics with respect to the denotational semantics. As far as we know, this is the first mechanization of Reynolds' bracketing theorem and also the use of biorthogonality with extrinsic semantics instead of intrinsic semantics.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"25 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126558193","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
Extensible records in Idris Idris中的可扩展记录
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125384
Gonzalo Waszczuk, Alberto Pardo, Marcos Viera
Extensible records are records structures that can be dynamically extended with new fields. In some languages, extensible records are supported as a primitive, in others they are implemented as a user library, each alternative with its benefits and drawbacks. This paper presents a library to strongly-typed extensible records in Idris, a functional programming language with dependent types. Like HList, a Haskell library for extensible records, we use heterogeneous lists to represent our records, but now exploiting the power of dependent types. We show the benefits of our solution by means of examples.
可扩展记录是可以用新字段动态扩展的记录结构。在一些语言中,可扩展记录作为原语支持,在其他语言中,它们作为用户库实现,每种选择都有其优点和缺点。在Idris(一种具有依赖类型的函数式程序设计语言)中给出了一个强类型可扩展记录库。与HList(一个用于扩展记录的Haskell库)类似,我们使用异构列表来表示记录,但现在利用了依赖类型的强大功能。我们通过实例说明了我们的解决方案的好处。
{"title":"Extensible records in Idris","authors":"Gonzalo Waszczuk, Alberto Pardo, Marcos Viera","doi":"10.1145/3125374.3125384","DOIUrl":"https://doi.org/10.1145/3125374.3125384","url":null,"abstract":"Extensible records are records structures that can be dynamically extended with new fields. In some languages, extensible records are supported as a primitive, in others they are implemented as a user library, each alternative with its benefits and drawbacks. This paper presents a library to strongly-typed extensible records in Idris, a functional programming language with dependent types. Like HList, a Haskell library for extensible records, we use heterogeneous lists to represent our records, but now exploiting the power of dependent types. We show the benefits of our solution by means of examples.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"27 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116641384","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
Aspect-Oriented Programming Reloaded 重新加载面向方面编程
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125383
Henrique Rebêlo, Gary T. Leavens
Many programs have crosscutting concerns for which neither procedural nor object-oriented programming adequately modularize, which has led to the idea of aspect-oriented programming (AOP). However, AOP has not found favor with the programming languages community due to a belief that AOP breaks classical modularity and modular reasoning. We propose a new AOP programming model that enables both crosscutting modularity and modular reasoning. This model is implemented by AspectJML, a general-purpose aspect-oriented extension to Java. It supports modular crosscutting concerns using key object-oriented mechanisms, such as hierarchical structure, and allows reasoning that scales to ever-larger programs.
许多程序都有横切关注点,而过程编程和面向对象编程都没有对其进行充分的模块化,这就产生了面向方面编程(AOP)的思想。然而,AOP并没有得到编程语言社区的青睐,因为人们认为AOP打破了经典的模块化和模块化推理。我们提出了一种新的AOP编程模型,它支持横切模块化和模块化推理。该模型由AspectJML实现,它是Java的一种通用的面向方面的扩展。它使用关键的面向对象机制(如层次结构)支持模块化横切关注点,并允许推理扩展到更大的程序。
{"title":"Aspect-Oriented Programming Reloaded","authors":"Henrique Rebêlo, Gary T. Leavens","doi":"10.1145/3125374.3125383","DOIUrl":"https://doi.org/10.1145/3125374.3125383","url":null,"abstract":"Many programs have crosscutting concerns for which neither procedural nor object-oriented programming adequately modularize, which has led to the idea of aspect-oriented programming (AOP). However, AOP has not found favor with the programming languages community due to a belief that AOP breaks classical modularity and modular reasoning. We propose a new AOP programming model that enables both crosscutting modularity and modular reasoning. This model is implemented by AspectJML, a general-purpose aspect-oriented extension to Java. It supports modular crosscutting concerns using key object-oriented mechanisms, such as hierarchical structure, and allows reasoning that scales to ever-larger programs.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"18 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133909839","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
Certified Bit-Coded Regular Expression Parsing 认证的位编码正则表达式解析
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125381
R. Ribeiro, A. R. D. Bois
We describe the formalization of a regular expression (RE) parsing algorithm that produces a bit representation of its parse tree in the dependently typed language Agda. The algorithm computes bit-codes using Brzozowski derivatives and we prove that produced codes are equivalent to parse trees ensuring soundness and completeness w.r.t an inductive RE semantics. We include the certified algorithm in a tool developed by us, named verigrep, for regular expression based search in the style of the well known GNU grep. Practical experiments conducted with this tool are reported.
我们描述了正则表达式(RE)解析算法的形式化,该算法在依赖类型语言Agda中生成其解析树的位表示。该算法使用Brzozowski导数计算位码,并证明生成的代码等效于解析树,确保了在归纳RE语义下的可靠性和完整性。我们在我们开发的名为verigrep的工具中包含了经过认证的算法,该工具用于基于正则表达式的搜索,其风格与众所周知的GNU grep类似。并报道了用该工具进行的实际实验。
{"title":"Certified Bit-Coded Regular Expression Parsing","authors":"R. Ribeiro, A. R. D. Bois","doi":"10.1145/3125374.3125381","DOIUrl":"https://doi.org/10.1145/3125374.3125381","url":null,"abstract":"We describe the formalization of a regular expression (RE) parsing algorithm that produces a bit representation of its parse tree in the dependently typed language Agda. The algorithm computes bit-codes using Brzozowski derivatives and we prove that produced codes are equivalent to parse trees ensuring soundness and completeness w.r.t an inductive RE semantics. We include the certified algorithm in a tool developed by us, named verigrep, for regular expression based search in the style of the well known GNU grep. Practical experiments conducted with this tool are reported.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"96 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114316932","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
A preliminary assessment of how monads are used in Haskell 对单子在Haskell中如何使用的初步评估
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125385
Ismael Figueroa
Monads are a denotational approach to embed and reason about notions of computation such as mutable state, I/O, exceptions, and many others. Even though monads are technically language-agnostic, they are mostly associated to the Haskell language. Indeed, one could argue that the use of monads is one of the defining characteristic of the Haskell language. In practical terms, monadic programming in Haskell relies on the standard mtl package library, which provides 8 notions of computation: identity, error, list, state, reader, writer, RWS, and continuations. Despite their widespread use, we are not aware of any empirical investigations regarding how developers use monads. In this paper we present preliminary results of an empirical study that quantitatively describe how monads are used in a sample of the Hackage repository. Our results show that around 25% of sampled modules depend on the mtl package, whereas only 1% depend on alternative, yet compatible implementations. Nevertheless, usage patterns for each specific monad remain similar both for mtl and alternatives. Regarding usage, the state monad is by far the most used one, although all of them are used. We also report on the distribution of packages that use mtl, regarding their category and stability level.
单子是一种嵌入和推理计算概念(如可变状态、I/O、异常和许多其他概念)的表示方法。尽管monad在技术上与语言无关,但它们大多与Haskell语言相关。的确,有人可能会说单子的使用是Haskell语言的一个决定性特征。实际上,Haskell中的一元编程依赖于标准的mtl包库,它提供了8种计算概念:标识、错误、列表、状态、读取器、写入器、RWS和延续。尽管它们被广泛使用,但我们不知道任何关于开发人员如何使用单子的实证调查。在本文中,我们提出了一项实证研究的初步结果,该研究定量地描述了如何在Hackage存储库的示例中使用monad。我们的结果表明,大约25%的抽样模块依赖于mtl包,而只有1%依赖于可选的但兼容的实现。尽管如此,每个特定单子的使用模式对于mtl和替代品都是相似的。关于用法,state单子是迄今为止使用最多的单子,尽管所有单子都被使用了。我们还报告了使用mtl的包的分布,包括它们的类别和稳定性级别。
{"title":"A preliminary assessment of how monads are used in Haskell","authors":"Ismael Figueroa","doi":"10.1145/3125374.3125385","DOIUrl":"https://doi.org/10.1145/3125374.3125385","url":null,"abstract":"Monads are a denotational approach to embed and reason about notions of computation such as mutable state, I/O, exceptions, and many others. Even though monads are technically language-agnostic, they are mostly associated to the Haskell language. Indeed, one could argue that the use of monads is one of the defining characteristic of the Haskell language. In practical terms, monadic programming in Haskell relies on the standard mtl package library, which provides 8 notions of computation: identity, error, list, state, reader, writer, RWS, and continuations. Despite their widespread use, we are not aware of any empirical investigations regarding how developers use monads. In this paper we present preliminary results of an empirical study that quantitatively describe how monads are used in a sample of the Hackage repository. Our results show that around 25% of sampled modules depend on the mtl package, whereas only 1% depend on alternative, yet compatible implementations. Nevertheless, usage patterns for each specific monad remain similar both for mtl and alternatives. Regarding usage, the state monad is by far the most used one, although all of them are used. We also report on the distribution of packages that use mtl, regarding their category and stability level.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"26 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122528815","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
A Domain-Specific Language for the Specification of Gesture-based Applications 用于基于手势的应用程序规范的领域特定语言
Pub Date : 2017-09-21 DOI: 10.1145/3125374.3125376
D. L. Viana, André L. M. Santos
Gesture-based systems are becoming an alternative to the development of intuitive applications for users because they enable them to interact more naturally. In general, such systems use tracking devices together with code to recognize the gestures, which often involves complex implementations. Furthermore, due to the nature of Software Development Kits provided by hardware vendors, the code becomes dependent on the tracking device. Hence, significant portions of the application need to be rewritten in order to run on another device. In this work, we propose the use of a Domain Specific Language to reduce the complexity of specification and recognition of gestures. We also provide a hardware abstraction layer that standardizes the capture of the sensorsfi raw data. This allows any gesture definition to become independent from the device. We conclude by presenting an experiment that evaluates the usage of the language to specify and recognize a large variety of gestures. The results show a reduction in the complexity for specifying and recognizing gestures.
基于手势的系统正在成为为用户开发直观应用程序的另一种选择,因为它们使用户能够更自然地交互。一般来说,这种系统使用跟踪设备和代码来识别手势,这通常涉及复杂的实现。此外,由于硬件供应商提供的软件开发工具包的性质,代码变得依赖于跟踪设备。因此,为了在其他设备上运行,应用程序的重要部分需要重写。在这项工作中,我们建议使用领域特定语言来降低手势规范和识别的复杂性。我们还提供了一个硬件抽象层,用于标准化传感器原始数据的捕获。这允许任何手势定义独立于设备。最后,我们提出了一个实验来评估语言的使用,以指定和识别各种各样的手势。结果表明,指定和识别手势的复杂性降低了。
{"title":"A Domain-Specific Language for the Specification of Gesture-based Applications","authors":"D. L. Viana, André L. M. Santos","doi":"10.1145/3125374.3125376","DOIUrl":"https://doi.org/10.1145/3125374.3125376","url":null,"abstract":"Gesture-based systems are becoming an alternative to the development of intuitive applications for users because they enable them to interact more naturally. In general, such systems use tracking devices together with code to recognize the gestures, which often involves complex implementations. Furthermore, due to the nature of Software Development Kits provided by hardware vendors, the code becomes dependent on the tracking device. Hence, significant portions of the application need to be rewritten in order to run on another device. In this work, we propose the use of a Domain Specific Language to reduce the complexity of specification and recognition of gestures. We also provide a hardware abstraction layer that standardizes the capture of the sensorsfi raw data. This allows any gesture definition to become independent from the device. We conclude by presenting an experiment that evaluates the usage of the language to specify and recognize a large variety of gestures. The results show a reduction in the complexity for specifying and recognizing gestures.","PeriodicalId":430395,"journal":{"name":"Proceedings of the 21st Brazilian Symposium on Programming Languages","volume":"33 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-09-21","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124450831","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
期刊
Proceedings of the 21st Brazilian Symposium on 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