功能反应式编程语言规范

时间:2011-05-03 21:29:11

标签: functional-programming programming-languages semantics frp

我正在考虑在某些时候创建一个功能性反应框架。我已经阅读了很多关于它的内容,并看了几个例子,但我想清楚地知道这个框架必须做什么才能被认为是FRP扩展/ dsl。我并不是真正关心实施问题或具体细节等,而是关注在完美的世界环境中需要什么。

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

2 个答案:

答案 0 :(得分:112)

我很高兴你首先询问规范而不是先实现。 有关FRP的内容有很多想法。 对我来说,它始终是两件事:(a)外延和(b)暂时连续。 许多人放弃了这两个属性,并使用各种实现概念来识别FRP,所有这些都与我的观点不同。 为了减少混淆,我希望看到“功能反应式编程”一词被更准确的&描述性的“指示性,连续时间编程”(DCTP),正如Jake McArthur在a conversation last year中所建议的那样。

通过“外延”,我的意思是建立在一个精确的,简单的,与实现无关的组合语义上,它准确地指定了每种类型和构建块的含义。 然后,语义的组成性质决定了构建块的所有类型正确组合的含义。 对我来说,外延是心脏&函数式编程的本质,是实现精确&易于推理,因而是正确性,推导和优化的基础。 彼得兰丁推荐“外延”作为对“功能性”这个模糊术语的实质性替代,以及一种区分深度/真正功能性编程与仅仅是功能性符号的方法。 有关Landin引用和论文参考,请参阅this comment

关于连续时间,请参阅此页面上的帖子Why program with continuous time?和AshleyF答案中的引用。 我对此感到惊讶考虑到计算机的离散性,认为连续时间的想法在某种程度上是不自然的或不可能实现的。 这种想法让我觉得奇怪,特别是来自Haskellers时,出于以下几个原因:

  • 使用 lazy 函数式语言,我们随机地在有限机器上使用无限数据进行编程。结果,我们得到了可爱的模块化,如John Hughes的经典论文Why Functional Programming Matters所示。
  • 在连续空间中有很多编程的例子,例如矢量图形,还有Pan之类的东西。
  • 我喜欢我的程序来反映我对问题空间的看法而不是执行程序的机器,我倾向于期望其他高级语言程序员分享这种偏好。 (“当程序需要注意无关紧要时,编程语言是低级别的。” - Alan Perlis)

自从TBAGActiveVRML(第一个DCTP / FRP系统)以及后来的Fran以来,我一直在为编程创建库。 它很容易正确实现。 文章Functional Implementations of Continuous Modeled Animation中描述了一些不同的方法。 实现连续时间有效(并且仍然正确!)是另一回事,特别是避免重新计算不变的值。 (参见论文Push-pull functional reactive programming。)

有关相关说明,请参阅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

答案 1 :(得分:5)

我假设您可能在功能I / O上看过Matthias Felleisen’s talk并阅读his paper。我认为他是一个非常务实和美好的方法。希望你也偶然发现Conal Elliott的一些优秀作品。

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

我的另一个主要功能是历史调试器。保持world州的历史并能够从任何时间点重播都应该是相对微不足道的。

一个非常有趣的研究领域(我相信一个未解决的问题)是使用连续时间而不是在某些离散时钟 ticks 上迭代world->world函数。我曾经做过few blog posts on FRPConal Elliott留下以下发人深省的评论:

  

我喜欢外延/功能性   方法,可组合性和   语义清晰度。对于相同的   原因,我更喜欢连续时间和   离散时间和空间上的空间空间。在   所有这些情况,越少   机器般的配方很好   把它与它的方式区分开来   基于机器的演示。

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