首页 > 最新文献

Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture最新文献

英文 中文
Functional Shell and Reusable Components for Easy GUIs 用于简单gui的功能外壳和可重用组件
D. Knoble, Bogdan Popa
Some object-oriented GUI toolkits tangle state management with rendering. Functional shells and observable toolkits like GUI Easy simplify and promote the creation of reusable views by analogy to functional programming. We have successfully used GUI Easy on small and large GUI projects. We report on our experience constructing and using GUI Easy and derive from that experience several architectural patterns and principles for building functional programs out of imperative systems.
一些面向对象的GUI工具包将状态管理与呈现混淆在一起。函数式shell和可观察工具包(如GUI Easy)通过类比函数式编程简化并促进了可重用视图的创建。我们已经成功地在小型和大型GUI项目中使用了GUI Easy。我们报告了构建和使用GUI Easy的经验,并从这些经验中得出了一些架构模式和原则,用于从命令式系统中构建函数式程序。
{"title":"Functional Shell and Reusable Components for Easy GUIs","authors":"D. Knoble, Bogdan Popa","doi":"10.1145/3609025.3609478","DOIUrl":"https://doi.org/10.1145/3609025.3609478","url":null,"abstract":"Some object-oriented GUI toolkits tangle state management with rendering. Functional shells and observable toolkits like GUI Easy simplify and promote the creation of reusable views by analogy to functional programming. We have successfully used GUI Easy on small and large GUI projects. We report on our experience constructing and using GUI Easy and derive from that experience several architectural patterns and principles for building functional programs out of imperative systems.","PeriodicalId":109131,"journal":{"name":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","volume":"6 10 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115347713","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
Types that Change: The Extensible Type Design Pattern 可更改的类型:可扩展类型设计模式
Ivan Perez
Compilers are often structured as chains of transformations, from source code to object code, through multiple intermediate representations. The existence of different representations of the same program presents challenges both for code maintenance and in terms of architecture. The types used to capture programs at multiple stages may be similar but not interchangeable, leading to code duplication. Methods to alleviate such duplication often lead to violations of software engineering principles of abstraction and encapsulation. This pearl discusses a design pattern where an algebraic data type (ADT) is extended with an argument type function that is applied to every component of the ADT. The resulting parametric type can be instantiated with multiple type functions, each providing a different feature. We demonstrate the versatility of this pattern by capturing notions of traceability and error recovery, and demonstrate that it can also be used to selectively modify existing types, as well as to extend them. Our proposal has been validated by applying it to a real-world use case with very good results.
编译器通常结构为转换链,从源代码到目标代码,通过多个中间表示。同一程序的不同表示形式的存在对代码维护和体系结构都提出了挑战。用于在多个阶段捕获程序的类型可能相似但不可互换,从而导致代码重复。减轻这种重复的方法通常会导致违反软件工程的抽象和封装原则。本文讨论了一种设计模式,其中代数数据类型(ADT)通过应用于ADT的每个组件的参数类型函数进行扩展。产生的参数类型可以用多个类型函数实例化,每个函数提供不同的特性。我们通过捕获可跟踪性和错误恢复的概念来演示此模式的多功能性,并演示它还可以用于有选择地修改现有类型,以及扩展它们。我们的建议已经通过将其应用到一个真实的用例中得到了验证,结果非常好。
{"title":"Types that Change: The Extensible Type Design Pattern","authors":"Ivan Perez","doi":"10.1145/3609025.3609475","DOIUrl":"https://doi.org/10.1145/3609025.3609475","url":null,"abstract":"Compilers are often structured as chains of transformations, from source code to object code, through multiple intermediate representations. The existence of different representations of the same program presents challenges both for code maintenance and in terms of architecture. The types used to capture programs at multiple stages may be similar but not interchangeable, leading to code duplication. Methods to alleviate such duplication often lead to violations of software engineering principles of abstraction and encapsulation. This pearl discusses a design pattern where an algebraic data type (ADT) is extended with an argument type function that is applied to every component of the ADT. The resulting parametric type can be instantiated with multiple type functions, each providing a different feature. We demonstrate the versatility of this pattern by capturing notions of traceability and error recovery, and demonstrate that it can also be used to selectively modify existing types, as well as to extend them. Our proposal has been validated by applying it to a real-world use case with very good results.","PeriodicalId":109131,"journal":{"name":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","volume":"169 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"134030778","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
Phases in Software Architecture 软件架构的各个阶段
J. Gibbons, Donnacha Oisín Kidney, T. Schrijvers, Nicolas Wu
The large-scale structure of executing a computation can often be thought of as being separated into distinct phases. But the most natural form in which to specify that computation may well have a different and conflicting structure. For example, the computation might consist of gathering data from some locations, processing it, then distributing the results back to the same locations; it may be executed in three phases—gather, process, distribute—but mostly conveniently specified orthogonally—by location. We have recently shown that this multi-phase structure can be expressed as a novel applicative functor (also known as an idiom, or lax monoidal functor). Here we summarize the idea from the perspective of software architecture. At the end, we speculate about applications to choreography and multi-tier architecture.
执行计算的大规模结构通常可以被认为是分成不同的阶段。但是,指定计算的最自然形式很可能具有不同的和相互冲突的结构。例如,计算可能包括从某些位置收集数据,处理数据,然后将结果分发回相同的位置;它可以分三个阶段执行——收集、处理、分发——但大多是按位置以正交方式指定。我们最近证明了这种多相结构可以表示为一种新的应用函子(也称为惯语,或松弛单函数子)。这里我们从软件体系结构的角度来总结这个思想。最后,我们对编排和多层体系结构的应用程序进行了推测。
{"title":"Phases in Software Architecture","authors":"J. Gibbons, Donnacha Oisín Kidney, T. Schrijvers, Nicolas Wu","doi":"10.1145/3609025.3609479","DOIUrl":"https://doi.org/10.1145/3609025.3609479","url":null,"abstract":"The large-scale structure of executing a computation can often be thought of as being separated into distinct phases. But the most natural form in which to specify that computation may well have a different and conflicting structure. For example, the computation might consist of gathering data from some locations, processing it, then distributing the results back to the same locations; it may be executed in three phases—gather, process, distribute—but mostly conveniently specified orthogonally—by location. We have recently shown that this multi-phase structure can be expressed as a novel applicative functor (also known as an idiom, or lax monoidal functor). Here we summarize the idea from the perspective of software architecture. At the end, we speculate about applications to choreography and multi-tier architecture.","PeriodicalId":109131,"journal":{"name":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","volume":"85 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121635257","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
A Software Architecture Based on Coarse-Grained Self-Adjusting Computations 基于粗粒度自调整计算的软件体系结构
Stefan Wehr
Ensuring that software applications present their users the most recent version of data is not trivial. Self-adjusting computations are a technique for automatically and efficiently recomputing output data whenever some input changes. This article describes the software architecture of a large, commercial software system built around a framework for coarse-grained self-adjusting computations in Haskell. It discusses advantages and disadvantages based on longtime experience. The article also presents a demo of the system and explains the API of the framework.
确保软件应用程序向用户呈现最新版本的数据并非易事。自调整计算是一种在输入发生变化时自动有效地重新计算输出数据的技术。本文描述了一个大型商业软件系统的软件体系结构,该系统围绕Haskell中用于粗粒度自调整计算的框架构建。它根据长期的经验讨论了利弊。本文还展示了系统的演示,并解释了框架的API。
{"title":"A Software Architecture Based on Coarse-Grained Self-Adjusting Computations","authors":"Stefan Wehr","doi":"10.1145/3609025.3609481","DOIUrl":"https://doi.org/10.1145/3609025.3609481","url":null,"abstract":"Ensuring that software applications present their users the most recent version of data is not trivial. Self-adjusting computations are a technique for automatically and efficiently recomputing output data whenever some input changes. This article describes the software architecture of a large, commercial software system built around a framework for coarse-grained self-adjusting computations in Haskell. It discusses advantages and disadvantages based on longtime experience. The article also presents a demo of the system and explains the API of the framework.","PeriodicalId":109131,"journal":{"name":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","volume":"67 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126266717","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
Stretching the Glasgow Haskell Compiler: Nourishing GHC with Domain-Driven Design 扩展格拉斯哥Haskell编译器:用领域驱动设计滋养GHC
Jeffrey M. Young, S. Henry, J. Ericson
Over the last decade Haskell has been productized; transitioning from a research language to an industrial strength language ready for large-scale systems. However, the literature on architecting such systems with a pure functional language is scarce. In this paper we contribute to that discourse, by using a large-scale system: the Glasgow Haskell Compiler (GHC), as a guide to more maintainable, flexible and effective, pure functional architectures. We describe, from experience, how GHC as a system, violates the desirable properties that make pure functional programming attractive: immutability, modularity, and composability. With these violations identified, we provide guidance for other functional system architectures; drawing heavily on Domain-Driven Design. We write from an engineering perspective, with the hope that our experience may provide insight into best practices for other pure functional software architects.
在过去的十年中,Haskell已经产品化;从研究语言过渡到大规模系统的工业语言。然而,关于用纯函数式语言构建这样的系统的文献很少。在本文中,我们通过使用一个大规模的系统:格拉斯哥Haskell编译器(GHC)来促进这一论述,作为一个更可维护、更灵活、更有效的纯功能架构的指南。根据经验,我们描述了作为一个系统的GHC如何违背了使纯函数式编程具有吸引力的理想属性:不变性、模块化和可组合性。通过识别这些违规,我们为其他功能系统架构提供指导;大量使用领域驱动设计。我们从工程的角度出发,希望我们的经验可以为其他纯功能软件架构师提供最佳实践的见解。
{"title":"Stretching the Glasgow Haskell Compiler: Nourishing GHC with Domain-Driven Design","authors":"Jeffrey M. Young, S. Henry, J. Ericson","doi":"10.1145/3609025.3609476","DOIUrl":"https://doi.org/10.1145/3609025.3609476","url":null,"abstract":"Over the last decade Haskell has been productized; transitioning from a research language to an industrial strength language ready for large-scale systems. However, the literature on architecting such systems with a pure functional language is scarce. In this paper we contribute to that discourse, by using a large-scale system: the Glasgow Haskell Compiler (GHC), as a guide to more maintainable, flexible and effective, pure functional architectures. We describe, from experience, how GHC as a system, violates the desirable properties that make pure functional programming attractive: immutability, modularity, and composability. With these violations identified, we provide guidance for other functional system architectures; drawing heavily on Domain-Driven Design. We write from an engineering perspective, with the hope that our experience may provide insight into best practices for other pure functional software architects.","PeriodicalId":109131,"journal":{"name":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","volume":"30 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130861030","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
Crème de la Crem: Composable Representable Executable Machines 奶油中的奶油:可组合的可执行机器
Marco Perone, G. Karachalias
In this paper we describe how to build software architectures as a composition of state machines, using ideas and principles from the field of Domain-Driven Design. By definition, our approach is modular, allowing one to compose independent subcomponents to create bigger systems, and representable, allowing the implementation of a system to be kept in sync with its graphical representation. In addition to the design itself we introduce the Crem library, which provides a concrete state machine implementation that is both compositional and representable. Crem uses Haskell's advanced type-level features to allow users to specify allowed and forbidden state transitions, and to encode complex state machine---and therefore domain-specific---properties. Moreover, since Crem's state machines are representable, Crem can automatically generate graphical representations of systems from their domain implementations.
在本文中,我们描述了如何使用领域驱动设计领域的思想和原则,将软件架构构建为状态机的组合。根据定义,我们的方法是模块化的,允许人们组成独立的子组件来创建更大的系统,并且是可表示的,允许系统的实现与其图形表示保持同步。除了设计本身之外,我们还引入了Crem库,它提供了一个具体的状态机实现,它既可组合又可表示。Crem使用Haskell的高级类型级特性来允许用户指定允许和禁止的状态转换,并编码复杂的状态机(因此是特定于领域的)属性。此外,由于Crem的状态机是可表示的,因此Crem可以从系统的领域实现自动生成系统的图形表示。
{"title":"Crème de la Crem: Composable Representable Executable Machines","authors":"Marco Perone, G. Karachalias","doi":"10.1145/3609025.3609480","DOIUrl":"https://doi.org/10.1145/3609025.3609480","url":null,"abstract":"In this paper we describe how to build software architectures as a composition of state machines, using ideas and principles from the field of Domain-Driven Design. By definition, our approach is modular, allowing one to compose independent subcomponents to create bigger systems, and representable, allowing the implementation of a system to be kept in sync with its graphical representation. In addition to the design itself we introduce the Crem library, which provides a concrete state machine implementation that is both compositional and representable. Crem uses Haskell's advanced type-level features to allow users to specify allowed and forbidden state transitions, and to encode complex state machine---and therefore domain-specific---properties. Moreover, since Crem's state machines are representable, Crem can automatically generate graphical representations of systems from their domain implementations.","PeriodicalId":109131,"journal":{"name":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-07-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129954519","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
Typed Design Patterns for the Functional Era 功能时代的类型化设计模式
Will Crichton
This paper explores how design patterns could be revisited in the era of mainstream functional programming languages. I discuss the kinds of knowledge that ought to be represented as functional design patterns: architectural concepts that are relatively self-contained, but whose entirety cannot be represented as a language-level abstraction. I present four concrete examples embodying this idea: the Witness, the State Machine, the Parallel Lists, and the Registry. Each pattern is implemented in Rust to demonstrate how careful use of a sophisticated type system can better model each domain construct and thereby catch user mistakes at compile-time.
本文探讨了在主流函数式编程语言的时代,如何重新审视设计模式。我讨论了应该被表示为功能设计模式的各种知识:相对自包含的架构概念,但其整体不能被表示为语言级别的抽象。我给出了体现这一思想的四个具体例子:见证、状态机、并行列表和注册表。每个模式都是在Rust中实现的,以演示如何谨慎地使用复杂的类型系统来更好地为每个域构造建模,从而在编译时捕获用户错误。
{"title":"Typed Design Patterns for the Functional Era","authors":"Will Crichton","doi":"10.1145/3609025.3609477","DOIUrl":"https://doi.org/10.1145/3609025.3609477","url":null,"abstract":"This paper explores how design patterns could be revisited in the era of mainstream functional programming languages. I discuss the kinds of knowledge that ought to be represented as functional design patterns: architectural concepts that are relatively self-contained, but whose entirety cannot be represented as a language-level abstraction. I present four concrete examples embodying this idea: the Witness, the State Machine, the Parallel Lists, and the Registry. Each pattern is implemented in Rust to demonstrate how careful use of a sophisticated type system can better model each domain construct and thereby catch user mistakes at compile-time.","PeriodicalId":109131,"journal":{"name":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","volume":"76 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-07-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133114852","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
Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture 第一届ACM SIGPLAN功能软件体系结构国际研讨会论文集
{"title":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","authors":"","doi":"10.1145/3609025","DOIUrl":"https://doi.org/10.1145/3609025","url":null,"abstract":"","PeriodicalId":109131,"journal":{"name":"Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture","volume":"63 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127042159","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
期刊
Proceedings of the 1st ACM SIGPLAN International Workshop on Functional Software Architecture
全部 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