规范function反应编程语言

我正在考虑在某个时候创build​​一个function反应框架。 我已经阅读了很多,并看到了一些例子,但是我想清楚地知道这个框架将被视为一个FRP扩展/ dsl。 我并不是真的关心实现问题或具体情况等,而更关心的是在完美的世界中需要什么。

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

我很高兴你首先问一个规范而不是实现。 有很多关于FRP是什么的想法。 对我来说,总是有两件事情:(a)外延和(b)暂时连续的。 许多人都放弃了这两个属性,并用各种实施概念来识别玻璃钢,这些都与我的观点不相上下。 为了减less混淆,我希望看到去年麦克阿瑟在谈话中提出的“function性反应式编程”这个术语被更准确和描述性的“外延式连续时间编程”(DCTP)所取代。

所谓“外延”,我的意思是build立在一个精确的,简单的,独立于实现的组合语义之上,这个语义恰好指定了每个types和构件块的含义。 语义的组成性质决定了构件的所有types正确组合的含义。 对于我来说, 外延是函数式编程的核心和本质,它使得精确和易处理的推理成为正确,推导和优化的基础。 彼得·兰德宁(Peter Landin)推荐“外延”作为实质性替代模糊术语“function性”的方法,也是将function强大的程序devise与function性标识区分开来的一种方法。 看到这个评论的一些Landin报价和纸张参考。

关于连续时间,请参阅为什么连续时间计划? 和我在AshleyF的回答在这个页面上的报价。 考虑到计算机的离散性,听到连续时间的想法在某种程度上是不自然的或不可能实现的说法,我感到惊讶。 这种思路让我感到奇怪,特别是当来自Haskellers时,原因如下:

  • 使用懒惰的函数式语言,我们随意地在有限的机器上编写 无限的数据。 作为结果,我们得到了可爱的模块化,正如约翰·休斯(John Hughes)的经典论文“ 为什么function性编程的重要性”(Why Functional Programming Matters)
  • 在连续空间中有许多编程的例子,比如vectorgraphics,还有像Pan这样的东西。
  • 我喜欢我的程序来反映我如何思考问题空间,而不是执行程序的机器,我倾向于期望其他高级语言程序员分享这种偏好。 (“程序语言在程序需要注意无关的时候是低级的” – Alan Perlis)

自从TBAG和ActiveVRML (第一个DCTP / FRP系统)和后来的Fran以来,我一直在为连续编程创build库。 这很容易正确实施。 “连续build模animation的function实现”中描述了几种不同的方法。 有效地实现连续时间(并且仍然是正确的)是另一个问题,特别是避免重新计算不变的值。 (请参阅“ 推挽式function反应式编程”一文 。)

有关相关评论,请参阅我对“无功和function反应式编程function反应式编程之间的区别”的回答 更新:有关连续时间为什么的更多信息,请参阅这些注释 。 更新:另见,我的2015年谈话玻璃钢的本质和起源 (和相关的谈话在那里)。

祝你好运,如果你有任何问题,请告诉我。 我的联系信息在我的主页上 。

我假设你可能已经看过Matthias Felleisen关于Functional I / O 的话题 ,并阅读他的论文 。 我认为他是一个非常务实和美丽的方法。 希望你也偶然发现了一些Conal Elliott的出色工作。

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

我的另一个主要function是历史debugging器。 保持world各国的历史并能够从任何时间点进行重放应该是相对微不足道的。

一个非常有趣的研究领域(我相信一个未解决的问题)将是使用连续的时间,而不是在某些离散的时钟周期 world->world迭代world->worldfunction。 我曾经在FRP上做了一些博客文章 , Conal Elliott留下了一些 激动人心的评论:

我喜欢外延/function方法,可组合性和语义清晰度。 出于同样的原因,我更喜欢在离散的时间和空间上连续的时间和空间。 在所有这些情况下,类似机器的配方很好地将其与基于机器的演示分开。

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