56

我正在研究在某个时刻创建功能反应框架。我已阅读了很多关于它的文章,并看到了一些例子,但我想清楚地知道这个框架将被视为FRP扩展/ dsl。我并不是真的关心实施问题或具体情况等,而更关心的是在完美的世界形势下需要什么。功能反应编程语言规范

理想的功能反应式编程语言的关键操作和质量是什么?

+1

出于好奇,你最终创建框架? – bman 2016-12-11 04:53:00

回答

110

我很高兴你先问一个规范而不是第一个实现。 有许多关于玻璃钢是什么的想法。 对我来说,总是有两件事:(a)外延和(b)暂时连续。 许多人都放弃这两个属性,并用各种执行概念来识别FRP,这些概念都与我的观点不同。 为了减少混淆,我希望看到由杰克·麦克阿瑟在a conversation last year中提出的更精确的描述性“外延式连续时间编程”(DCTP)来代替术语“功能性反应式编程”。

“外延”,我的意思是建立在精确,简单,独立于实现的组合语义之上,它精确指定每种类型和构件块的含义。 语义的组成性质决定了构件块的所有类型正确组合的含义。 对我来说,外延是心脏功能编程的精髓,它是什么使精确&易于推理,从而为正确性,派生和优化的基础。 Peter Landin推荐“外延”作为实质性替代模糊术语“功能性”的术语,并且是将功能强大的程序设计与功能性标识区分开来的一种方法。 请参阅this comment了解一些Landin引用和纸质参考。

关于连续时间,请参阅Why program with continuous time?和我在AshleyF在此页上的回答中的引用。 考虑到计算机的离散性质,我对&感到惊讶,因为我认为连续时间在某种程度上不自然或不可能实现。 这的思路令我奇怪的,从Haskellers来特别是,有几个原因:

  • 使用函数式语言,大家随便用无限数据编程上有限机。作为结果,我们获得了可爱的模块化,如John Hughes的经典论文Why Functional Programming Matters所示。
  • 有很多连续空间编程的例子,例如矢量图形,但也有像Pan这样的东西。
  • 我喜欢我的程序来反映我对问题空间的看法,而不是执行程序的机器,我倾向于期待其他高级语言程序员分享这种偏好。 (“A编程语言为低电平时,其程序需要注意无关。” - 艾伦·佩利)

因为TBAGActiveVRML(第一的dCTP/FRP我已经作出了与连续时间编程库系统)以及后来的Fran。 正确实施很容易。 在文档Functional Implementations of Continuous Modeled Animation中描述了几种不同的方法。 有效实施连续时间(并且仍然正确!)是另一个问题,尤其是避免重新计算不变的值。 (见文章​​。)

对于相关说明,请参阅my answer to The difference between Reactive and Functional-Reactive programmingWhat is (functional) reactive programming?更新:要了解为何持续时间的问题,请参见these notes更新:另请参阅我的2015年谈话The essence and origins of FRP(以及与此相关的谈话)。

祝你好运,并请让我知道你是否有任何问题。 我的联系信息地址为my home page

+2

我感兴趣的是连续*函数的概念都是有限的。函数连续性的定义是:对于任何有限数量的信息,您都需要输入有限的信息。因此,如果您正在持续工作,您需要的只是连续函数它是完全自然的。 – luqui 2011-05-04 12:18:29

+1

@Conal是RxJS还是Bacon.js FRP?如果不是,为什么?它们与上面描述的有什么不同?他们应该被称为别的东西吗? – Bradford 2014-05-19 23:38:21

+1

@Bradford您是否问过RxJs和Bacon.js在我上面的答案中是否具有两个基本属性? – Conal 2014-05-20 15:33:34

5

我假设您可能在Functional I/O上看过Matthias Felleisen’s talk,并且读his paper。我认为他是一个非常务实和美丽的方法。希望你也偶然发现了一些Conal Elliott的出色工作。

我个人的要求是系统完全纯净。也就是说,所有的行为都是由纯粹的函数定义的,并且所有的实现或者可视化都是由函数定义的world->visual;其中visual是来自系统的输出的一些静态描述。

我的另一个主要功能是历史调试器。保持州的历史并且能够在任何时间点重播应该是相对简单的。非常有趣的研究

一个领域(我相信一个未解决的问题)是使用连续的时间,而不是在一些离散时钟迭代world->world功能。我曾经做过一个few blog posts on FRPConal Elliott留下以下发人深省的评论:

我喜欢外延/功能 临近,组合性& 语义清晰。对于相同的 的原因,我更喜欢连续时间& 空间超过离散时间&空间。在 所有这些情况下,很少有类似机器的配方 将其与基于机器的演示如何分开。

解决这个问题,你将成为英雄!

+0

感谢您的插件。 – Conal 2011-05-04 04:25:51

+5

我有'世界 - >世界'模型的两个主要问题。首先,除非我感到困惑,否则该模型仅支持*顺序*组合,并且对*平行*组合不友好。 想象一下,如何将两个'世界 - >世界'值*并行结合*。其次,我还没有看到它可能支持*连续*时间。这两个问题都阻碍了可组合性,这是我在图书馆设计中的一个关键目标。 – Conal 2011-05-04 04:31:46