当前位置: 首页 > news >正文

Rust发布1.32版本,跟踪、模块化、宏等方面均有改进

Rust 1.32提供了许多新的语言特性,用于改善开发者的程序调试体验。此外,Rust现在默认使用系统分配器来分配内存,完成了模块化系统的相关工作,这让它变得更容易使用。

新的dbg!宏极大简化了输出调试信息任务。例如,如果要打印变量x的值,现在可以使用dbg!(x),而不是println!(“{:#?}”,x);。另外,dbg!还会自动打印出正在被打印的变量所在的文件和行号。dbg!是一个会返回打印值的函数,因此可以被用在表达式中,如下所示:

fn factorial(n: u32) -\u0026gt; u32 {    if dbg!(n \u0026lt;= 1) {        dbg!(1)    } else {        dbg!(n * factorial(n - 1))    }}

上面的代码将输出以下内容,这样可以很容易地跟踪递归的每个执行步骤:

[src/main.rs:3] n \u0026lt;= 1 = false[src/main.rs:3] n \u0026lt;= 1 = false[src/main.rs:3] n \u0026lt;= 1 = false[src/main.rs:3] n \u0026lt;= 1 = true[src/main.rs:4] 1 = 1[src/main.rs:5] n * factorial(n - 1) = 2[src/main.rs:5] n * factorial(n - 1) = 6[src/main.rs:5] n * factorial(n - 1) = 24[src/main.rs:11] factorial(4) = 24

InfoQ之前已经报道了Rust 1.31引入的模块改进,它使模块的使用更加简单,包括更好的模块路径解析,从而简化了模块语法。Rust 1.32更进一步,提供了统一路径,它放宽了crate、self或super必须跟在use声明之后的限制,从而支持非导入路径。例子如下:

enum Color { Red, Green, Blue }use Color::*;

Rust 1.32还通过引入literal模式匹配器和使用?改进了宏系统。例如,下面的两个宏分别定义了一个规则,当提供的节点列表分别零次或多次匹配给定模式的字面量时,将选择其中的一个规则进行展开:

macro_rules! m1 {    ($lt:literal) =\u0026gt; {};}macro_rules! m2 {    ($(a)?) =\u0026gt; {}}

Rust 1.32默认使用系统分配器分配内存,并让旧的默认分配器jemalloc成为可选项。在Rust 1.28之前,唯一可用的分配器是jemalloc,它的起源可以追溯到Rust拥有自己的类erlang运行时时代。现在,这个运行时非常大,Rust团队不断地将它缩减到一种极简的运行时,就像C语言和C++等语言的运行时那样。jemalloc是旧运行时的最后残余,它仍然占每个Rust二进制文件约300KB的空间。因此,先是在Rust 1.28中禁用,然后在Rust 1.32中作为可选项,因为它在某些情况下可以提供性能方面的优势。

如果你对Rust的最新特性感兴趣,请不要错过官方发行说明。

查看英文原文:

https://www.infoq.com/news/2019/01/rust-1.32-released

相关文章:

  • python文本 字符串逐字符反转以及逐单词反转
  • 海南2018年共审理涉黑涉恶案件82件456人
  • 家电新政促销费 国美智能、绿色家电销售迎政策红利
  • 机器学习新手必学十大算法指南
  • linux如何批量关闭进程
  • Pandas模块:表计算与数据分析
  • java基础ConcurrentHashMap原理
  • 常用正则表达式
  • tensorflow学习笔记3——MNIST应用篇
  • Java 注解 (Annotation)你可以这样学
  • LCD常用接口原理【转】
  • python发送微信
  • 关于ios下字体描边的一个细节
  • tkinter学习系列(二)之窗口的设置
  • 多年父子成兄弟
  • css选择器
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Puppeteer:浏览器控制器
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • XML已死 ?
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 云大使推广中的常见热门问题
  • 转载:[译] 内容加速黑科技趣谈
  • 通过调用文摘列表API获取文摘
  • ​人工智能书单(数学基础篇)
  • #pragma pack(1)
  • #stm32驱动外设模块总结w5500模块
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Python第六天)文件处理
  • (分类)KNN算法- 参数调优
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)深入super,看Python如何解决钻石继承难题
  • .net mvc 获取url中controller和action
  • .net refrector
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET正则基础之——正则委托