Rust 1.28 发布,系统内存分配器可自由选择

clouddyy
 clouddyy
发布于 2018年08月03日
收藏 2

Rust 1.28 发布了,Rust 是一种专注于安全性、速度和并发性的系统编程语言。

1.28 版本值得关注的几个点是:

  • 分配器可控

  • 改进了格式化的错误消息

  • NonZero 数字类型的稳定性

  • Cargo 特性变更

分配器可控

分配器是 Rust 中的程序在运行时从系统获取内存的方式。之前 Rust 不允许改变获取内存的方式,这会导致一些问题,在某些平台上 Rust 程序的默认分配器是 jemalloc,而在其它平台则是使用系统分配器,而用户对此无法进行选择。在1.28 中 #[global_allocator] 属性现在是稳定的,这允许 Rust 程序将其分配器设置为系统分配器,以及通过实现 GlobalAlloc 特性来定义新的分配器。

用法如下:

use std::alloc::System;

#[global_allocator]
static GLOBAL: System = System;

fn main() {
    let mut v = Vec::new();
    // This will allocate memory using the system allocator.
    v.push(1);
}

    改进了格式化的错误消息

    以下边这个语句为例:

    format!("{_foo}", _foo = 6usize);

    以往,这里发出的错误消息相对简单:

    error: invalid format string: expected `'}'`, found `'_'`
      |
    2 |     format!("{_foo}", _foo = 6usize);
      |             ^^^^^^^^

    现在会发出一个诊断信息,显示格式字符串无效的具体原因:

    error: invalid format string: invalid argument name `_foo`
      |
    2 |     let _ = format!("{_foo}", _foo = 6usize);
      |                       ^^^^ invalid argument name in format string
      |
      = note: argument names cannot start with an underscore

    NonZero 数字类型的稳定性

    除了 GlobalAlloc 特性的稳定性,另一个重要的稳定性是 NonZero 数字类型。这些是标准无符号整数类型的封装:NonZeroU8、NonZeroU16、NonZeroU32、NonZeroU64、NonZeroU128 和 NonZeroUsize。

    这允许进行大小调整,例如 Option <u8> 是 2 个字节,但 Option <NonZeroU8> 只有 1 个字节。需要注意的是,即使 NonZeroU8 包含在另一个结构中,此调整仍然有效。下面的示例说明尽管将 Door 放在 Option 中,但它仍然是 1 字节。

    use std::mem;
    use std::num::NonZeroU8;
    
    struct Key(NonZeroU8);
    
    struct Door {
        key: Key,
    }
    
    fn main() {
        assert_eq!(mem::size_of::<Door>(), 1);
        assert_eq!(mem::size_of::<Option<Door>>(), 1);
    }

    Cargo 特性变更

    Cargo 现在不再允许使用构建脚本发布修改 src 目录的包,应该将包中的 src 目录视为不可变的。

    详情见发布公告与具体更新日志

    下载地址:

    本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
    转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
    本文标题:Rust 1.28 发布,系统内存分配器可自由选择
    加载中

    精彩评论

    htfy96
    htfy96
    "时髦语言不过是暂时裸体而已,等把程序员勾引到手了,最后会把脱掉的衣服一件件穿回去“——Bjarne Stroustrup
    htfy96
    htfy96

    引用来自“神州浪子”的评论

    太繁杂了,rust = c++++

    引用来自“微启宇-日夕”的评论

    说这话估计没被c++虐过
    说这话的估计没被Rust虐过,从0.x开始用的表示Rust的坑也不少多少
    微启宇-日夕
    微启宇-日夕

    引用来自“神州浪子”的评论

    太繁杂了,rust = c++++
    说这话估计没被c++虐过
    神州浪子
    神州浪子
    太繁杂了,rust = c++++

    最新评论(14

    AkataMoKa
    AkataMoKa

    引用来自“神州浪子”的评论

    太繁杂了,rust = c++++

    引用来自“微启宇-日夕”的评论

    说这话估计没被c++虐过

    引用来自“htfy96”的评论

    说这话的估计没被Rust虐过,从0.x开始用的表示Rust的坑也不少多少
    Rust的学习成本确实比较高,特别是从GC的语言转来的(我)。。。。
    htfy96
    htfy96

    引用来自“神州浪子”的评论

    太繁杂了,rust = c++++

    引用来自“微启宇-日夕”的评论

    说这话估计没被c++虐过
    说这话的估计没被Rust虐过,从0.x开始用的表示Rust的坑也不少多少
    clouddyy
    clouddyy

    引用来自“htfy96”的评论

    "时髦语言不过是暂时裸体而已,等把程序员勾引到手了,最后会把脱掉的衣服一件件穿回去“——Bjarne Stroustrup
    优秀!
    htfy96
    htfy96
    "时髦语言不过是暂时裸体而已,等把程序员勾引到手了,最后会把脱掉的衣服一件件穿回去“——Bjarne Stroustrup
    微启宇-日夕
    微启宇-日夕

    引用来自“神州浪子”的评论

    太繁杂了,rust = c++++
    说这话估计没被c++虐过
    神州浪子
    神州浪子
    太繁杂了,rust = c++++
    AkataMoKa
    AkataMoKa

    引用来自“AkataMoKa”的评论

    哇,不错诶!!

    引用来自“clouddyy”的评论

    贵公司用来跑啥?

    引用来自“AkataMoKa”的评论

    个人项目哈,公司没有用。

    引用来自“clouddyy”的评论

    给rust大佬倒茶
    我也刚开始学哈,共同努力
    Doeeking
    Doeeking

    引用来自“Doeeking”的评论

    有编辑器支持就好了��

    引用来自“tanghc”的评论

    idea有插件
    有空尝试一下,希望能像支持其他语言的功能那样,不仅仅是语法高亮而已
    clouddyy
    clouddyy

    引用来自“AkataMoKa”的评论

    哇,不错诶!!

    引用来自“clouddyy”的评论

    贵公司用来跑啥?

    引用来自“AkataMoKa”的评论

    个人项目哈,公司没有用。
    给rust大佬倒茶
    AkataMoKa
    AkataMoKa

    引用来自“AkataMoKa”的评论

    哇,不错诶!!

    引用来自“clouddyy”的评论

    贵公司用来跑啥?
    个人项目哈,公司没有用。
    返回顶部
    顶部