前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust日报】2023-02-01 将递归重写为迭代

【Rust日报】2023-02-01 将递归重写为迭代

作者头像
MikeLoveRust
发布2023-02-15 20:47:13
4770
发布2023-02-15 20:47:13
举报

blaze - Rust 的 OpenCL 库

Rust 编写的 OpenCL 库,终于发布了 v0.1.0 版本。

ReadMore: https://github.com/Aandreba/blaze

将递归重写为迭代

Church-Turing理论的一个结果是,迭代和递归是等价的。这意味着你总是可以把一段使用迭代的代码改写成使用递归的代码,而不改变代码本身的行为,反之亦然。

ReadMore:https://azdavis.net/posts/unrecur/

Aper - 一个用于使用状态机进行数据同步的Rust库

Aper是一个用于使用状态机进行数据同步的Rust库。Aper提供了用状态机表示普通数据结构的机制,以及一个与传输无关的协议,用于保持状态机的多个实例在网络上的同步。

用例包括对共享状态进行操作的实时多人应用程序、希望逐步和双向共享状态更新的客户端-服务器应用程序,以及多人回合制游戏。

例子

代码语言:javascript
复制
use aper::{StateMachine, NeverConflict};
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize, Clone, Debug, Default)]
struct Counter { value: i64 }

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
enum CounterTransition {
    Reset,
    Increment(i64),
    Decrement(i64),
}

impl StateMachine for Counter {
    type Transition = CounterTransition;
    type Conflict = NeverConflict;

    fn apply(&self, event: &CounterTransition) -> Result<Counter, NeverConflict> {
        match event {
            CounterTransition::Reset => Ok(Counter {value: 0}),
            CounterTransition::Increment(amount) => Ok(Counter {value: self.value + amount}),
            CounterTransition::Decrement(amount) => Ok(Counter {value: self.value - amount}),
        }
    }
}

ReadMore:https://github.com/drifting-in-space/aper

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • blaze - Rust 的 OpenCL 库
  • 将递归重写为迭代
  • Aper - 一个用于使用状态机进行数据同步的Rust库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档