桑树枝煮水有什么功效| 稀奶油是什么| 颠茄片是什么药| 吃什么对脑血管好| 荔枝不能和什么一起吃| 人爱出汗是什么原因| 什么叫奢侈| 检查免疫力都需要化验什么项目| 孩子改姓需要什么手续| 黄热病是什么病| 低血压什么症状| 左眼跳是什么预兆| 北极贝长什么样| 媒婆是什么意思| 什么的毛主席| 耳浴10分钟什么意思| 玟是什么意思| 阑是什么意思| 乙肝五项一五阳性什么意思| 平均血小板体积偏高是什么原因| 梦见一个小男孩是什么意思| 狗狗取什么名字| 水逆什么意思| 女宝胶囊的作用和功效是什么| 荷花什么季节开| 银镯子变黑是什么原因| 燊是什么意思| 牡丹是什么意思| 戌是什么意思| 右肺下叶纤维灶是什么意思| 好吧是什么意思| 嗓子疼喝什么药| 指甲盖有竖纹是什么原因| 前列腺钙化灶是什么意思| 清炖排骨都放什么调料| 腋毛癣用什么药膏| 泻火是什么意思| 世界八大奇迹是什么| 闲鱼转卖什么意思| 脾胃虚弱吃什么中药| 绿意盎然是什么意思| 指甲上的月牙代表什么| 女人小便出血是什么原因| 什么是出轨| 鹌鹑蛋不能和什么一起吃| 喝酒上脸是什么原因| 杜冷丁是什么药| 口腔溃疡白色的是什么| 一什么一| 胃胀气是什么原因| 炒米是什么米做的| 阑尾炎打什么消炎针好| 肝炎吃什么药好| 热得什么| 清酒是什么酒| 属兔什么命| ep是什么意思| 睡眠时间短是什么原因| 一直干呕是什么原因| 什么粉底液最好用| 冲太岁是什么意思| 乳香是什么东西| 想字五行属什么| 什么叫荨麻疹| 惺惺相惜什么意思| 胃口疼是什么原因| 下肢静脉血栓挂什么科| 什么是外心| 什么眼霜去眼袋效果好| 心肌劳损的症状是什么| 非淋菌性尿道炎吃什么药最好| 母胎solo是什么意思| 什么是狐臭| 帕金森病是什么症状| 螳螂代表什么生肖| 它们是指什么| 什么叫有机食品| 鼻窦炎是什么| 槊是什么意思| 手足情深什么意思| 吃什么水果养胃| 月经量多是什么原因导致的| kate是什么意思| 角膜炎滴什么眼药水| 法令纹是什么| 做梦梦见鬼是什么意思| 月牙代表什么意思| 胃酸反流是什么原因| 舍我其谁是什么意思| 邮戳是什么意思| 在什么前面| 上炕是什么意思| 呕吐是什么原因引起的| rarone是什么牌子的手表| 林彪为什么要叛逃| 什么是植物蛋白| 东海龙王叫什么名字| 血稠是什么原因造成的| 什么的神色| 十三香是什么| 睡觉流口水是什么原因| 上火了喝什么降火最快| 月经来了不走是什么原因| 上面日下面立读什么| 什么的小学生| 日益是什么意思| 女人脚浮肿是什么原因| 淀粉样变性是什么病| 高血压吃什么好降压快| 为什么脚臭叫香港脚| 180度是什么角| 羊肉和什么相克| 嘴发麻是什么原因引起的| 脉弦是什么意思和症状| 绿豆汤是什么颜色| 儿童肠系膜淋巴结炎吃什么药| 牛油果核有什么用| 是什么有什么| 男性解脲支原体是什么病| 痱子涂什么药膏好| 爱哭的人是什么性格| 血常规能检查出什么| 泌乳素是什么| 十月二十九是什么星座| 具备是什么意思| 丙肝是什么病| 菠萝蜜不能和什么一起吃| 生化检查能查出什么病| 排骨炖山药有什么功效| 排卵期是指什么时候| 跖疣用什么药膏能治好| 什么是根号| 手代表什么生肖| 孕妇梦见坟墓是什么预兆| 人死了是什么感觉| qrs波代表什么| 什么的鼻子| 水瓶座有什么特点| ng是什么意思| 头皮发红是什么原因| 嘉靖为什么不杀海瑞| 射手座男和什么星座最配| 92年1月属什么生肖| 高潮是什么| 代可可脂是什么| 心脏神经官能症吃什么药| 寿司的米饭是什么米| 纸醉金迷什么意思| 怀孕第一天有什么症状| 细菌性前列腺炎吃什么药| 蝉为什么会叫| 宦官是什么意思| 紧急避孕药对身体有什么伤害| 什么是道德绑架| 南京有什么好玩的景点| 为什么会长口腔溃疡的原因| 职务是什么意思| 超细旦是什么面料| 幽门螺旋杆菌什么症状| 烧心反酸水吃什么药| 世界上最大的鱼是什么鱼| 铄字五行属什么| 晚上口苦是什么原因引起的| 为什么我的眼中常含泪水| 零度是什么意思| 谨记的意思是什么| 什么叫基因突变| 什么人不能喝绿豆汤| 柏拉图式是什么意思| 八面玲珑是什么意思| 胚胎是什么意思| 土地出让和划拨有什么区别| 什么药能治阳痿早泄| 榨精是什么意思| 子嗣是什么意思| 病毒感染发烧吃什么药| 麸子是什么东西| 负利率是什么意思| 结核病是什么病| 什么水果养胃又治胃病| 陈五行属什么| 肾不好有什么症状| 下午14点是什么时辰| 老年人适合吃什么| 金骏眉属于什么茶类| 颈部有肿块挂什么科| 逆钟向转位什么意思| 便秘用什么| 藏毛窦是什么病| 为什么会得人工荨麻疹| pp1是什么意思| 净身出户什么意思| 舌头白苔厚是什么原因| 梦见野猪是什么预兆| 额头上长斑是什么原因造成的| 为什么会一直拉肚子| 肠胃不好喝什么奶粉好| 老蒯是什么意思| 牛奶什么时间喝最佳| 蜂蜜有什么作用与功效| 生日蛋糕上写什么字比较有创意| 生化是什么| 低压高吃什么降压药好| 摘环后需要注意什么| 甲沟炎看什么科| 南瓜吃了有什么好处| 湿疹用什么药膏最有效| 边缘性人格障碍是什么| 魏大勋和李沁什么关系| 做激光近视眼手术有什么危害| 荨麻疹吃什么药效果好| 甲胎蛋白是什么| blossom是什么意思| 什么东西能让皮肤变白| 胃烧心吃什么食物好| 一根长寿眉预示什么| 看病人送什么水果| 12月29号是什么星座| 巨门是什么意思| 五步蛇又叫什么蛇| 万圣节为什么要送糖果| 白泽是什么神兽| 手麻什么原因| 4月3号什么星座| 缱绻旖旎是什么意思| 眼睛长结石是什么原因引起的| 全员加速中什么时候播| 员工体检费计入什么科目| 十一月三号是什么星座| 孕妇肠胃炎能吃什么药| 爱趴着睡觉是什么原因| 星星像什么比喻句| 玫瑰花泡水喝有什么功效| 229什么星座| 什么是属性| 河粉为什么叫河粉| 局级干部是什么级别| 仙人掌能治什么病| 手脚抽筋是什么原因引起的| 两个人背靠背是什么牌子| 左肾小结石是什么意思| 低血压有什么危害| 鸡血藤有什么功效| 尿气味很重是什么原因| 什么是盗汗症状| 鼻子两侧毛孔粗大是什么原因造成的| 低烧可以吃什么药| 牙痛安又叫什么| 印尼用什么货币| 梦见自己杀人了是什么意思| 孕妇拉的屎是黑色的是因为什么| 皮蛋吃了有什么好处和坏处| 意难平什么意思| 11月生日是什么星座| 女人被操是什么感觉| 房产证和土地证有什么区别| 益生菌什么牌子好| 什么牌子的益生菌最好| 肾在什么位置| 02年的马是什么命| 三世诸佛是什么意思| 喝酒前吃什么不会醉| 三顾茅庐的顾是什么意思| 小腿肌肉抽筋是什么原因引起的| 百度Jump to content

山西曲沃:千年扇鼓傩戏祈福迎新春

From Wikipedia, the free encyclopedia
百度 母亲可以获得4个月带薪产假,建更多的日间育儿中心和幼儿园,帮助有孩子的父母取得家庭与工作间的平衡。

In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. With this paradigm, it is possible to express static (e.g., arrays) or dynamic (e.g., event emitters) data streams with ease, and also communicate that an inferred dependency within the associated execution model exists, which facilitates the automatic propagation of the changed data flow.[citation needed]

For example, in an imperative programming setting, a := b + c would mean that a is being assigned the result of b + c at the instant the expression is evaluated, and later, the values of b and c can be changed with no effect on the value of a. On the other hand, in reactive programming, the value of a is automatically updated whenever the values of b or c change, without the program having to explicitly re-state the statement a := b + c to re-assign the value of a.[citation needed]

var b = 1
var c = 2
var a = b + c
b = 10
console.log(a) // 3 (not 12 because "=" is not a reactive assignment operator)

// now imagine you have a special operator "$=" that changes the value of a variable (executes code on the right side of the operator and assigns result to left side variable) not only when explicitly initialized, but also when referenced variables (on the right side of the operator) are changed
var b = 1
var c = 2
var a $= b + c
b = 10
console.log(a) // 12

Another example is a hardware description language such as Verilog, where reactive programming enables changes to be modeled as they propagate through circuits.[citation needed]

Reactive programming has been proposed as a way to simplify the creation of interactive user interfaces and near-real-time system animation.[citation needed]

For example, in a model–view–controller (MVC) architecture, reactive programming can facilitate changes in an underlying model being reflected automatically in an associated view.[1]

Approaches to creating reactive programming languages

[edit]

Several popular approaches are employed in the creation of reactive programming languages. One approach is the specification of dedicated languages that are specific to various domain constraints. Such constraints usually are characterized by real-time, embedded computing or hardware description. Another approach involves the specification of general-purpose languages that include support for reactivity. Other approaches are articulated in the definition, and use of programming libraries, or embedded domain-specific languages, that enable reactivity alongside or on top of the programming language. Specification and use of these different approaches results in language capability trade-offs. In general, the more restricted a language is, the more its associated compilers and analysis tools are able to inform developers (e.g., in performing analysis for whether programs are able to execute in actual real-time). Functional trade-offs in specificity may result in deterioration of the general applicability of a language.

Programming models and semantics

[edit]

A variety of models and semantics govern reactive programming. We can loosely split them along the following dimensions:

  • Synchrony: synchronous versus asynchronous model of time
  • Determinism: deterministic versus non-deterministic evaluation process and results
  • Update process: callback versus dataflow versus actor

Implementation techniques and challenges

[edit]

Essence of implementations

[edit]

Reactive programming language runtimes are represented by a graph that identifies the dependencies among the involved reactive values. In such a graph, nodes represent the act of computing, and edges model dependency relationships. Such a runtime employs said graph, to help it keep track of the various computations, which must be executed anew, once an involved input changes value.

Change propagation algorithms

[edit]

The most common approaches to data propagation are:

  • Pull: The value consumer is in fact proactive, in that it regularly queries the observed source for values and reacts whenever a relevant value is available. This practice of regularly checking for events or value changes is commonly referred to as polling.
  • Push: The value consumer receives a value from the source whenever the value becomes available. These values are self-contained, e.g. they contain all the necessary information, and no further information needs to be queried by the consumer.
  • Push-pull: The value consumer receives a change notification, which is a short description of the change, e.g. "some value changed" – this is the push part. However, the notification does not contain all the necessary information (which means it does not contain the actual values), so the consumer needs to query the source for more information (the specific value) after it receives the notification – this is the pull part. This method is commonly used when there is a large volume of data that the consumers might be potentially interested in. So in order to reduce throughput and latency, only light-weight notifications are sent; and then those consumers which require more information will request that specific information. This approach also has the drawback that the source might be overwhelmed by many requests for additional information after a notification is sent.

What to push?

[edit]

At the implementation level, event reaction consists of the propagation across a graph's information, which characterizes the existence of change. Consequently, computations that are affected by such change then become outdated and must be flagged for re-execution. Such computations are then usually characterized by the transitive closure of the change (i.e. the full set of transitive dependencies a source affects) in its associated source. Change propagation may then lead to an update in the value of the graph's sinks.

Graph propagated information can consist of a node's complete state, i.e., the computation result of the involved node. In such cases, the node's previous output is then ignored. Another method involves delta propagation i.e. incremental change propagation. In this case, information is proliferated along a graph's edges, which consist only of deltas describing how the previous node was changed. This approach is especially important when nodes hold large amounts of state data, which would otherwise be expensive to recompute from scratch.

Delta propagation is essentially an optimization that has been extensively studied via the discipline of incremental computing, whose approach requires runtime satisfaction involving the view-update problem. This problem is infamously characterized by the use of database entities, which are responsible for the maintenance of changing data views.

Another common optimization is employment of unary change accumulation and batch propagation. Such a solution can be faster because it reduces communication among involved nodes. Optimization strategies can then be employed that reason about the nature of the changes contained within, and make alterations accordingly (e.g. two changes in the batch can cancel each other, and thus, simply be ignored). Yet another available approach, is described as invalidity notification propagation. This approach causes nodes with invalid input to pull updates, thus resulting in the update of their own outputs.

There are two principal ways employed in the building of a dependency graph:

  1. The graph of dependencies are maintained implicitly within an event loop. Registration of explicit callbacks then results in the creation of implicit dependencies. Therefore, control inversion, which is induced via callback, is thus left in place. However, making callbacks functional (i.e. returning state value instead of unit value) necessitates that such callbacks become compositional.
  2. A graph of dependencies is program-specific and generated by a programmer. This facilitates an addressing of the callback's control inversion in two ways: either a graph is specified explicitly (typically using a domain-specific language (DSL), which may be embedded), or a graph is implicitly defined with expression and generation using an effective, archetypal language.

Implementation challenges in reactive programming

[edit]

Glitches

[edit]

When propagating changes, it is possible to pick propagation orders such that the value of an expression is not a natural consequence of the source program. We can illustrate this easily with an example. Suppose seconds is a reactive value that changes every second to represent the current time (in seconds). Consider this expression:

t = seconds + 1
g = (t > seconds)

Because t should always be greater than seconds, this expression should always evaluate to a true value. Unfortunately, this can depend on the order of evaluation. When seconds changes, two expressions have to update: seconds + 1 and the conditional. If the first evaluates before the second, then this invariant will hold. If, however, the conditional updates first, using the old value of t and the new value of seconds, then the expression will evaluate to a false value. This is called a glitch.

Some reactive languages are glitch-free and prove this property[citation needed]. This is usually achieved by topologically sorting expressions and updating values in topological order. This can, however, have performance implications, such as delaying the delivery of values (due to the order of propagation). In some cases, therefore, reactive languages permit glitches, and developers must be aware of the possibility that values may temporarily fail to correspond to the program source, and that some expressions may evaluate multiple times (for instance, t > seconds may evaluate twice: once when the new value of seconds arrives, and once more when t updates).

Cyclic dependencies

[edit]

Topological sorting of dependencies depends on the dependency graph being a directed acyclic graph (DAG). In practice, a program may define a dependency graph that has cycles. Usually, reactive programming languages expect such cycles to be "broken" by placing some element along a "back edge" to permit reactive updating to terminate. Typically, languages provide an operator like delay that is used by the update mechanism for this purpose, since a delay implies that what follows must be evaluated in the "next time step" (allowing the current evaluation to terminate).

Interaction with mutable state

[edit]

Reactive languages typically assume that their expressions are purely functional. This allows an update mechanism to choose different orders in which to perform updates, and leave the specific order unspecified (thereby enabling optimizations). When a reactive language is embedded in a programming language with state, however, it may be possible for programmers to perform mutable operations. How to make this interaction smooth remains an open problem.

In some cases, it is possible to have principled partial solutions. Two such solutions include:

  • A language might offer a notion of a "mutable cell". A mutable cell is one that the reactive update system is aware of, so that changes made to the cell propagate to the rest of the reactive program. This enables the non-reactive part of the program to perform a traditional mutation while enabling reactive code to be aware of and respond to this update, thus maintaining the consistency of the relationship between values in the program. An example of a reactive language that provides such a cell is FrTime.[2]
  • Properly encapsulated object-oriented libraries offer an encapsulated notion of state. In principle, it is therefore possible for such a library to interact smoothly with the reactive portion of a language. For instance, callbacks can be installed in the getters of the object-oriented library to notify the reactive update engine about state changes, and changes in the reactive component can be pushed to the object-oriented library through getters. FrTime employs such a strategy.[3]

Dynamic updating of the graph of dependencies

[edit]

In some reactive languages, the graph of dependencies is static, i.e., the graph is fixed throughout the program's execution. In other languages, the graph can be dynamic, i.e., it can change as the program executes. For a simple example, consider this illustrative example (where seconds is a reactive value):

t =
  if ((seconds mod 2) == 0):
    seconds + 1
  else:
    seconds - 1
  end
t + 1

Every second, the value of this expression changes to a different reactive expression, which t + 1 then depends on. Therefore, the graph of dependencies updates every second.

Permitting dynamic updating of dependencies provides significant expressive power (for instance, dynamic dependencies routinely occur in graphical user interface (GUI) programs). However, the reactive update engine must decide whether to reconstruct expressions each time, or to keep an expression's node constructed but inactive; in the latter case, ensure that they do not participate in the computation when they are not supposed to be active.

Concepts

[edit]

Degrees of explicitness

[edit]

Reactive programming languages can range from very explicit ones where data flows are set up by using arrows, to implicit where the data flows are derived from language constructs that look similar to those of imperative or functional programming. For example, in an implicitly lifted functional reactive programming (FRP), a function call might implicitly cause a node in a data flow graph to be constructed. Reactive programming libraries for dynamic languages (such as the Lisp "Cells" and Python "Trellis" libraries) can construct a dependency graph from runtime analysis of the values read during a function's execution, allowing data flow specifications to be both implicit and dynamic.

Sometimes the term reactive programming refers to the architectural level of software engineering, where individual nodes in the data flow graph are ordinary programs that communicate with each other.

Static or dynamic

[edit]

Reactive programming can be purely static where the data flows are set up statically, or be dynamic where the data flows can change during the execution of a program.

The use of data switches in the data flow graph could to some extent make a static data flow graph appear as dynamic, and blur the distinction slightly. True dynamic reactive programming however could use imperative programming to reconstruct the data flow graph.

Higher-order reactive programming

[edit]

Reactive programming could be said to be of higher order if it supports the idea that data flows could be used to construct other data flows. That is, the resulting value out of a data flow is another data flow graph that is executed using the same evaluation model as the first.

Data flow differentiation

[edit]

Ideally all data changes are propagated instantly, but this cannot be assured in practice. Instead, it might be necessary to give different parts of the data flow graph different evaluation priorities. This can be called differentiated reactive programming.[citation needed]

For example, in a word processor, the marking of spelling errors need not be totally in sync with the inserting of characters. Here differentiated reactive programming could potentially be used to give the spell checker lower priority, allowing it to be delayed while keeping other data-flows instantaneous.

However, such differentiation introduces additional design complexity. For example, deciding how to define the different data flow areas, and how to handle event passing between different data flow areas.

Evaluation models of reactive programming

[edit]

Evaluation of reactive programs is not necessarily based on how stack-based programming languages are evaluated. Instead, when some data is changed, the change is propagated to all data that is derived partially or completely from the data that was changed. This change propagation could be achieved in a number of ways, where perhaps the most natural way is an invalidate/lazy-revalidate scheme.

It could be problematic simply to naively propagate a change using a stack, because of potential exponential update complexity if the data structure has a certain shape. One such shape can be described as "repeated diamonds shape", and has the following structure: An→Bn→An+1, An→Cn→An+1, where n=1,2... This problem could be overcome by propagating invalidation only when some data is not already invalidated, and later re-validate the data when needed using lazy evaluation.

One inherent problem for reactive programming is that most computations that would be evaluated and forgotten in a normal programming language, needs to be represented in the memory as data-structures.[citation needed] This could potentially make reactive programming highly memory consuming. However, research on what is called lowering could potentially overcome this problem.[4]

On the other side, reactive programming is a form of what could be described as "explicit parallelism"[citation needed], and could therefore be beneficial for utilizing the power of parallel hardware.

Similarities with observer pattern

[edit]

Reactive programming has principal similarities with the observer pattern commonly used in object-oriented programming. However, integrating the data flow concepts into the programming language would make it easier to express them and could therefore increase the granularity of the data flow graph. For example, the observer pattern commonly describes data-flows between whole objects/classes, whereas object-oriented reactive programming could target the members of objects/classes.

Approaches

[edit]

Imperative

[edit]

It is possible to fuse reactive programming with ordinary imperative programming. In such a paradigm, imperative programs operate upon reactive data structures.[5] Such a set-up is analogous to imperative constraint programming; however, while imperative constraint programming manages bidirectional data-flow constraints, imperative reactive programming manages one-way data-flow constraints. One reference implementation is the proposed Quantum runtime extension to JavaScript .

Object-oriented

[edit]

Object-oriented reactive programming (OORP) is a combination of object-oriented programming and reactive programming. Perhaps the most natural way to make such a combination is as follows: instead of methods and fields, objects have reactions that automatically re-evaluate when the other reactions they depend on have been modified.[citation needed]

If an OORP language maintains its imperative methods, it would also fall under the category of imperative reactive programming.

Functional

[edit]

Functional reactive programming (FRP) is a programming paradigm for reactive programming on functional programming.

Actor based

[edit]

Actors have been proposed to design reactive systems, often in combination with Functional reactive programming (FRP) and Reactive Streams to develop distributed reactive systems.[6][7][8][9]

Rule based

[edit]

A relatively new category of programming languages uses constraints (rules) as main programming concept. It consists of reactions to events, which keep all constraints satisfied. Not only does this facilitate event-based reactions, but it makes reactive programs instrumental to the correctness of software. An example of a rule based reactive programming language is Ampersand, which is founded in relation algebra.[10]

Implementations

[edit]
  • ReactiveX, an API for implementing reactive programming with streams, observables and operators with multiple language implementations including RxJs, RxJava, Rx.NET, RxPy and RxSwift.
  • Elm, a reactive composition of web user interfaces.
  • Reactive Streams, a JVM standard for asynchronous stream processing with non-blocking backpressure
  • ObservableComputations, a cross-platform .NET implementation.
  • Svelte, brings reactivity in the form of a variant JavaScript syntax that looks like JavaScript but is naturally reactive where JavaScript normally isn't.
  • Solid.js brings reactivity to JavaScript without changing JavaScript syntax semantics, along with reactive JSX templating.
  • Quantum JS, a runtime extension to JavaScript that brings imperative reactive programming to the language, creating a whole new category in the reactivity spectrum.
  • Rimmel.js, a modern functional-reactive JavaScript UI library designed with RxJS streams in mind.

See also

[edit]

References

[edit]
  1. ^ Trellis, Model-view-controller and the observer pattern, Tele community, archived from the original on 2025-08-07, retrieved 2025-08-07.
  2. ^ "Embedding Dynamic Dataflow in a Call-by-Value Language". cs.brown.edu. Archived from the original on 2025-08-07. Retrieved 2025-08-07.
  3. ^ "Crossing State Lines: Adapting Object-Oriented Frameworks to Functional Reactive Languages". cs.brown.edu. Archived from the original on 2025-08-07. Retrieved 2025-08-07.
  4. ^ Burchett, Kimberley; Cooper, Gregory H; Krishnamurthi, Shriram, "Lowering: a static optimization technique for transparent functional reactivity", Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation (PDF), pp. 71–80, archived (PDF) from the original on 2025-08-07, retrieved 2025-08-07.
  5. ^ Demetrescu, Camil; Finocchi, Irene; Ribichini, Andrea (22 October 2011), "Reactive Imperative Programming with Dataflow Constraints", Proceedings of the 2011 ACM international conference on Object-oriented programming systems languages and applications, Oopsla '11, pp. 407–26, arXiv:1104.2293, doi:10.1145/2048066.2048100, ISBN 9781450309400, S2CID 7285961.
  6. ^ Van den Vonder, Sam; Renaux, Thierry; Oeyen, Bjarno; De Koster, Joeri; De Meuter, Wolfgang (2020), "Tackling the Awkward Squad for Reactive Programming: The Actor-Reactor Model", Leibniz International Proceedings in Informatics (LIPIcs), vol. 166, pp. 19:1–19:29, doi:10.4230/LIPIcs.ECOOP.2020.19, ISBN 9783959771542, S2CID 260445152, archived from the original on 2025-08-07, retrieved 2025-08-07.
  7. ^ Van den Vonder, Sam; Renaux, Thierry; De Meuter, Wolfgang (2022), "Topology-Level Reactivity in Distributed Reactive Programs: Reactive Acquaintance Management using Flocks", The Art, Science, and Engineering of Programming, vol. 6, pp. 14:1–14:36, arXiv:2202.09228, doi:10.22152/programming-journal.org/2022/6/14, archived from the original on 2025-08-07, retrieved 2025-08-07
  8. ^ Shibanai, Kazuhiro; Watanabe, Takuo (2018), "Distributed Functional Reactive Programming on Actor-Based Runtime", Proceedings of the 8th ACM SIGPLAN International Workshop on Programming Based on Actors, Agents, and Decentralized Control, Agere 2018, pp. 13–22, doi:10.1145/3281366.3281370, ISBN 9781450360661, S2CID 53113447, archived from the original on 2025-08-07, retrieved 2025-08-07
  9. ^ Roestenburg, Raymond; Bakker, Rob; Williams, Rob (2016). "13: Streaming". Akka in Action. Greenwich, Connecticut, USA: Manning Publications Co. p. 281. ISBN 978-1-61729-101-2.
  10. ^ Joosten, Stef (2018), "Relation Algebra as programming language using the Ampersand compiler", Journal of Logical and Algebraic Methods in Programming, vol. 100, pp. 113–29, doi:10.1016/j.jlamp.2018.04.002, S2CID 52932824.
[edit]


木全读什么 梦见买豆腐是什么意思 舌头发白吃什么药好 牛仔裙配什么上衣好看 尖嘴猴腮是什么生肖
小狗能吃什么水果 右手手指头麻木是什么病的前兆 腿老是抽筋是什么原因 2026年是什么生肖年 蜜蜂是什么生肖
三七甘一是什么意思 气虚什么症状 押韵什么意思 小腿疼是什么原因 吃什么可降低胆固醇
厉兵秣马是什么意思 隐翅虫长什么样子 倾国倾城是什么生肖 aml是什么病 海纳百川是什么意思
发烧吃什么水果hcv8jop0ns0r.cn 什么叫方差hcv9jop3ns0r.cn 湿疹可以吃什么药hcv9jop0ns9r.cn 老师家访的目的是什么hcv9jop2ns8r.cn 冬虫夏草有什么用hcv8jop8ns4r.cn
pin是什么hcv8jop7ns5r.cn 红领巾的含义是什么hcv8jop0ns2r.cn 两会什么时候开hcv8jop4ns4r.cn 妗子是什么意思hcv8jop6ns1r.cn 黄体功能不足吃什么药hcv8jop5ns8r.cn
木字旁的字与什么有关hcv9jop4ns7r.cn 甲状腺囊肿不能吃什么hanqikai.com 扮猪吃老虎什么意思hcv8jop9ns2r.cn 波罗蜜多什么意思hcv9jop0ns5r.cn 63年的兔是什么命hcv9jop1ns0r.cn
婴儿头发竖起来是什么原因hcv9jop2ns6r.cn 百香果有什么功效与作用hcv8jop8ns9r.cn 白痰多是什么原因造成的hcv7jop5ns1r.cn 地藏王菩萨是管什么的dajiketang.com 牡丹花什么时候开花shenchushe.com
百度