快捷搜索:

您的位置:澳门新葡4473网站 > 澳门新葡4473网站 > 新贵 Rust — 贪吃蛇(1)

新贵 Rust — 贪吃蛇(1)

发布时间:2020-04-06 16:23编辑:澳门新葡4473网站浏览(124)

    Rust 1.37.0 stable 有什么?

    Rust 1.37.0 的亮点包含通过品种外号援用枚举变量、内置 cargo vendor、对宏使用未命名的 const、配置文件引导的优化、Cargo 中的 default-run 和枚举上的 #[repr(align(N))] 。

    经过品种外号引用枚举变量

    在 Rust 1.37.0,能够通过品种别称援用枚举变量。举例:

    type ByteOption = Option<u8>;
    
    fn increment_or_zero(x: ByteOption) -> u8 {
        match x {
            ByteOption::Some(y) => y + 1,
            ByteOption::None => 0,
        }
    }
    

    澳门新葡4473网站 1澳门新葡4473网站 2要实现它,Self 当做类型别称。在 Rust 1.37.0 中,还足以应用 Self : Variable 引用枚举变量:

    impl Coin {
        fn value_in_cents(&self) -> u8 {
            match self {
                Self::Penny => 1,
                Self::Nickel => 5,
                Self::Dime => 10,
                Self::Quarter => 25,
            }
        }
    }
    

    澳门新葡4473网站 3澳门新葡4473网站 4更方便地说,Rust 未来允许通过“type-relative resolution”来引用枚举变量,<MyType<..>>::Variant。

    放置 cargo 帮忙独立正视关系

    cargo vendor 命令集成到 Cargo,该命令获取项指标持有正视项,将它们解压缩到 vendor/ 目录中,并出示了在营造进度中使用布满式代码所需的配置部分。

    cargo vendor 已经在临蓐中动用过很二种场地:Rust 编写翻译器 rustc 使用它在发行版 tarball 中传送它的具备信任项,而有所 Monorepos 的花色应用它在源代码管理中付出正视项的代码。

    对宏使用未命名的 const

    这段日子得以成立未命名的 const。相比较给常量叁个显式的名称,只需将其命名叫 _ 。举例,在 rustc 编写翻译器中:

    /// Type size assertion where the first parameter
    /// is a type and the second is the expected size.
    #[macro_export]
    macro_rules! static_assert_size {
        ($ty:ty, $size:expr) => {
            const _: [(); $size] = [(); ::std::mem::size_of::<$ty>()];
            //    ^ Note the underscore here.
        }
    }
    
    static_assert_size!(Option<Box<String>>, 8); // 1.
    static_assert_size!(usize, 8); // 2.
    

    澳门新葡4473网站 5澳门新葡4473网站 6瞩目第三个static_assert_size澳门新葡4473网站,!(..卡塔尔(قطر‎:由于使用了未命名的常量,能够在不命名冲突的情事下定义新项。从前,需求编制static_assert_size!(MY_DUMMY_IDENTIFIE牧马人, usize, 8卡塔尔;。在 Rust 1.37.0,能够更易于地为静态深入分析目标创建人机工程学和可选用的证明性和进度宏。

    安插文件辅导的优化(Profile-Guided Optimization

    rustc 编写翻译器今后透过 -C profile-generate 和 -C profile-use 标记提供了对配备文件教导优化(PGO卡塔尔(قطر‎的支撑。

    Profile-Guided Optimization 允许编写翻译器依照来自实际工作负荷的陈说优化代码。它的劳作方法是编写翻译程序,在五个步骤中打开优化:

    1. 率先,程序是用编写翻译器插入的工具营造的。那是因而将 -C profile-generate 标记传递给 rustc 来造成的。然后,必要在示范数据上运营检查评定程序,并将剖析数据写入文件
    2. 后来,重新营造程序,这一回接受 -C profile-use 标识将收罗到的分析数据报告回 rustc。此创设将运用搜罗到的多少,使编写翻译器能够对代码放置、内联和其它优化做出更加好的垄断(monopolyState of Qatar

    在 Cargo 项目中甄选私下认可二进制文件

    cargo run 对于迅快速检验试 CLI 应用程序是足以的,当多个二进制文件出今后同一个包中时,必须选择 --bin 标记显式表明要运维的二进制文件的称呼。那使得 cargo run 不像大家想要的那么适合人机工程学,特别是当二个二进制文件比别的的更频繁地被调用时。

    Rust 1.37.0 通过加多 default-run 来减轻那么些难题,那是 Cargo.toml 中的八个新键,当那么些键在 [Package] 部分中宣称时,若无传递 --bin 标记,cargo run 将默以为所选的二进制文件。

    枚举上的 #[repr(align(N))]

    #[repr(align(N))] 属性可用以提升类型定义的对齐性。在此之前,该属性仅允许在 struct 和 union 中动用。在 Rust 1.37.0,该属性未来也得以用来枚举定义。比方,如下类型 Align16 将如预期的那么,报告 16 为对齐,而不行使 #[repr(align(16))] 的对齐将为 4:

    #[repr(align(16))]
    enum Align16 {
        Foo { foo: u32 },
        Bar { bar: u32 },
    }
    

    澳门新葡4473网站 7澳门新葡4473网站 8在枚举上运用 #[repr(align(N))] 的语义与利用该对齐定义包装器布局体 AlignN<T> 相像 ,然后利用 AlignN<MyEnum>:

    #[repr(align(N))]
    struct AlignN<T>(T);
    

    澳门新葡4473网站 9澳门新葡4473网站 10在 Rust 1.37.0 中,有局地标准库稳固化:

    • BufReader::buffer 和 BufWriter::buffer
    • Cell::from_mut
    • Cell::as_slice_of_cells
    • DoubleEndedIterator::nth_back
    • Option::xor
    • [{i,u}{8,16,32,64,128,size}::reverse_bits] 和 Wrapping::reverse_bits
    • slice::copy_within

    得到 Rust 1.37.0 方式如下:

    $ rustup update stable
    

    澳门新葡4473网站 11澳门新葡4473网站 12要么访谈官方网站获取:

    详情见透露表达

    (文/开源中夏族民共和国卡塔尔(قطر‎    

    澳门新葡4473网站 13澳门新葡4473网站 14澳门新葡4473网站 15澳门新葡4473网站 16

    前天开班用 Rust 写二个小游戏,我们莫不都玩过—贪吃蛇,后日就写个贪吃蛇 snake。首先成立一个门类 snake : cargo new snake --bin

    澳门新葡4473网站 17

    项目中 Cargo.toml 文件中,加多重视 rand 和 piston_window。看名字就知道二个变迁随机数,三个是在窗口中画像素的。

    澳门新葡4473网站 18

    在顶峰输入 cargo update 命令。

    澳门新葡4473网站 19

    大家依据 Cargo.lock 中依赖的版本号,修正 cargo.toml 的注重性版本

    澳门新葡4473网站 20

    使用 cargo build 命令,

    在 main.rs 中,引入 rand 和 piston_window 依赖

    澳门新葡4473网站 21澳门新葡4473网站 22

    在 src 文件夹下新建 draw.rs 文件,然后引进所急需艺术和项目,引入rectangle, Context(上下文对象,也正是窗口提供形式), G2d,下图中有八个bug, 是 rectangle 实际不是 rectagle

    澳门新葡4473网站 23

    定义 BLOCK_SIZE 块的大小 25,然后创设三个坐标调换的点子,将游乐坐标映射到显示器上的坐标。

    澳门新葡4473网站 24

    始建个画块的措施 draw_block 方法,这一个用于在荧屏上画二个小星型。

    澳门新葡4473网站 25

    创造叁个画矩形方法,这里我们供给传入起源坐标,以至矩形的长短和幅度,来画多少个矩形。那几个图中也许有一个bug,是 width 实际不是 height;

    澳门新葡4473网站 26

    创立二个 snake.rs ,然后引进以下信任。

    澳门新葡4473网站 27

    作者们在 main.rs 文件中定义 draw 模块,便得以在 snake.rs 文件中引进 draw 模块的 draw_block 那个措施。

    澳门新葡4473网站 28

    SNAKE_COLOTucson 定义颜色,而且创办 Direction 枚举,包涵上下左右八个变量。

    澳门新葡4473网站 29

    本文由澳门新葡4473网站发布于澳门新葡4473网站,转载请注明出处:新贵 Rust — 贪吃蛇(1)

    关键词: