主要观点:
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
的实现更易。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。