我很熟悉对象为导向的建筑,包括使用设计的模式和类图表可视化,而且我知道面向服务的架构,与其合同和协议的绑定,但是 有什么特征有关的软件架构的系统编写的功能编程语言?

我知道,FP已用于中等规模到大规模的项目。保罗*格雷厄姆写的第一次化身Yahoo!存储在共同的口齿不清。一些发展系统是复杂的。人工智能和金融系统编写功能的语言可以获得相当大的。他们都至少具有某种固有的建筑,不过,我想知道如果他们有什么共同点?

是什么建筑根据评价的表情看起来像什么?是FP架构,更多的组合?

更新: 凯尔提醒我, Sic颗粒 是一个很好的资源对于这个问题。

更新2: 我找到了一个很好的后关于这个问题: 如何编程功能影响的结构你的代码吗?

有帮助吗?

解决方案

该共同主线,在"结构"的项目,使用功能性的语言,他们往往被分成层的代数,而不是系统的传统体系架构的意义。

对很好的例子,这些项目,检查了 XMonad, Yi, , .如果你检查它们是如何结构性的,你会发现它们包括层的单子结构的一些组合的胶水之间。

还看看 斯卡拉实验 纸,其中概述了一个建筑在哪一种系统是由分抽象,在他们的依赖性。

其他提示

目前,我正在工作上书"设计和建筑在功能编程"。它描述了许多设计模式和办法,都存在纯FP世界(主要语言是哈斯克尔),但不是唯一的。这本书教你如何建立大型应用程序从头开始与纯洁和污秽的国家,多线程、网络、数据库,GUI,如何分层和取得的简单性。它还显示了如何模型域和语言,如何组织和描述构架的应用程序如何进行测试,甚至更多。

该系列专题包括:

  • 办法的构建模使用图;
  • 要求的分析;
  • 嵌入式的DSL域建模;
  • 外部DSL设计和执行;
  • 单元为子系统的影响;
  • 免费单元作为功能性的接口;
  • Arrowised eDSLs;
  • 反转的控制使用免费元eDSLs;
  • 软件事务存;
  • 镜头;
  • 国家、读者、作家、RWS、圣元;
  • 不纯净的状态:IORef,因此,还有,STM;
  • 多线程和并发域建模;
  • GUI;
  • 适用性的主流techiques和办法,例如UML、固体、掌握;
  • 交互不纯的子系统。

这本书是根据Haskell的项目,我研究,特别是一系统应用程序 仙女座.代码,用于这本书是可用 在这里,.而这本书是根据发展(它会做直到2017年),我可以推荐你获得熟悉的与我的文章"设计和建筑在FP" 在这里, (Rus).

更新

我分享我的网上预定(第5章). 看上张贴。

最大的共同点,你会发现在的功能的语言的使用功能储存数据。这是一个有点喜欢采用的存取功能上的对象不对象。相反,该功能是建立在一种环境,它可以访问的数据需要。现在这种功能可以通过和使用的任何地方,并仍然保留能够使用的数据。

这是一个非常简单的例子。这不是纯粹的功能,因为它不会改变的状态,但它是共同的:

(define (make-counter)
  (let ((count 0))
    (lambda ()
      (set! count (+ count 1))
      count)))

(define x (make-counter))

(x) returns 1

(x) returns 2

...etc...

因此,我们有一个功能,使计数器,返回的另一个功能,有的国家计数内。我们可以叫这个新建立的反和遵守更改的内部。

这是如何的功能程序的结构。你有职能,采取功能的论点,你有功能返回的功能有隐藏的状态,等等。这是一个很清洁于存管理自己。

我曾与一些相当大的功能的项目。他们通常分为两个营地(至少,那些我已经使用):

  • 极端的可扩展性/可靠性/发。事务模式可建立了非常紧密的语言。并发ML是一个很好的例子,项目,使用它们很难得到错误的时候并发的正确性。
  • 析/修改框架。许多设计的模式,这些框架根据是非常容易制定/建造/修改,在功能性的语言。访问者模式是一个很好的例子。

我打印出来,和看着 设计图案在Ocaml, 和他们使用的模块和函(和对象)重新创造正常的设计图案,我们使用。这很有趣,但我认为他们使用的对象 少来真的看到有益的功能性的语言。FP是非常组合,它的一部分的性质。我猜我的简短的回答是使用 模块.

我当前的项目是相当大的,我们独立的每个模块都通过的文件--隐含在ocaml.我一直在寻找一个全面的资源,以及可能有一些替代性看法或某些想法在一个真正的成功设计出来的一个项目。

希望不是太切,但可能有趣的人浏览了这个问题的答案是这样的演讲 设计图案中的动态规划 由彼得*Norvig.

我认为这可以帮助;

一些模式中消失--这 是的,他们是直接支持通过 语言的特征,一些模式 简单或有一个不同的焦点, 有些是基本保持不变。

[目标-2002-005]Gregory T.Sullivan 高级编程语言功能为可执行的设计模式"更好的模式,通过反射

月22日,2002年

设计图案的书[GOF95] 提出了24个经过时间考验的模式, 一直出现在精心设计的 软件系统。每一个图案 提出的说明 设计问题的模式的地址, 以及样品的实施代码 以及设计考虑因素。这纸 探讨如何的模式 "四人帮"或"GOF"的书,因为它 通常被称为,会出现类似的当 问题是处理使用 动态、更高了,面向对象 编程语言。一些的 模式中消失--这是他们 直接支持通过语言 功能,一些模式是简单或 有一个不同的焦点,一些 基本保持不变。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top