gpt4 book ai didi

language-agnostic - "lazy evaluation"和 "reactive programming"

转载 作者:行者123 更新时间:2023-12-04 07:41:41 24 4
gpt4 key购买 nike

有人可以通过示例演示惰性求值与响应式(Reactive)编程有何不同。或者,它们是否非常相似?


鉴于 c = 3; 这两种方法似乎都涉及实现 b = c + 2; 至少在内部,无论代码看起来如何 int b () {返回 c + 2;}。在这两种情况下,直到需要它的值才知道 b 是什么,然后进行计算。

描述这种方法的名称是什么?


那么响应式(Reactive)编程使用或模拟惰性求值?具有惰性求值的语言是以 react 方式编程的吗?

最佳答案

您似乎将惰性求值和响应式(Reactive)编程混淆为处于同一“逻辑级别”。

对我来说,惰性求值是一种允许无限数据存在和操作的语言工具。 (具有某种“有限结构”的数据,但在某种意义上是无限的,因为您可以随心所欲地完成并且仍然有一些剩余。)如果您稍微挠一下头并尝试一些示例,您会看到在存在无限数据结构的情况下进行惰性求值是很好的,因为在使用这些值时不会“永远循环”。 (虽然惰性评估还有其他用途,但有时肯定会有一些性能提升。)

维基百科定义响应式(Reactive)编程:

In computing, reactive programming is a programming paradigm oriented around data flows and the propagation of change. This means that it should be possible to express static or dynamic data flows with ease in the programming languages used, and that the underlying execution model will automatically propagate changes through the data flow.

对我来说,这根本不适合懒惰的评估。懒惰的评估只是意味着你只计算你需要做更多工作的答案,然后保留一个持有者(通常称为“thunk”),让你在需要时做更多的工作,这样你就可以计算更多答案。 (顺便说一句,这种“尽可能多地”实现的能力正是让您可以使用惰性求值来处理无限数据的原因。)

相比之下,响应式(Reactive)编程允许您定义 --- 简洁 --- 数据流将如何传播。 (例如,响应式框架可以让您设置您提供的示例而无需显式地使用回调和函数指针来实现它。)但实际上,这条线非常模糊。命令式语言中肯定有响应式框架:大多数人会称 GUI 框架为响应式。

相比之下,在 functional reactive programming(FRP) ,您以声明方式指定 react 数据。这是使用 Haskell 语言的惰性“在幕后”实现的(在这种特殊情况下),因为这是最适合进行更新的方法(因为它最直接符合该范式)。

但是在像 C 或 C++ 这样的语言中,您通常通过函数指针或回调进行响应式(Reactive)编程,而没有明确的惰性求值概念。当然,在支持这种东西时可能会有一些惰性,但你并没有真正处于正确的语义级别来做出这种区分,在这种情况下,你通常可以使用惰性“技巧”来加速响应式(Reactive)框架(表面上会更新一些东西 --- 比如说 GUI --- 随着用户使用它的更多部分而按需更新)。

关于language-agnostic - "lazy evaluation"和 "reactive programming",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com