陈天 · Rust 编程第一课
陈天
Tubi TV 研发副总裁
23195 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
基础篇 (21讲)
陈天 · Rust 编程第一课
15
15
1.0x
00:00/00:00
登录|注册

加餐|Rust2021版次问世了!

三年内的迭代和升级版次
Rust 2021不是一个大的版次更新
新的 prelude
feature resolver
闭包的不相交捕获
新的 prelude
feature resolver
闭包的不相交捕获
解决语言迭代中的问题
向后兼容的发布工具
小结
Rust 2021包括了什么新东西?
版次的更新内容
版次的作用
Rust 2021版次问世了!
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是陈天。
千呼万唤始出来的 Rust 2021 edition(下称版次),终于伴随着 1.56 版本出来了。在使用 rustup update stable 完成工具链的升级之后,小伙伴们就可以尝试着把自己之前的代码升级到 2021 版了。
具体做法很简单:
cargo fix --edition
修改 Cargo.toml,替换 edition = “2021”
cargo build / cargo test 确保一切正常
在做第一步之前,记得先把未提交的代码提交。
如果你是初次涉猎 Rust 的同学,可能不清楚 Rust 中“版次”的作用,它是一个非常巧妙的、向后兼容的发布工具。
不知道在其它编程语言中有没有类似的概念,反正我所了解的语言,没有类似的东西。C++ 虽然允许你编译 lib A 时用 --std=C++17,编译 lib B 时用 --std=C++20,但这种用法有不少局限,用起来也没有版次这么清爽。我们先对它的理解达成一致,再聊这次“版次”更新的重点内容。
在 Rust 中,版次之间可能会有不同的保留字和缺省行为。比如 2018 的 async / await / dyn,在 2015 中就没有严格保留成关键字。
假设语言在迭代的过程中发现 actor 需要成为保留字,但如果将其设置为保留字就会破坏兼容性,会让之前把 actor 当成普通名称使用的代码无法编译通过。怎么办呢?升级大版本,让代码分裂成不兼容的 v1 和 v2 么?这个问题是令所有语言开发者头疼的事情。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Rust 2021版次的问世为Rust编程语言带来了一些重要的更新。通过使用`rustup update stable`命令,开发者可以将他们的代码升级到2021版次。Rust的版次机制允许不同版本的库和代码无缝协作,避免了生态系统的分裂。在2021版次中,闭包的不相交捕获使得闭包可以只捕获需要的域,而feature resolver则解决了依赖管理中的难题。此外,新的prelude引入了TryInto、TryFrom和FromIterator,无需再使用use声明。这些更新使得Rust更加灵活和精确,为开发者带来了更好的编程体验。 总的来说,Rust 2021并不是一个大的版次更新,里面只包含了少量和之前版本不兼容的地方。未来3年,Rust将稳定在这个版次上。这正是Rust当初设计用心良苦的地方。三年内,以6周为单位,不断迭代新的功能,风雨无阻,但不引入破坏性更新,或者用某些编译选项将其隔离,使用者必须手工打开(比如resolver="2");三年期满,升级版次,一次性把这三年内潜在的破坏性更新,以及可预见的未来会引入的破坏性更新(比如保留新的关键字),通过版次来区隔。 版次中出现的大动作越少,就说明语言越趋向成熟。这些更新使得Rust更加灵活和精确,为开发者带来了更好的编程体验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《陈天 · Rust 编程第一课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 罗杰
    昨晚看到老师的仓库的版次变成 2021,今天就加餐,爽😊

    作者回复: :)

    2021-10-25
    4
  • qinsi
    有没有可能随着时间的推移,旧的版次就不被继续支持呢?

    作者回复: 目前看没有这个必要,只需要编译器做好向后兼容即可。如果支持旧版次导致编译器太过庞杂,且旧版次几乎没人使用了,那么可以通过升级大版本,比如跳到 rust 2,来显式地放弃一些版次的支持。几年内内看不到这样做的必要性。

    2021-10-26
    2
  • Marvichov
    怎么感觉版次就是自动化了不同编译feature flag, 然后把所有binary link在一起? (https://stackoverflow.com/questions/46746878/is-it-safe-to-link-c17-c14-and-c11-objects ``` [c++ pseudo dep] rbpf = "--std=c++14" futures = "--std=c++17" ``` 感觉, 编译器还是需要向后兼容啊, 如果使用1.56编译2015版次的代码... 如果需要引入breaking change怎么办呢? (万一呢

    作者回复: 所以用版次把 breaking change 隔开啊。比如在 2015 版次中使用了某个在 2024 版次中定义的关键字做变量,编译器知道这是 2015 版次,所以不把这个名字作为关键字解释。这样就避免 breaking change 的影响。所以,编译器会一直做向后兼容

    2021-11-07
    2
    1
  • Jagger
    rust:我拒绝更新,因为我本来就很优秀!

    作者回复: lol

    2021-10-25
  • 野山门
    今天刚升级rust并尝试2021版次,这个加餐很及时,收获良多! 感谢提供这个棒的课程。

    作者回复: 👍

    2021-10-25
  • 我听着呢
    来啦来啦,马不停蹄去更新

    作者回复: 👍

    2021-10-25
  • David.Du
    学到了
    2023-11-06归属地:河南
  • ELSE
    人生苦短,我用RUST
    2022-07-11
  • 枸杞红茶
    妙啊
    2021-10-25
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部