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

2022-11-28 16:26:29 浏览数 (1)

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

0 人点赞