反应式编程是否局限于函数式编程?[已关闭]

我想知道反应式编程是如何与函数式编程联系在一起的。

大多数论文将“反应式编程”称为“函数式反应式编程”。

反应式编程是否可以在函数式编程之外实现?

用函数式语言编写反应式程序更容易吗?


答案 1

我使用我称之为反应式编程或SEDA(分阶段事件驱动架构)的东西,但我在函数式编程方面使用得不多。http://www.slideshare.net/PeterLawrey/writing-and-testing-high-frequency-trading-engines-in-java

虽然在函数式上编写反应式程序更容易,但通过使用函数式编程来编写它们以更快地执行并不容易。重用可变状态通常比始终创建新的不可变对象快 2-5 倍。因此,如果您使用反应式编程来提高性能,我不会使用函数式编程。

开发人员通常觉得他们必须使用多个线程或内核,因为它们就在那里。这就像说你需要使用100%的磁盘空间,否则你正在浪费它。

恕我直言,只有当它提高了性能并且这是实现此改进的最简单方法时,您才应该增加多个线程的复杂性。在关于使并发更容易的讨论中经常被遗忘的是,最简单的解决方案是使用一个线程,并且,除非您已经证明您的解决方案比这更快,否则您还没有说服我使用多个线程是有帮助的。


答案 2

我的猜测是你正在参加Odersky/Meijer/Kuhn的Active Programming课程?然后你会看到马丁·奥德斯基(Martin Odersky)在第一次会议中的解释:他使用了字典中非常广泛的描述,其中反应性的意思是“对刺激做出反应”。因此,这是关于一个程序观察并等待它响应的一些刺激。

因此,从这个角度来看,反应是大多数某种观察触发的功能。当您可以编写它们时,例如,映射事件或数据流变量,您可能会将其称为“函数式”,因为一组未来值被声明为事件发起值的函数。

另一方面,函数式反应式编程或FRP是由Conal Elliott和Paul Hudak创造的一个术语(最初:Functional Reactive Animation,因为它指的是图形界面)。它与他们的工作和Haskell编程语言密切相关。

许多实现反应式思想的库(例如,参见WP关于反应式编程的文章)与FRP共享事件组合方面,而它们不一定扩展到FRP的分析/连续信号或补充事件的“行为”。


你会发现,有些人声称,不遵循规范FRP的反应式编程——例如,在使用演员或频道时——是从该标题的“真正持有者”那里“窃取”这个词。因此,这种讨论很容易成为意识形态。在意识形态的另一面,你会发现反应性经常被用作一个新的流行词。“反应性宣言”(宣言...真!?你甚至可以签署这些东西...)可能是这边的一个例子。