写点什么

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

2019 年 1 月 29 日

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

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


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


fn factorial(n: u32) -> u32 {    if dbg!(n <= 1) {        dbg!(1)    } else {        dbg!(n * factorial(n - 1))    }}
复制代码


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


[src/main.rs:3] n <= 1 = false[src/main.rs:3] n <= 1 = false[src/main.rs:3] n <= 1 = false[src/main.rs:3] n <= 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) => {};}
macro_rules! m2 { ($(a)?) => {}}
复制代码


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


2019 年 1 月 29 日 10:305028
用户头像

发布了 731 篇内容, 共 361.3 次阅读, 收获喜欢 1832 次。

关注

评论

发布
暂无评论
发现更多内容

week04 作业

xxx

spring-boot-route(二十三)开发微信公众号

Java旅途

Java Spring Boot

c++bind函数使用

良知犹存

c++

架构师训练营第2期 第1周 作业一:食堂就餐卡系统设计

老坛酸菜

一致性 hash

garlic

极客大学架构师训练营

Week 4命题作业

balsamspear

极客大学架构师训练营

Java中的5大队列,你知道几个?

王磊

Java

听说你会缓存?

架构师修行之路

redis 缓存 微服务

甲方日常 36

句子

工作 随笔杂谈 日常

分布式缓存架构,消息队列,负载均衡

garlic

极客大学架构师训练营

App场景下投放外链时如何做设备识别和采集(1)

DeeperMan

采集 流量

如果只推荐一本 Python 书,我要 Pick 它!

Python猫

Python 学习 编程 程序员 码农

week04总结

xxx

编码之路,与君共勉

yes的练级攻略

程序人生

6小时搞定云原生:从基础概念到上手实践

京东智联云开发者

云原生

C/C++最佳实践

jiangling500

c c++ 最佳实践

服了,这款开源类库可以帮你简化每一行代码

沉默王二

Java GitHub 后端 hutool

一文搞懂ReactNative生命周期的进化

凌宇之蓝

react.js 面试 大前端 React Native

Week 4学习总结

balsamspear

极客大学架构师训练营

java安全编码指南之:线程安全规则

程序那些事

java安全编码 java安全 java安全编码指南 java代码规范 java代码安全

数字货币交易所开发功能方案,交易所平台搭建app

WX13823153201

数字货币交易所开发

设计数据库集群读写分离并非易事

架构师修行之路

分布式 微服务

架构作业:一致性hash

Nick~毓

架构师训练营第2期 第1周 作业二:学习总结.md

老坛酸菜

一文读懂线程池的工作原理(故事白话文)

捡田螺的小男孩

Java 面试 线程池 线程池工作原理

Docker架构

混沌畅想

Docker 容器 Docker架构

Linux内核系统结构

林昱榕

Linux 操作系统 内核 系统调用 操作系统结构

一份超级完整实用的PyCharm图解教程,8K字赶紧收藏起来

计算机与AI

Python IDLE 开发环境

【得物技术】谈谈缓存的一二三四五

得物技术

缓存 架构 技术 缓存穿透 缓存击穿

二十一、深入Python强大的装饰器

刘润森

Python

epoll服务器解析

菜鸟小sailor 🐕

NLP领域的2020年大事记及2021展望

NLP领域的2020年大事记及2021展望

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