5 个不稳定版本

使用旧的 Rust 2015

0.2.1 2015 年 10 月 26 日
0.2.0 2015 年 10 月 24 日
0.1.1 2015 年 10 月 23 日
0.1.0 2015 年 10 月 23 日
0.0.1 2015 年 10 月 21 日

#718 in 并发

MIT 许可证

23KB
379

nemo 构建状态 Crates.io

文档

Nemo 是一个专注于异步网络接口的 Rust 语言 会话类型 库。会话类型将协议嵌入到类型系统中,使得其实施 必须 正确,否则代码将无法编译。所谓的“正确”是指没有任何客户端会不同意另一个客户端的期望或状态。会话类型可以用来确保在网络中只能按特定顺序发送某些消息。会话类型可以嵌入更复杂的逻辑来处理涉及嵌套或递归状态变化的协议。

nemo 是如何工作的?

session_types 包是 nemo 大部分灵感的来源。为了支持异步通道和通用 IO 后端,它被设计得不同,以便您可以 延迟 通道的处理程序到未来某个时间——比如在网络发生其他事件时,或者当继续工作方便时。如果您从不延迟,则没有任何运行时成本,而如果您延迟,运行时成本仅为 一层 指示,无需代码内联。这种变化不仅允许异步 IO 原语,而且消除了对最终用户代码的限制和要求。

Nemo 提供了一个 IO trait 来实现后端。例如,nemo 提供 nemo::channels::Blocking,它使用双向 MPSC 抽象作为线程之间安全通信的后备。

使用 nemo 构建网络协议的优势

  • 在某些情况下可以减少或消除消息标记
  • 可以通过不会引起安全问题或竞态条件/意外行为的方式描述和实现复杂的协议
  • 可以在任何时候交换 IO 后端,或者为模拟目的包装

没有运行时依赖