前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust 日报】2022-11-10 Iced 0.5版本发布

【Rust 日报】2022-11-10 Iced 0.5版本发布

作者头像
MikeLoveRust
发布2022-11-28 16:26:29
5960
发布2022-11-28 16:26:29
举报

statig发布,事件驱动系统的分层状态机(使用GAT开发)

大家好! 我很高兴地宣布 statig,一个帮助你编写分层状态机(也称为 HSM 或statecharts)的crate。这些是由《Practical UML Statecharts in C/C++》一书介绍给我的(不要让UML吓到你),从那时起,我就在思考如何在Rust中最好地实现它们。 HSM最重要的优点是它允许你添加超级状态,定义底层状态的共享行为。随着状态机规模的增长,我发现这个功能在控制复杂性和避免状态爆炸方面变得非常有价值。除此之外,HSM还包括一些概念,如进入/退出动作、状态本地存储和共享上下文,这有助于避免代码重复,反过来也使系统更容易维护。 我在设计上经历了多次迭代,最终得出了一个(至少对我来说)感觉干净且易于维护的设计。但当然我带有我的偏见,我很想听听其他人的看法。所以,如果这一切听起来你很感兴趣,请一定要看一下它的代码。

一个简单的闪烁状态机:

代码语言:javascript
复制
#[derive(Default)]
pub struct Blinky {
    led: bool,
}

pub struct Event;

impl StateMachine for Blinky { 
    type State = State;
    
    type Superstate<'a> = Superstate;
    
    type Event = Event;
    
    const INIT_STATE: State = State::off();
}

#[state_machine]
impl Blinky {
    #[state]
    fn on(&mut self, event: &Event) -> Response<State> {
        self.led = false;
        Transition(State::off())
    }

    #[state]
    fn off(&mut self, event: &Event) -> Response<State> {
        self.led = true;
        Transition(State::on())
    }
}

fn main() {
    let mut state_machine = Blinky::default().state_machine().init();

    state_machine.handle(&Event);
}

Github: https://github.com/mdeloof/statig

Iced 0.5版本发布

Iced 0.5版本在今天正式发布了,具体的改动可以看这里:

改动: https://github.com/iced-rs/iced/pull/1520

最后,值得特别一提的是,System76已经决定在Pop!_OS的桌面环境中使用iced而不是GTK🎉。这是该库成立以来最重要的被使用事件之一。System76的工程师们已经为iced做出了很多伟大的改进,同时也在长期存在的问题上取得了突破,这些问题可以使Rust的整个GUI生态系统受益(比如正确的文本渲染!)。

This Week in Rust 468

Rust周报648期

This Week in Rust 468: https://this-week-in-rust.org/blog/2022/11/09/this-week-in-rust-468/

From 日报小组 Cupnfish

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • statig发布,事件驱动系统的分层状态机(使用GAT开发)
  • Iced 0.5版本发布
  • This Week in Rust 468
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档