首页 / 知识
功能编程架构
2023-04-16 22:45:00

Functional Programming Architecture我熟悉面向对象的体系结构,包括使用设计模式和类图进行可视化,并且我知道带有契约和协议绑定的面向服务的体系结构,但是用这种语言编写的系统的软件体系结构有什么特点?功能编程语言? 我知道FP已用于中型到大型项目。保罗·格雷厄姆(Paul Graham)撰写了Yahoo!的第一个化身。存放在Common Lisp中。一些Lisp开发系统很复杂。用功能语言编写的人工智能和金融系统可能会变得非常庞大。它们都至少具有某种固有的体系结构,但是,我想知道它们是否有共同点? 基于表达式评估的体系结构是什么样的? FP架构是否更具可组合性? 更新:凯尔(Kyle)提醒我,SICP是此主题的不错资源。 更新2:我在以下主题上找到了一篇不错的文章:函数式编程如何影响代码的结构? 使用功能性语言的项目"体系结构"中的共同点是,它们倾向于分为代数层,而不是传统系统体系结构意义上的子系统。 有关此类项目的绝佳示例,请查看XMonad,Yi和HappS。如果检查它们的结构,您会发现它们由单层结构组成,中间夹有一些组合胶。 另请参阅Scala实验论文,该论文概述了体系结构,其中系统由对其依赖项进行抽象的组件组成。 我目前正在写《函数式编程中的设计和体系结构》一书。它描述了纯FP世界中存在的许多设计模式和方法(主要语言是Haskell),但不仅如此。这本书教您如何从头开始构建具有纯净和不纯状态,多线程,网络,数据库,GUI的大型应用程序,以及如何将其划分为多个层并获得简单性。它还显示了如何为域和语言建模,如何组织和描述应用程序的体系结构以及如何对其进行测试,等等。 主题列表包括:
这本书基于我正在研究的Haskell项目,尤其是SCADA应用程序Andromeda。本书的代码可在此处获得。虽然本书正在开发中(将在2017年完成),但我建议您在这里熟悉我的文章" FP中的设计和体系结构"(俄罗斯)。 更新 我在线上分享了我的书(前5章)。见Reddit上的帖子 在功能语言中,最大的共性是使用函数存储数据。这有点像在没有对象的对象上使用访问器函数。而是在可以访问所需数据的环境中创建该函数。现在,此函数可以在任何地方传递和使用,并且仍然保留使用数据的功能。 这是一个非常简单的示例。这不是纯粹的功能,因为它确实会改变状态,但是很常见:
因此,我们有一个函数,make-counter,它返回另一个具有内部计数器状态的函数。我们可以调用该新创建的计数器并观察内部的变化。 这就是功能程序的结构。您有将函数作为参数的函数,有返回具有隐藏状态的函数的函数,等等。这比自己管理内存要干净得多。 希望不要太切切,但对于浏览此问题答案的任何人来说可能很有趣,这是Peter Norvig的演示"动态编程中的设计模式"。 我打印并查看了Ocaml中的"设计模式",它们使用模块和函子(和对象)来重新创建我们习惯的正常设计模式。这很有趣,但是我认为他们过多地使用对象,以至于无法真正看到功能语言的好处。 FP非常容易组合,这是其本质的一部分。我想我的简短答案是使用模块和函子。 我当前的项目很大,我们通过文件将每个模块分开-隐含在ocaml中。我也一直在寻找全面的资源,对于从项目中获得的真正成功的设计,可能会有一些其他观点或想法。 我已经处理了一些相当大的功能项目。它们通常分为两个阵营(至少是我使用过的阵营):
我认为这可能会有所帮助;
[AIM-2002-005] Gregory T. Sullivan,可执行设计模式的高级编程语言功能"通过反射实现更好的模式 2002年3月22日
|
最新内容
相关内容
linux控制台编程命令?
linux控制台编程命令?,系统,工具,环境,命令,名称,标准,不了,工作,发行,基础,shell编程(掌握Linux命令行工具)1、在开始Shell编程之前,我们需要linux编程常用命令?
linux编程常用命令?,系统,工作,信息,命令,地址,管理,工具,网络,基础,目录,linux基本操作命令linux常用命令有pwd命令、cd命令、ls命令、cat命编程解析linux命令?
编程解析linux命令?,系统,标准,基础,设备,发行,电脑,工具,密码,名字,适当,如何学习linux命令之ls的使用ls Linux常用命令中,ls用于列出当前路径linux命令行图形编程?
linux命令行图形编程?,系统,不了,情况,密码,工具,地方,百度,管理,图形界面,命令,linux下启动图形化界面的命令是不是startx?当启动文件找不到linux编程执行命令?
linux编程执行命令?,电脑,系统,环境,命令,基础,发行,工具,代码,地址,名称,linux为脚本程序指定执行权的命令及参数是1、chmod u+x file,如果只linux可视化的命令?
linux可视化的命令?,工作,软件,地址,系统,基础,工具,代码,环境,必读,管理,linux常用命令有哪些linux常用命令如下:查看内核版本:uname-a。控制台linux终端命令行编程?
linux终端命令行编程?,系统,工作,命令,终端,概念,时间,第一,代码,发行,地方,Linux下5个有趣的命令行技巧介绍我们可以使用history命令来查看曾linux编程调用命令?
linux编程调用命令?,系统,标准,管理,工作,基础知识,情况,环境,设备,基础,首页,linux下怎样用c语言调用shell命令可以通过system函数,调用shelllinux编程所需的命令?
linux编程所需的命令?,工作,地址,档案,系统,命令,管理,标准,信息,目录,文件,Linux必须学会的60个命令:文件处理1应用实例如果我们看到一个没有linux命令行编程乱码?
linux命令行编程乱码?,环境,统一,乱码,中文,状态,软件,数据,系统,字符集,文件,为什么我进入Linux的终端窗口时,man一条命令出来的都是乱码呢?linux编程c命令符?
linux编程c命令符?,工具,代码,系统,保险,环境,文件,程序,命令,终端,编辑,到底怎么在Linux里编写c程序啊?1、学会使用vim/emacs,vim/emacs是linulinux常用编程命令?
linux常用编程命令?,基础,基础知识,系统,管理,概念,在线,发展,设备,设计,名字,Linux学习?1、linux怎么学习首先初学者要先学好Linux相关的基础