Rust从入门到实战系列二百二十:高级特征

ch19-00-advanced-features.md
commit 10f89936b02dc366a2d0b34083b97cadda9e0ce4
现在我们已经学习了 Rust 编程语言中最常用的部分。在第二十章开始另一个新项目之前,让我们聊聊一
些总有一天你会遇上的部分内容。你可以将本章作为不经意间遇到未知的内容时的参考。本章将要学习
的功能在一些非常特定的场景下很有用处。虽然很少会碰到它们,我们希望确保你了解 Rust 提供的所有
功能。
本章将涉及如下内容:
• 不安全 Rust:用于当需要舍弃 Rust 的某些保证并负责手动维持这些保证
• 高级 trait:与 trait 相关的关联类型,默认类型参数,完全限定语法(fully qualified syntax),超
(父)trait(supertraits)和 newtype 模式
• 高级类型:关于 newtype 模式的更多内容,类型别名,never 类型和动态大小类型
• 高级函数和闭包:函数指针和返回闭包
• 宏:定义在编译时定义更多代码的方式
对所有人而言,这都是一个介绍 Rust 迷人特性的宝典!让我们翻开它吧!
不安全 Rust
ch19-01-unsafe-rust.md
commit 1524fa89fbaa4d52c4a2095141f6eaa6c22f8bd0
目前为止讨论过的代码都有 Rust 在编译时会强制执行的内存安全保证。然而,Rust 还隐藏有第二种语
言,它不会强制执行这类内存安全保证:这被称为 不安全 Rust(unsafe Rust)。它与常规 Rust 代码无
异,但是会提供额外的超能力。
尽管代码可能没问题,但如果 Rust 编译器没有足够的信息可以确定,它将拒绝代码。
不安全 Rust 之所以存在,是因为静态分析本质上是保守的。当编译器尝试确定一段代码是否支持某个保
证时,拒绝一些合法的程序比接受错误的程序要好一些。这必然意味着有时代码 可能是合法的,但如果
Rust 编译器没有足够的信息来确定,它将拒绝该代码。在这种情况下,可以使用不安全代码告诉编译器,
” 相信我,我知道我在干什么。” 这么做的缺点就是你只能靠自己了:如果不安全代码出错了,比如解引
用空指针,可能会导致不安全的内存使用。
另一个 Rust 存在不安全一面的原因是:底层计算机硬件固有的不安全性。如果 Rust 不允许进行不安全
操作,那么有些任务则根本完成不了。Rust 需要能够进行像直接与操作系统交互,甚至于编写你自己的操
作系统这样的底层系统编程!这也是 Rust 语言的目标之一。让我们看看不安全 Rust 能做什么,和怎么做。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值