GitHub - rosefromthedead/effing-mad: Rust 的代数效应

主要观点:

  • effing-mad是一个为 Rust 设计的效果库,能解决函数着色问题等,是将代数效果和效果处理程序引入 Rust 的实验。
  • 效果函数可明确暂停并将控制权交回调用者,数据可在转换中传递且类型强类型化,通过效果处理程序执行动作并返回结果。
  • 此库的 upside-down 调用函数方式有诸多优势,不同调用者可对同一效果函数使用不同处理程序。
  • 作者看到关于使函数可在异步和同步上下文中使用的帖子,因对其未构建效果系统感到惊讶而创建了此库。
  • effing-mad有很多很酷的特性,如不稳定编译器特性、大量类型参数、#![no_std]、范畴论相关内容、宏等。
  • 在纯函数式语言中用单子编码副作用较复杂,而代数效果更易理解和组合。
  • effing-mad使用协程,其实现因编译器需要而被发明,虽未稳定但可在 nightly 编译器中使用。

关键信息:

  • 提供 traits 和宏以类似 Rust 现有async函数的风格编写有效果的代码。
  • 示例在examples/目录,先看“basic”示例。
  • 2022 年市场分析显示除 core 外其他库没有这么多酷特性。
  • 纯函数式语言中用单子编码副作用复杂,代数效果更优。
  • 编译器已使用协程但直接使用未稳定,需 nightly 编译器使用effing-mad

重要细节:

  • 效果函数可通过yield暂停执行。
  • 不同调用者可对同一效果函数使用不同处理程序,如从常规函数或异步函数中调用进行 I/O 操作。
  • 作者因对帖子中未构建效果系统感到惊讶而创建此库。
  • effing-mad的特性包括不稳定编译器特性、大量类型参数等。
  • 协程由编译器发明,虽未稳定但使effing-mad的实现更易。
阅读 15
0 条评论