写点什么

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:001797
用户头像

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

关注

评论

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

技术译文|如何将 Pulsar 用作消息队列

Apache Pulsar

开源 云原生 pulsar Apache Pulsar 消息中间件

腾讯架构师:亲手Debug之后,你就知道为何面试问源码了

小Q

Java tomcat 程序员 架构 调优

时空碰撞优化系列·一

誓约·追光者

hive 数据分析 Sparksql 计算效率 优化

揭示智能边缘重大机遇 英特尔邀产学研推动产业智能升级

E科讯

2020大厂面试一道高频Spring题,90%的Java开发者都拜倒在它脚下!

Java架构师迁哥

区块链用于支付手段只是开端

CECBC

区块链 金融

整合Elastic-Job(支持动态任务)

TaurusCode

springboot SpringCloud 分布式任务调度 Elastic-job

你一定看得懂的Netty客户端启动源码分析!

Java 编程 Netty 架构师

添加字幕哪个视频剪辑软件比较简单?

奈奈的杂社

视频创作 视频剪辑 视频后期 自媒体 后期字幕

新疆采风笔记:送行·出发·火车上

刘新吾

随笔 旅行 新疆

flutter 高效开发工具集

Daniel

华为云推UGO:一手抓结构迁移,一手抓SQL转换

华为云开发者联盟

深度解析物联网设备的区块链技术

CECBC

区块链 智能合约 物联网

“大数据+区块链”的智慧城市建设!

CECBC

区块链 大数据

Java 回调(Callback)接口学习使用

魏杰

海量数据拉升背后的成本困扰:存算分离成美图降本增效新良方

华为云开发者联盟

大数据 华为云 海量数据

从全备中恢复单库或单表,小心有坑!

Simon

MySQL MySQL 运维

(2)skynet ubuntu下载与安装

休比

年度开源盛会 ApacheCon 来临,Apache Pulsar 专场大咖齐聚

Apache Pulsar

开源 云原生 Apache Pulsar 消息中间件

支付平台架构技术实现之终端安全

博文视点Broadview

架构 安全攻防 安全 支付系统 风控

一个线程池中的线程异常了,那么线程池会怎么处理这个线程?

Java架构师迁哥

智谱AI首席科学家唐杰团队荣获国际数据挖掘顶会时间检验应用科学奖

DT极客

Java引入第三方包的路径问题

谷鱼

路径

阿里P8大牛的建议,工作1-5年的Java工程师如何让自己变得更值钱

Java架构之路

Java 编程 程序员 面试

golang 表格编程降低圈复杂度

猴子胖胖

表格开发 Go 语言

华为云IoT智简联接,开启物联世界新纪元

华为云开发者联盟

物联网

分布式系统实践解读丨详解高内聚低耦合

华为云开发者联盟

nginx 实现接口版本控制

程序员与厨子

php nginx laravel 版本控制

环信和阿里云签署云原生合作,携手共建云通讯“新基建”

DT极客

恶补,一文了解 8 种常见的数据结构

Java架构师迁哥

2020年程序员必备的面试重点+面试真题+个人软实力,你学废了吗?

Java架构师迁哥

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