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