#goto #control-flow #macro

forward_goto

将goto语句引入Rust的包

2个版本

0.1.1 2020年6月6日
0.1.0 2020年6月4日

过程宏中排名1023

MIT许可证

24KB
438

Build Creates.io Docs

forward_goto

此包提供了一种安全、可靠的方式,可以从控制流中的goto语句跳转到指定的标签。

use forward_goto::rewrite_forward_goto;

#[rewrite_forward_goto]
fn decode_msg(luck: impl Fn() -> bool, is_alan_turing: bool) {
    if is_alan_turing {
        forward_goto!('turing_complete);
    }

    println!("You'll need a lot of luck for this");
    
    if luck() {
        println!("Seems you were lucky");

        forward_label!('turing_complete);

        println!("Message decoded!");
    } else {
        println!("No luck today...");
    }
}

你应该使用它吗?

可能不需要!


lib.rs:

此包提供了一种安全、可靠的方式,可以从控制流中的goto语句跳转到指定的标签。

Rust没有goto机制,无法在控制流中任意跳转。

此包提供了一个过程宏,允许编写可以跳转到控制流中指定标签的goto语句。

跳转在借用检查方面是安全的,但有一些限制。有关更多信息,请参阅rewrite_forward_goto

use forward_goto::rewrite_forward_goto;

#[rewrite_forward_goto]
fn decode_msg(luck: impl Fn() -> bool, is_alan_turing: bool) {
    if is_alan_turing {
        forward_goto!('turing_complete);
    }

    println!("You'll need a lot of luck for this");
    
    if luck() {
        println!("Seems you were lucky");

        forward_label!('turing_complete);

        println!("Message decoded!");
    } else {
        println!("No luck today...");
    }
}

依赖项

~1.5MB
~35K SLoC