10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

Rust 1.8 引入新的基于 Cargo 的搭建系统和更多新特性

  • 2016-04-26
  • 本文字数:1177 字

    阅读完需:约 4 分钟

Rust 1.8 中加入了许多新语言特性,并对现有标准库进行了许多改进。此外,它为 rustc 引入了新的基于 Cargo 的搭建系统,在启动 Rust 的第一步时可以看到。

第一个新特性考虑到了“等号运算符”库中的运算符,例如 += 和 -=,它们现在可以使用特性重载。这使得在Count 类中明确+= 运算符成为可能,范例代码如下所示:

复制代码
use std::ops::AddAssign;
#[derive(Debug)]
struct Count {
value: i32,
}
impl AddAssign for Count {
fn add_assign(&mut self, other: Count) {
self.value += other.value;
}
}

第二个 Rust 语法变更是较小的,之前在定义没有字段的结构时需要大括号,在现在的1.8 版本中大括号可以省略,例如:

复制代码
struct Foo; // this is correct, whereas previously struct Foo {} was required

这个变更让编写宏命令变得更容易,我们不再需要将其作为一个特殊情况进行考虑,也不需要在空结构和非空结构之间转换。

更进一步来说,Rust 1.8引入了新的基于 Cargo 的搭建系统,它将最终取代 Make。根据 Rust 开发者,上述 PR 的提交者,实现了这个变更的 Alex Crichton 所说,引入新的搭建系统有以下几个原因:

  • Makefiles 通常来说都是不可修改的,因此如果必须修改它时很困难;
  • make虽然便携性很强,但它也不是在“任何情况下”都可以移植,由于在 Windows 系统下缺乏默认make,经常会出现不可移植情况;
  • 将 Rust 编译器和标准库迁移到 Cargo 上给 Rust 程序员的开发过程带来了很多统一性,也使得一些常用工具,例如 crates.io package manager 可以使用;

上述的几点都需要很高的成本,因为 Rust 使用基于make的搭建系统已经许多年了。因此 Crichton 写到,取代make的过程“路漫漫其修远兮”。

正如上面所提到过的,在bootstrapping Rust 的第一步中可以看到100%-Rust 搭建系统,这将在 Rust 1.10 中实现。

最好,Rust 1.8 在其标准库中添加了stabilization 库,有这些主要变化:UTF–16-related 方法,不同的基于时间的APIs 以及上面提到的运算符重载需要用到的特性。

目前还在测试阶段的另一个Rust 1.8 的新特性是 rustup ,它可以让开发者安装不同平台下的stdlib版本,这让跨平台编译变得更简单。下面的例子展示了如何自动处理所有依赖需求:

复制代码
$ rustup target add x86_64-unknown-linux-musl
info: downloading component 'rust-std' for 'x86_64-unknown-linux-musl'
13.77 MiB / 13.77 MiB (100.00%) 1.47 MiB/s ETA: 0s
info: installing component 'rust-std' for
'x86_64-unknown-linux-musl'

Rust 1.8 现在可以在这里下载,如果你想了解更多发行说明请点击这里

查看英文原文 Rust 1.8 Introduces New Cargo-based Build System and More


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-04-26 19:002019
用户头像

发布了 218 篇内容, 共 76.5 次阅读, 收获喜欢 76 次。

关注

评论

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

Pytest-ordering自定义测试用例执行顺序

测吧(北京)科技有限公司

测试

Redis哨兵模式的设计架构及其机制

测吧(北京)科技有限公司

测试

利用CSV管理测试数据实现Pytest数据驱动测试:方法与实践

测吧(北京)科技有限公司

测试

Pytest 插件的种类

测吧(北京)科技有限公司

测试

算法性能评估:时间复杂度与空间复杂度的全面解析

测吧(北京)科技有限公司

测试

自写Json转换工具

不在线第一只蜗牛

json

Pytest中autouse参数的用法

测吧(北京)科技有限公司

测试

使用pytest.ini 文件配置默认参数

测吧(北京)科技有限公司

测试

一文探究传统数据仓库、数据湖与 Data Fabric(数据编织)的差异

Aloudata

数据仓库 数据湖 ETL Data Fabric

LIFO(后进先出)、函数调用堆与栈的区别

测吧(北京)科技有限公司

测试

通过Fixture实现参数化测试

测吧(北京)科技有限公司

测试

redis 的数据同步策略以及数据一致性保证

测吧(北京)科技有限公司

测试

苹果发布会分享思考:重新定义 AI 交互体验

inBuilder低代码平台

开源 用户体验

认证!云起无垠成为人工智能产业发展联盟AIIA成员单位

云起无垠

利用JSON管理测试数据实现Pytest数据驱动测试:方法与实践

测吧(北京)科技有限公司

测试

管道应用、消息收发与FIFO:先进先出

测吧(北京)科技有限公司

测试

在Pytest中使用Fixture作为参数的高级技巧与最佳实践

测吧(北京)科技有限公司

测试

Go-Zero实战:抽奖算法的设计与实现

王中阳Go

go-zero

京东商品详情API的调用流程与步骤

技术冰糖葫芦

API 文档 API 测试 API 优先

利用Excel管理测试数据实现Pytest数据驱动测试

测吧(北京)科技有限公司

测试

Pytest中Fixture的yield用法

测吧(北京)科技有限公司

测试

经典排序算法:冒泡排序与选择排序

测吧(北京)科技有限公司

测试

缓存失效下的熔断和降级以及测试方法

测吧(北京)科技有限公司

测试

2024-07-31:用go语言,给定两个正整数数组arr1和arr2,我们要找到属于arr1的整数x和属于arr2的整数y组成的所有数对(x, y)中,具有最长公共前缀的长度。 公共前缀是指两个数的

福大大架构师每日一题

福大大架构师每日一题

详解HTTP代理与SOCKS代理之间的差异

IPIDEA全球HTTP

什么是Fixture作用范围

测吧(北京)科技有限公司

测试

GitHub星标4000!清华大牛的CTF竞赛入门指南,真的太香了!

我再BUG界嘎嘎乱杀

网络安全 信息安全 CTF 竞赛 网安

Rust 1.8引入新的基于Cargo的搭建系统和更多新特性_语言 & 开发_Sergio De Simone_InfoQ精选文章