我想知道反应式编程是如何与函数式编程联系在一起的。
大多数论文将“反应式编程”称为“功能反应式编程”。
反应式编程可以在函数式编程之外实现吗?
用函数式语言编写反应式程序更容易吗?
我想知道反应式编程是如何与函数式编程联系在一起的。
大多数论文将“反应式编程”称为“功能反应式编程”。
反应式编程可以在函数式编程之外实现吗?
用函数式语言编写反应式程序更容易吗?
我使用我称之为反应式编程或SEDA(分阶段事件驱动架构)的东西,但我并没有在函数式编程方面使用太多。 http://www.slideshare.net/PeterLawrey/writing-and-testing-high-frequency-trading-engines-in-java
虽然在功能上编写反应式程序更容易,但通过使用函数式编程来编写它们以更快地执行并不容易。重用可变状态通常比一直创建新的不可变对象快 2-5 倍。因此,如果您使用响应式编程来提高性能,我不会使用函数式编程。
开发人员经常觉得他们必须使用多个线程或内核,因为它们就在那里。这就像说您需要使用 100% 的磁盘空间,或者您正在浪费它。
恕我直言,如果它提高了性能,你应该只增加多线程的复杂性,这是实现这种改进的最简单方法。在关于使并发更容易的讨论中经常忘记的是,最简单的解决方案是使用一个线程,并且,除非您已经证明您的解决方案比这更快,否则您并没有让我相信使用多个线程是有帮助的。
我猜你正在上 Odersky/Meijer/Kuhn 的反应式编程课程?然后您将在第一节中看到 Martin Odersky 的解释:他使用了字典中的一个非常广泛的描述,其中反应的意思是“对刺激迅速做出反应”。所以它是关于一个程序观察并等待它响应的一些刺激。
所以从这个角度来看,反应首先是某种观察触发的功能。当您可以组合它们时,例如您映射事件或数据流变量,您可能会称其为“函数式”,因为一组未来值被声明为事件起源值的函数。
另一方面,函数式反应式编程或 FRP 是 Conal Elliott 和 Paul Hudak 创造的一个术语(最初:Functional Reactive Animation,因为它指的是图形界面)。它与他们的工作和 Haskell 编程语言密切相关。
许多实现反应式想法的库(例如,参见关于反应式编程的 WP 文章)与 FRP 共享事件组合方面,但它们不一定扩展到补充事件的 FRP 的分析/连续信号或“行为”。
您会发现有些人声称不遵守规范 FRP 的响应式编程(例如,在使用演员或频道时)正在从该标题的“真正持有者”中“窃取”该术语。所以这种讨论很容易变成意识形态。在意识形态的另一面,你会发现反应式经常(ab)被用作一个新的流行词。“反应性宣言”(宣言......真的!?你甚至可以签署那些东西......)可能就是这方面的一个例子。
对我来说,这个“反应式宣言”只是一个流行词。自 80 年代以来,Erlang 一直在免费且默默地实施整个事情。
我想说在函数式编程中遵循反应性原则更容易,因为 FP 通常包含不可变状态和免费的副作用函数。这意味着更容易实现并发、分布式和并行系统。
祝你好运实现一个使用共享状态、线程、锁、信号量的“反应式”系统......而且你知道,他们说只有两个人可以正确地获得 Java 并发系统,Doug Lea 和 Brian Goetz。
您可能有兴趣查看Reactive Manifesto。
我认为可以使用 OO 语言编写反应式应用程序(例如 Java 作为 NIO2 和 Netty Web 服务器),但使用函数式语言更合适。
不,它不是两者都是独立的编程范式,反应式是基于流的方法和基于纯函数哲学的函数式。