我正在研究在某个时刻创建功能反应框架。我已阅读了很多关于它的文章,并看到了一些例子,但我想清楚地知道这个框架将被视为FRP扩展/ dsl。我并不是真的关心实施问题或具体情况等,而更关心的是在完美的世界形势下需要什么。功能反应编程语言规范
理想的功能反应式编程语言的关键操作和质量是什么?
我正在研究在某个时刻创建功能反应框架。我已阅读了很多关于它的文章,并看到了一些例子,但我想清楚地知道这个框架将被视为FRP扩展/ dsl。我并不是真的关心实施问题或具体情况等,而更关心的是在完美的世界形势下需要什么。功能反应编程语言规范
理想的功能反应式编程语言的关键操作和质量是什么?
我很高兴你先问一个规范而不是第一个实现。 有许多关于玻璃钢是什么的想法。 对我来说,总是有两件事:(a)外延和(b)暂时连续。 许多人都放弃这两个属性,并用各种执行概念来识别FRP,这些概念都与我的观点不同。 为了减少混淆,我希望看到由杰克·麦克阿瑟在a conversation last year中提出的更精确的描述性“外延式连续时间编程”(DCTP)来代替术语“功能性反应式编程”。
“外延”,我的意思是建立在精确,简单,独立于实现的组合语义之上,它精确指定每种类型和构件块的含义。 语义的组成性质决定了构件块的所有类型正确组合的含义。 对我来说,外延是心脏功能编程的精髓,它是什么使精确&易于推理,从而为正确性,派生和优化的基础。 Peter Landin推荐“外延”作为实质性替代模糊术语“功能性”的术语,并且是将功能强大的程序设计与功能性标识区分开来的一种方法。 请参阅this comment了解一些Landin引用和纸质参考。
关于连续时间,请参阅Why program with continuous time?和我在AshleyF在此页上的回答中的引用。 考虑到计算机的离散性质,我对&感到惊讶,因为我认为连续时间在某种程度上不自然或不可能实现。 这的思路令我奇怪的,从Haskellers来特别是,有几个原因:
因为TBAG和ActiveVRML(第一的dCTP/FRP我已经作出了与连续时间编程库系统)以及后来的Fran。 正确实施很容易。 在文档Functional Implementations of Continuous Modeled Animation中描述了几种不同的方法。 有效实施连续时间(并且仍然正确!)是另一个问题,尤其是避免重新计算不变的值。 (见文章。)
对于相关说明,请参阅my answer to The difference between Reactive and Functional-Reactive programming和What is (functional) reactive programming?更新:要了解为何持续时间的问题,请参见these notes。 更新:另请参阅我的2015年谈话The essence and origins of FRP(以及与此相关的谈话)。
祝你好运,并请让我知道你是否有任何问题。 我的联系信息地址为my home page。
我假设您可能在Functional I/O上看过Matthias Felleisen’s talk,并且读his paper。我认为他是一个非常务实和美丽的方法。希望你也偶然发现了一些Conal Elliott的出色工作。
我个人的要求是系统完全纯净。也就是说,所有的行为都是由纯粹的函数定义的,并且所有的实现或者可视化都是由函数定义的world->visual
;其中visual
是来自系统的输出的一些静态描述。
我的另一个主要功能是历史调试器。保持州的历史并且能够在任何时间点重播应该是相对简单的。非常有趣的研究
一个领域(我相信一个未解决的问题)是使用连续的时间,而不是在蜱一些离散时钟迭代world->world
功能。我曾经做过一个few blog posts on FRP和Conal Elliott留下以下发人深省的评论:
我喜欢外延/功能 临近,组合性& 语义清晰。对于相同的 的原因,我更喜欢连续时间& 空间超过离散时间&空间。在 所有这些情况下,很少有类似机器的配方 将其与基于机器的演示如何分开。
解决这个问题,你将成为英雄!
出于好奇,你最终创建框架? – bman 2016-12-11 04:53:00