函数式反应式编程语言规范

2024-01-17

我正在考虑在某个时候创建​​一个功能性反应框架。我已经阅读了很多相关内容并看到了一些示例,但我想清楚地了解这个框架必须做什么才能被视为 FRP 扩展/dsl。我并不真正关心实施问题或细节等,但更关心完美世界情况下需要什么。

理想的函数式反应式编程语言的关键操作和品质是什么?


我很高兴您首先询问规范而不是实现。 关于玻璃钢是什么,有很多想法。 从 20 世纪 90 年代初开始(当时我在 Sun Microsystems 和 Microsoft Research 从事交互式图形工作),它一直涉及两个属性(a)外延性和(b)时间连续性。 许多人放弃了这两个特性,并用各种不同的特性来识别 FRP。执行在我看来,所有这些都不是重点。 为了减少混淆,我希望看到术语“函数式反应式编程”被更准确和描述性的“指示性连续时间编程”(DCTP)所取代,正如杰克·麦克阿瑟(Jake McArthur)在去年的一次谈话 http://tunes.org/%7Enef/logs/haskell/10.05.17.

我所说的“指示性”是指建立在精确、简单、独立于实现的组合语义的基础上,它准确地指定了每种类型和构建块的含义。 然后,语义的组合性质决定了构建块的所有类型正确组合的含义。 为我,外延的是函数式编程的核心和本质,它能够实现精确且易于处理的推理,从而为正确性、推导和优化奠定了基础。 Peter Landin 建议使用“指示性”作为模糊术语“函数式”的实质性替代,并且是一种将深度/真正的函数式编程与仅仅看起来函数式的符号区分开来的方法。 看这条评论 http://conal.net/blog/posts/is-haskell-a-purely-functional-language/#comment-35882一些 Landin 引言和论文参考。

关于连续时间,见帖子为什么要使用连续时间进行编程? http://conal.net/blog/posts/why-program-with-continuous-time/以及我在本页 AshleyF 的回答中引用的内容。 当我听到这样的说法时,我一次又一次地感到惊讶连续的考虑到计算机的离散性质,时间在某种程度上是不自然的或不可能实现的。 这种思路让我觉得很奇怪,尤其是来自 Haskellers,原因如下:

  • Using lazy函数式语言,我们随意编程infinite数据关于finite机器。结果,我们得到了可爱的模块化,正如约翰休斯的经典论文所示为什么函数式编程很重要 http://www.cse.chalmers.se/%7Erjmh/Papers/whyfp.html.
  • 在连续空间中编程的例子有很多,例如矢量图形,但也有类似的东西Pan http://conal.net/Pan.
  • 我喜欢我的程序反映我如何看待问题空间而不是执行程序的机器,并且我倾向于期望其他高级语言程序员也有这种偏好。 (“当程序需要关注不相关的内容时,编程语言就是低级的。”——Alan Perlis)

从那时起我就一直在制作用于连续编程的库TBAG http://conal.net/tbag/ and 主动VRML http://conal.net/papers/ActiveVRML/(第一个 DCTP/FRP 系统)及以后Fran http://conal.net/Fran。 正确实施很容易。 论文中描述了几种不同的方法连续建模动画的功能实现 http://conal.net/papers/plilpalp98/。 实施连续时间有效率的(而且仍然正确!)是另一回事,尤其是避免重新计算不变的值。 (参见论文推拉函数反应式编程 http://conal.net/papers/push-pull-frp/.)

相关备注请参见我的回答反应式编程和函数式反应式编程之间的区别 https://stackoverflow.com/questions/5385377/the-difference-between-reactive-and-functional-reactive-programming/5386908#5386908 and to 什么是(函数式)反应式编程? https://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming/1030631#1030631 Update:有关连续时间为何如此重要的更多信息,请参阅这些笔记 https://github.com/conal/talk-2014-bayhac-denotational-design. Update:另请参阅我 2015 年的演讲玻璃钢的本质和起源 https://github.com/conal/talk-2015-essence-and-origins-of-frp(以及那里链接的相关会谈)。

祝您探索顺利,如果您有任何疑问,请告诉我。 我的联系信息已开启我的主页 http://conal.net.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数式反应式编程语言规范 的相关文章

  • 为什么类型系统拒绝我看似有效的程序?

    注意这个程序 class Convert a b where convert a gt b data A A deriving Show data B B deriving Show data C C deriving Show data
  • 任何遍历嵌套字典的函数式编程方法?

    我正在尝试找到更好的方法来实现这一点 d a b c 4 l a b c for x in l d d x print d 4 我正在学习函数式编程 所以我只是尝试随机出现的例子 Use reduce http docs python or
  • 无意中使用 = 而不是 ==

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 看起来 if x y 代替 if x y 是许多罪恶的根源 为什么不all编译器将其标记
  • Erlang 参与者与 OOP 对象有何不同?

    假设我有一个 Erlang actor 定义如下 counter Num gt receive From increment gt From self new value Num 1 counter Num 1 end 同样 我有一个 Ru
  • 如何获取数组中每个数字的阶乘值?

    我试图使用此方法获取数组中每个项目的阶乘值 但这仅输出一个值 任何人都可以帮助我找出我做错的地方吗 function mathh arr fn for i 1 i lt sizeof arr i arr2 arr2 i fn arr i r
  • Kotlin 的不同类型的 reduce() 函数

    我正在查看数组扩展函数并发现reduce one inline fun
  • 左/右旋转进位的实际用途

    循环左进位和循环右进位指令有哪些实际用途 在我的汇编课上 我们无法想出一个有用的好例子 如果要将位从一个操作数移出并移入另一个操作数 SHL EAX 1 move sign bit of EAX RCL EDX into LSB of ED
  • 如何根据列表中的先前值过滤Haskell中的列表元素?

    我正在努力在 Haskell 中创建一个函数 该函数根据列表中前一个元素的条件过滤列表的数字 Example 前一个数字是 2 的倍数 myFunction 1 2 5 6 3 expected output 5 3 我知道如何申请filt
  • 标记对话(或采访)的最语义方式?

    我试图找出最语义化的方式来标记这样的东西 John blah blah Paul blah blah George blah blah Ringo blah blah or John blah blah Paul blah blah Geo
  • 静态/动态类型与静态/动态绑定

    大家这4个术语有什么区别 能举个例子吗 Static and dynamic是指解决某些编程元素的时间点的行话 Static表示解析是在程序构建时发生的 Dynamic表示解析是在程序运行时发生的 静态和动态打字 Typing指由于数据值之
  • 如何使用谷歌趋势查找编程语言流行总体趋势的统计数据

    我喜欢关注趋势浏览器 操作系统 语言等 我发现谷歌趋势是一个非常有用的资源有时但有时我无法获得我想要的信息 与多年来其他主要 Linux 发行版相比 Ubuntu 的增长非常明显 在发布日期附近有 6 个月度峰值 由于非编程相关事件而出现偏
  • 与可变结构相比,不可变结构有哪些优点?

    我已经知道不变性相对于可变性的好处在于能够推理代码并引入更少的错误 尤其是在多线程代码中 不过 在创建结构时 我看不出创建一个完全不可变的结构比创建一个可变的结构有任何好处 让我们以保存一些分数的结构为例 struct ScoreKeepe
  • 纯函数可以异步吗?

    在浏览纯函数的定义时 它通常定义有两个特征 1 给定相同的输入应该产生相同的输出 2 不应产生任何副作用 这是否也意味着纯函数不应该是异步的 如果不是 怎么会这样 如果是的话 我很想看到 JavaScript 中异步纯函数的一些示例 是的
  • 计算 python 字典/数组数据结构的非空尾叶 - 递归算法?

    我正在寻找一个函数来查找一种复杂字典 数组结构的所有非空端点 我认为因为我不知道嵌套数组的数量或它们的位置 所以它必须是递归的 而我只是还没有完全理解这种思维方式 所以对于嵌套字典 x top middle nested value nes
  • const 变量悖论

    如果我有一些关于 C 的表达式 const int x 3 我可以说 x 是一个变量吗 这看起来很奇怪 因为 x 不是变量 因为我无法更改它 提前感谢您的任何解释 Edited附 感谢您的所有回答 我明白根据 C 的定义 我的问题的答案可能
  • 概念数据建模:RDF 是正确的工具吗?其他解决方案?

    我正在规划一个系统 该系统结合了各种数据源 并允许用户对这些数据源进行简单的查询 系统的一部分需要充当抽象层 了解所有连接的数据源 用户不应该 需要 了解底层数据 提供者 数据提供者可以是任何东西 关系 DBMS 错误跟踪系统 气象站 它们
  • “单词的正则表达式”(语义替换)-任何示例语法和库吗?

    我正在寻找在给定过程语言的情况下对单词而不是字符进行正则表达式样式转换的常用技术的语法示例 例如 为了追踪复制 人们可能想要创建一份具有相似含义但具有不同单词选择的文档 我希望能够简洁地定义这些可以应用于文本流的可能的转换 例如 快速地no
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov
  • scala 返回列表中的第一个 Some

    我有一个清单l List T1 目前我正在执行以下操作 myfun T1 gt Option T2 val x Option T2 l map myfun l flatten find gt true The myfun函数返回 None
  • 正确使用术语 Monoid

    从下面的例子来看 我认为这样的说法是正确的String在串联运算下定义了一个幺半群 因为它是关联二元运算 并且String碰巧有一个身份元素 它是一个空字符串 scala gt Jane Doe Jane Doe res0 Boolean

随机推荐

  • 隐藏具有一定时间限制的 div [重复]

    这个问题在这里已经有答案了 可能的重复 如何在一段时间后隐藏div https stackoverflow com questions 2426304 how to hide a div after some time period 我需要
  • NTFS 备用数据流 - 好还是坏主意?

    我想存储一些与应用程序相关的文件元数据 NTFS 备用数据流 AltDS 允许我将此元数据直接存储在文件上 而不是存储在单独的数据库中 我只是觉得这不是一个好主意 我知道这仅适用于 NTFS 但至少如果用户将文件复制 移动到非 NTFS 驱
  • 什么是 ScrimInsetsFrameLayout?

    What is 稀松布插入框架布局 https github com google iosched blob master android src main java com google samples apps iosched ui w
  • 是否可以将角度模板编译为最终的 html 字符串?

    是否可以编译这个 html 模板字符串 p List of products from supplier name p p ref p 直接到 html 字符串 例如 p List of products from Some Supplie
  • 使用ansible从0循环到100

    我想循环从s0 to s60和来自s100 to s100用这个命令 name Network scan at port 22 nom base when inventory hostname in groups exos switch w
  • 检测FLASH插件崩溃

    有没有办法通过javascript检测主要浏览器 firefox ie chrome safari和opera 中的flash插件崩溃 我不确定这是否有效 您可以定期获取 Flash 对象的引用并检查它是否具有 SetVariable 方法
  • IBM Worklight 5.0.5 - 在推送通知上播放自定义声音

    当我使用 WL Server notifyAllDevices userSubscription badge 1 sound notification wav activateButtonLabel ClickMe alert notifi
  • PyQt:app.exec_() 停止运行以下所有代码

    我有一个代码 如下所示 app QApplication sys argv self interface Interface The figure self fig self interface fig self ax self fig a
  • 如何从列表中仅获取特定字段

    我有一个 IEnumerable 的 Lesson 对象 IEnumerable
  • 在 JSON 驱动的 jQuery 数据表中转义标记?

    我正在使用一个jquery数据表 http datatables net 这是使用动态加载一些 JSONsAjaxSource财产 一切都很好 除了加载的内容被视为潜在的标记 因此如果单元格中的文本包含 lt 或类似的东西 在将数据加载到表
  • Html.DropDownList 选定值不起作用(将构造函数与 IEnumerable 一起使用)

    我遇到的问题是所选值不适用于 Html DropDownList 帮助程序方法 见下文 这是我的控制器 public ActionResult Edit int id 0 NewsEvent item GetItem id ViewBag
  • 将 csv 文件导入 Excel 时,文本会转换为数字

    我使用如下方式将 CSV 文件导入到 Excel 2010 电子表格中 Set wb Workbooks Open Filename myFile ReadOnly True Notify False Set ws wb Worksheet
  • Numpy 相邻元素之间的差异

    我有纯Python中相邻元素之间差异的计算算法 a range 1000000 it s numpy array in my case prev a 0 b 0 for i in a 1 b append i prev prev i 有没有
  • 数据表scrollX水平不起作用

    我有以下表格 其中包含 10 多列 我正在使用数据表来显示数据 我使用水平滚动 因为我有很多列 但卷轴没有显示出来 请帮忙 这是我的桌子的屏幕截图 滚动不起作用 https i stack imgur com HBGF9 png table
  • 静态成员函数的模板特化;如何?

    我正在尝试使用模板专业化以不同的方式实现带有 void 句柄的模板函数 以下代码为我提供了 gcc 中的 非命名空间范围内的显式专业化 template
  • XNA 在运行时在 Texture2D 上绘制/绘制

    早安 如果你所在的地方是早上的话 我一直在环顾四周 但没有找到令人满意的方法 所以我想我会四处询问 理想的世界我希望能够生成一个透明的Texture2D对象 将其绘制到屏幕上我希望能够 绘制 它 即当鼠标左键按下时 光标所在的任何像素都应设
  • 在 AngularJS 服务中编写函数

    我想在 angularjs 服务中编写一个函数 并且我想在我的所有服务中重用它 控制器 var mod angular module myapp eventFilters highlight event dayfilter Services
  • 数字在数组中出现的次数

    我在一本 C 书中找到了一个练习 上面写着 编写一个函数来计算一个数字在数组中出现的次数 一切都很好 程序正在运行 但练习还表明该函数应该是递归的 我怎样才能使递归函数像这样工作 include
  • 是否定义了两个 NULL 指针相减的行为?

    如果两个非 void 指针变量都是定义的 根据 C99 和 或 C 98 它们之间的区别是NULL valued 例如 假设我有一个如下所示的缓冲区结构 struct buf char buf char pwrite char pread
  • 函数式反应式编程语言规范

    我正在考虑在某个时候创建 一个功能性反应框架 我已经阅读了很多相关内容并看到了一些示例 但我想清楚地了解这个框架必须做什么才能被视为 FRP 扩展 dsl 我并不真正关心实施问题或细节等 但更关心完美世界情况下需要什么 理想的函数式反应式编