规范的功能反应编程语言

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

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


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

所谓“外延”,我的意思是建立在精确,简单,独立于实现的组合语义之上,它精确地指定了每种类型和构件块的含义。 语义的组成性质决定了构件块的所有类型正确组合的含义。 对我而言,外延是函数式编程的核心和本质,它使精确和易处理的推理成为可能,从而为正确性,派生和优化奠定了基础。 Peter Landin推荐“外延”作为实质性替代模糊术语“功能性”的术语,并且是一种区分功能强大的符号的方法。 看到这个评论的一些Landin报价和一篇论文的参考。

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

  • 使用懒惰的函数式语言,我们随意在有限的机器上编写无限数据。 结果,我们获得了可爱的模块化,正如John Hughes的经典论文Why Functional Programming Matters中所阐述的那样。
  • 在连续空间中有很多编程例子,例如矢量图形,但也包括像Pan这样的东西。
  • 我喜欢我的程序来反映我对问题空间的看法,而不是执行程序的机器,我倾向于期待其他高级语言程序员分享这种偏好。 (“当编程语言的程序需要注意无关紧要时,编程语言是低级的。” - Alan Perlis)
  • 自从TBAG和ActiveVRML(第一个DCTP / FRP系统)和后来的Fran以来,我一直在为连续编程创建库。 这很容易正确实施。 “连续建模动画的功能实现”中描述了几种不同的方法。 有效地实施连续时间(并且仍然是正确的)是另一回事,尤其是避免重新计算不变的值。 (请参阅“推挽式​​功能反应式编程”一文。)

    有关相关评论,请参阅我对“反应式和功能反应式编程之间的区别”和“(功能性)反应式编程之间的区别”的回答。 更新:有关连续时间的重要性的更多信息,请参阅这些说明。 更新:另请参阅我2015年的演讲FRP的实质和起源(以及相关的谈判)。

    祝你好运,并请让我知道你是否有任何问题。 我的联系信息位于我的主页上。


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

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

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

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

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

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

    链接地址: http://www.djcxy.com/p/47709.html

    上一篇: Specification for a Functional Reactive Programming language

    下一篇: Cache Invalidation — Is there a General Solution?