带有传播器的功能性反应式用户界面 — dthompson

主要观点:

  • 作者对函数响应式编程(FRP)感兴趣约十年,曾做相关实验并创建和放弃过用于游戏的 FRP 库,认识到 FRP 不适合游戏中脚本化动作序列等情况,但在新的安全分布式应用基础设施研究背景下再次思考 FRP。
  • FRP 吸引人之处在于可声明式编写交互程序,能描述时间变化组件间的关系,避免回调地狱,但也有局限性,如通常为非循环图限制了可创建的 UI 类型。
  • 介绍了 React 这一不同的声明式 UI 编程方法,与 FRP 虽都能避免回调地狱但实现方式不同,React 需重新评估组件模板和应用差异算法,可能导致内存和处理时间浪费,而 FRP 侧效应更精确可减少抖动。
  • 引入传播网络(propagators)来解决 FRP 的循环限制问题,Alexey Radul 的相关论文介绍了如何在传播网络基础上实现 FRP,通过细胞(cells)和传播器(propagators)构建网络,可实现逻辑编程等多种功能。
  • 作者基于传播网络实现了 FRP 原型,包括创建反应式标识符(reactive identifier)和短暂值(ephemeral)数据类型,构建原始传播器(primitive propagators)和复合传播器(compound propagators),并实现了反应式 UI 相关的传播器,如同步 DOM 元素属性、双向数据绑定和渲染 DOM 等,最终完成了 RGB/HSV 颜色选择器的实现。
  • 对原型进行了反思,认为结果有前景,需优化如使用case-lambda,创建更美观的领域特定语言,还了解到 Holograph 和 Scoped Propagators 等相关内容,感慨若十年前读到相关论文会节省时间。

关键信息:

  • 2014 年写过关于 FRP 的博客;创建并放弃用于游戏的 FRP 库;现工作于 Spritely Institute 从事下一代安全分布式应用基础设施研究。
  • React 与 FRP 的区别,React 以组件树描述应用,通过模板函数和虚拟 DOM 实现更新,FRP 以非循环图描述程序,通过时间变化值和传播器实现更新。
  • Alexey Radul 2009 年的论文介绍传播网络及如何在其基础上实现 FRP,包括细胞和传播器的数据类型及相关操作。
  • 实现的 FRP 原型中创建反应式标识符和短暂值,构建多种传播器,实现反应式 UI 相关功能,完成颜色选择器实现。
  • 对原型的反思及后续了解到的 Holograph 和 Scoped Propagators 等内容。

重要细节:

  • 作者实现的 FRP 原型用 Scheme 编写,使用 Hoot 编译为 WebAssembly 嵌入博客;传播网络中细胞可积累信息,有默认内容为 nothing,还可处理矛盾信息;传播器可激活创建信息并形成网络,有原始传播器和复合传播器等类型。
  • 颜色选择器实现中定义了 RGB 和 HSV 颜色数据类型及相关转换过程,创建了多种约束传播器,将颜色相关的操作提升为原始反应式传播器,通过分组滑块实现颜色值的同步更新和避免循环。
  • 反思中提到未进行优化,需创建更美观的领域特定语言,还了解到 Holograph 是传播网络的可视化编辑器,Scoped Propagators 是有不同之处的传播系统。
阅读 11
0 条评论