我正在考虑在某个时候创建一个功能性反应框架。我已经阅读了很多相关内容并看到了一些示例,但我想清楚地了解这个框架必须做什么才能被视为 FRP 扩展/dsl。我并不真正关心实施问题或细节等,但更关心完美世界情况下需要什么。
理想的函数式反应式编程语言的关键操作和品质是什么?
我很高兴您首先询问规范而不是实现。
关于玻璃钢是什么,有很多想法。
从 20 世纪 90 年代初开始(当时我在 Sun Microsystems 和 Microsoft Research 从事交互式图形工作),它一直涉及两个属性(a)外延性和(b)时间连续性。
许多人放弃了这两个特性,并用各种不同的特性来识别 FRP。执行在我看来,所有这些都不是重点。
为了减少混淆,我希望看到术语“函数式反应式编程”被更准确和描述性的“指示性连续时间编程”(DCTP)所取代,正如杰克·麦克阿瑟(Jake McArthur)在去年的一次谈话 http://tunes.org/%7Enef/logs/haskell/10.05.17.
我所说的“指示性”是指建立在精确、简单、独立于实现的组合语义的基础上,它准确地指定了每种类型和构建块的含义。
然后,语义的组合性质决定了构建块的所有类型正确组合的含义。
为我,外延的是函数式编程的核心和本质,它能够实现精确且易于处理的推理,从而为正确性、推导和优化奠定了基础。
Peter Landin 建议使用“指示性”作为模糊术语“函数式”的实质性替代,并且是一种将深度/真正的函数式编程与仅仅看起来函数式的符号区分开来的方法。
看这条评论 http://conal.net/blog/posts/is-haskell-a-purely-functional-language/#comment-35882一些 Landin 引言和论文参考。
关于连续时间,见帖子为什么要使用连续时间进行编程? http://conal.net/blog/posts/why-program-with-continuous-time/以及我在本页 AshleyF 的回答中引用的内容。
当我听到这样的说法时,我一次又一次地感到惊讶连续的考虑到计算机的离散性质,时间在某种程度上是不自然的或不可能实现的。
这种思路让我觉得很奇怪,尤其是来自 Haskellers,原因如下:
- Using lazy函数式语言,我们随意编程infinite数据关于finite机器。结果,我们得到了可爱的模块化,正如约翰休斯的经典论文所示为什么函数式编程很重要 http://www.cse.chalmers.se/%7Erjmh/Papers/whyfp.html.
- 在连续空间中编程的例子有很多,例如矢量图形,但也有类似的东西Pan http://conal.net/Pan.
- 我喜欢我的程序反映我如何看待问题空间而不是执行程序的机器,并且我倾向于期望其他高级语言程序员也有这种偏好。
(“当程序需要关注不相关的内容时,编程语言就是低级的。”——Alan Perlis)
从那时起我就一直在制作用于连续编程的库TBAG http://conal.net/tbag/ and 主动VRML http://conal.net/papers/ActiveVRML/(第一个 DCTP/FRP 系统)及以后Fran http://conal.net/Fran。
正确实施很容易。
论文中描述了几种不同的方法连续建模动画的功能实现 http://conal.net/papers/plilpalp98/。
实施连续时间有效率的(而且仍然正确!)是另一回事,尤其是避免重新计算不变的值。
(参见论文推拉函数反应式编程 http://conal.net/papers/push-pull-frp/.)
相关备注请参见我的回答反应式编程和函数式反应式编程之间的区别 https://stackoverflow.com/questions/5385377/the-difference-between-reactive-and-functional-reactive-programming/5386908#5386908 and to 什么是(函数式)反应式编程? https://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming/1030631#1030631 Update:有关连续时间为何如此重要的更多信息,请参阅这些笔记 https://github.com/conal/talk-2014-bayhac-denotational-design. Update:另请参阅我 2015 年的演讲玻璃钢的本质和起源 https://github.com/conal/talk-2015-essence-and-origins-of-frp(以及那里链接的相关会谈)。
祝您探索顺利,如果您有任何疑问,请告诉我。
我的联系信息已开启我的主页 http://conal.net.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)