反应式和功能反应式编程之间的区别

Posted

技术标签:

【中文标题】反应式和功能反应式编程之间的区别【英文标题】:The difference between Reactive and Functional-Reactive programming 【发布时间】:2011-07-20 02:43:51 【问题描述】:

我最近一直在对响应式编程进行一些研究,但我发现很难找到关于响应式和 函数式-响应式之间区别的良好描述。

响应式编程是使用函数式方法/范式实现的,而不是使用声明式或 OO 范式吗?

【问题讨论】:

【参考方案1】:

函数响应式编程 (FRP) 是具有特定语义的特定编程模型。 (实际上有两种变体,有时称为“经典玻璃钢”和“箭头玻璃钢”。) 我在an answer to "What is (functional) reactive programming?" 中给出了总结。 正如我在那里所说,对我来说,两个关键属性一直是(a)精确和简单的外延和(b)连续时间。 我很遗憾这种模型后来被称为“函数式反应式编程”,原因如下:

这个名字省略了“时间”,而时间对我来说很重要。 “功能性”一词的具体/明确含义太少了。 我更喜欢彼得兰丁建议的替换“外延”。 (请参阅this blog comment 中的引用和参考。) 人们很容易错误地认为他们知道这个词的含义,因为他们知道(或多或少)这三个词中的每一个词的含义。

为了描述性和准确性,我更喜欢术语“指示性连续时间编程”(Jake McArthur 在不久前的一次谈话中建议)而不是“函数式反应式编程”。

我在博文Early inspirations and new directions in functional reactive programming写了一篇很短的关于玻璃钢的由来。

【讨论】:

【参考方案2】:

FRP 是函数式编程(建立在一切都是纯函数的理念之上的编程范式)和反应式编程范式(建立在一切都是流(观察者和可观察的哲学)的理念之上)的组合。它应该是两全其美的。

两者的定义更清楚地区分了两者。

【讨论】:

伟大的概述:) 你能再深入一点吗?我喜欢你的解释,但是当我使用 reactiveX(例如 RxJava)时,我是反应式的,但不一定是功能性的?因为在反应函数(链)中,我仍然可以产生副作用或非幂等(非函数)。 您认为是正确的@BenButterworth 使用 RxJava 或就此而言,任何反应式库都不能保证功能行为。确保没有副作用是开发人员的职责。

以上是关于反应式和功能反应式编程之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

反应式编程和消息队列的区别

Spring5-Reactor函数式编程

Spring5-Reactor函数式编程

Java并发,Akka和RxJava之间的区别?

Java中的反应式编程

使用 Reactor 进行反应式编程