响应式编程
在计算中,响应式编程或反应式编程(英語:Reactive programming)是一种面向数据串流和变化传播的声明式编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
实例
编辑例如,在命令式编程环境中, 表示将表达式的结果赋给 ,而之后改变 或 的值不会影响 。但在响应式编程中, 的值会随着 或 的更新而更新。电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化 。
另一个例子是硬件描述语言,比如Verilog,这里响应式编程可以对电路中传播的信号变化进行建模。
响应式编程最初是为了简化交互式用户界面的创建和实时系统动画的绘制而提出来的一种方法,但它本质上是一种通用的编程范式。
范型
编辑响应式编程范型基于Edward A. Lee和David G. Messerschmitt在1987年提出的同步数据流程编程范型[2],但是放松了实时限制。响应式编程范型介入了表示连续时变值的行为(behaviour),和表示离散值的事件。
概念
编辑外显性的程度
编辑响应式编程语言包括从显式的使用箭头来表示数据流,到隐式的通过语言类似命令式或者函数式的语言架构衍生而来的数据流。例如,在隐式的函数式响应式编程中,一个函数调用可能隐式的导致一个节点在数据流图中被创建出来。动态语言的响应式编程库(例如Lisp的“Cells”和Python的“Trellis”等)可以在运行时通过对函数执行数值读取的过程进行分析,构建出依赖图,使得数据流不仅隐式,而且动态。
响应式编程的说法有时候会被用在软件工程的架构分层中,这是数据流图中所谓的节点只是能够互相通信的普通程序。
参见
编辑引用
编辑- ^ Trellis, Model-view-controller and the observer pattern, Tele community, [2020-05-02], (原始内容存档于2016-03-03).
- ^ Synchronous Data Flow. [2021-02-15]. (原始内容存档于2020-08-04).
外部链接
编辑- A survey on reactive programming (页面存档备份,存于互联网档案馆) A paper by E. Bainomugisha, A. Lombide Carreton, T. Van Cutsem, S. Mostinckx, and W. De Meuter that surveys and provides a taxonomy of existing reactive programming approaches.
- MIMOSA Project of INRIA - ENSMP(页面存档备份,存于互联网档案馆), a general site about reactive programming.