网易首页 > 网易号 > 正文 申请入驻

2022 Rust 入门指南 | Linux 中国

0
分享至

导读:如果你打算在今年探索 Rust,请下载我们的免费 Rust 速查表,以供快速参考基础知识。

本文字数:6060,阅读时长大约: 7分钟

LCTT 译者 :Hans zhao

翻译: 4.0 篇

贡献: 4 天

2022-05-02

2022-05-05

https://linux.cn/lctt/hanszhao80

Rust 是一门相对较新的编程语言,受到各个企业的 opensource.com。尽管如此,它仍是一门建立在之前所有事物之上的语言。毕竟,Rust 不是一天做出来的,所以即便 Rust 中的一些概念看起来与你从 Python、Java、C++ 等编程语言学到的东西大不相同,但它们都是基于同一个基础,那就是你一直与之交互(无论你是否知道)的 CPU 和 NUMA(非统一内存访问(Non Uniform Memory Access))架构,因此 Rust 中的一些新功能让人感觉有些熟悉。

现在,我的职业不是程序员。我没耐心但我又有点儿强迫症。当我需要完成某件事时,如果一门语言不能帮助我相对较快地获得想要的结果,那么我很少会受到鼓舞而使用它。Rust 试图平衡两个矛盾:现代计算机对安全和结构化代码的需求,和现代程序员对编码工作事半功倍的渴望。

安装 Rust

rust-lang.org 网站有丰富的的文档指导如何安装 Rust,但通常,它就像下载sh.rustup.rs脚本并运行它一样简单。

  1. $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs

  2. $ less sh.rustup.sh

  3. $ sh ./sh.rustup.rs

没有类

Rust 没有类,也不使用class关键字。Rust 确实有struct数据类型,但它的作用是充当数据集合的一种模板。因此,你可以使用结构体(struct),而不是创建一个类来表示虚拟对象:

  1. struct Penguin {

  2. genus: String,

  3. species: String,

  4. extinct: bool,

  5. classified: u64,

  6. }

你可以像使用类一样使用它。例如,当定义完Penguin结构,你就可以创建它的实例,并与该实例进行交互:

  1. struct Penguin {

  2. genus: String,

  3. species: String,

  4. extinct: bool,

  5. classified: u64,

  6. }

  7. fn main() {

  8. let p = Penguin { genus: "Pygoscelis".to_owned(),

  9. species: "R adeliæ".to_owned(),

  10. extinct: false,

  11. classified: 1841 };

  12. println!("Species: {}", p.species);

  13. println!("Genus: {}", p.genus);

  14. println!("Classified in {}", p.classified);

  15. if p.extinct == true {

  16. println!("Sadly this penguin has been made extinct.");

  17. }

  18. }

impl数据类型与struct数据类型结合使用,你可以实现一个包含函数的结构体,并且可以添加继承和其他与类相似的特性。

函数

Rust 中的函数很像其他语言中的函数。每个函数都代表一组严谨的任务,你可以在需要时调用它们。主函数名必须是main

fn关键字声明函数,后跟函数名称和函数接受的所有参数。

  1. fn foo() {

  2. let n = 8;

  3. println!("Eight is written as {}", n);

  4. }

通过参数,将信息从一个函数传递到另一个函数。例如,我已经创建了一个Penguin类(结构),并且我有一个Penguin的实例为p,将目标函数的参数指定为Penguin类型,就可把p的属性从一个函数传递到另一个函数。

  1. fn main() {

  2. let p = Penguin { genus: "Pygoscelis".to_owned(),

  3. species: "R adeliæ".to_owned(),

  4. extinct: false, classified: 1841 };

  5. printer(p);

  6. }

  7. fn printer(p: Penguin) {

  8. println!("Species: {}", p.species);

  9. println!("Genus: {}", p.genus);

  10. println!("Classified in {}", p.classified);

  11. if p.extinct == true {

  12. println!("Sadly this penguin has been made extinct.");

  13. }

  14. }

变量

Rust 默认创建的为不可变(immutable)变量。这意味着你创建的变量以后无法更改。这段代码虽然看起来没问题,但无法编译:

  1. fn main() {

  2. let n = 6;

  3. let n = 5;

  4. }

但你可以使用关键字mut声明一个可变(mutable)变量,因此下面这段代码可以编译成功:

  1. fn main() {

  2. let mut n = 6;

  3. println!("Value is {}", n);

  4. n = 5;

  5. println!("Value is {}", n);

  6. }

编译

Rust 编译器,至少就其报错信息而言,是可用的最好的编译器之一。当你在 Rust 中出错时,编译器会真诚地告诉你做错了什么。实际上,仅通过从编译器错误消息中学习,我就了解了 Rust 的许多细微差别(就我理解到的 Rust 的任何细微差别而言)。即便有时错误消息太过于模糊,而不知所以然,互联网搜索几乎总能得到解释。

启动 Rust 程序的最简单方法是使用cargo,它是 Rust 的包管理和构建系统。

  1. $ mkdir myproject

  2. $ cd myproject

  3. $ cargo init

以上命令为项目创建了基本的基础架构,最值得注意的是src子目录中的main.rs文件。打开此文件,把我为本文生成的示例代码粘贴进去:

  1. struct Penguin {

  2. genus: String,

  3. species: String,

  4. extinct: bool,

  5. classified: u64,

  6. }

  7. fn main() {

  8. let p = Penguin { genus: "Pygoscelis".to_owned(), species: "R adeliæ".to_owned(), extinct: false, classified: 1841 };

  9. printer(p);

  10. foo();

  11. }

  12. fn printer(p: Penguin) {

  13. println!("Species: {}", p.species);

  14. println!("Genus: {}", p.genus);

  15. println!("Classified in {}", p.classified);

  16. if p.extinct == true {

  17. println!("Sadly this penguin has been made extinct.");

  18. }

  19. }

  20. fn foo() {

  21. let mut n = 6;

  22. println!("Value is {}", n);

  23. n = 8;

  24. println!("Eight is written as {}", n);

  25. }

使用cargo build命令进行编译:

  1. $ cargo build

执行target子目录下的二进制程序,或者直接运行cargo run命令来运行你的项目:

  1. $ cargo run

  2. Species: R adeliæ

  3. Genus: Pygoscelis

  4. Classified in 1841

  5. Value is 6

  6. Eight is written as 8

Crates

任何语言的大部分便利都来自于它的库或模块。在 Rust 中,进行分发和跟踪的库称为 “crate”(箱子)。 crates.io 是一个很好的社区 crate 注册网站。

把一个 crate 添加到你的 Rust 项目,首先要在Cargo.toml文件中添加这个 crate。例如,要安装随机数函数,我使用名为rand的 crate,使用*作为通配符,以确保在编译时获得最新版本:

  1. [package]

  2. name = "myproject"

  3. version = "0.1.0"

  4. authors = ["Seth "]

  5. edition = "2022"

  6. [dependencies]

  7. rand = "*"

在 Rust 代码中使用它需要在最顶行使用use语句:

  1. use rand::Rng;

以下是一些创建随机种子和随机范围的示例代码:

  1. fn foo() {

  2. let mut rng = rand::thread_rng();

  3. let mut n = rng.gen_range(1..99);

  4. println!("Value is {}", n);

  5. n = rng.gen_range(1..99);

  6. println!("Value is {}", n);

  7. }

你可以使用cargo run来运行它,它会检测代码是否被更改并触发一个新的构建。构建过程中下载名为randcrete和它依赖的所有crate,编译代码,然后运行它:

  1. $ cargo run

  2. Updating crates.io index

  3. Downloaded ppv-lite86 v0.2.16

  4. Downloaded 1 crate (22.2 KB) in 1.40s

  5. Compiling libc v0.2.112

  6. Compiling cfg-if v1.0.0

  7. Compiling ppv-lite86 v0.2.16

  8. Compiling getrandom v0.2.3

  9. Compiling rand_core v0.6.3

  10. Compiling rand_chacha v0.3.1

  11. Compiling rand v0.8.4

  12. Compiling rustpenguin v0.1.0 (/home/sek/Demo/rustpenguin)

  13. Finished dev [unoptimized + debuginfo] target(s) in 13.97s

  14. Running `target/debug/rustpenguin`

  15. Species: R adeliæ

  16. Genus: Pygoscelis

  17. Classified in 1841

  18. Value is 70

  19. Value is 35

Rust 速查表

Rust 是一门令人非常愉快的语言。集成了在线注册网站、有用的编译器和几乎直观的语法,它给人的适当的现代感。

但请不要误会,Rust 仍是一门复杂的语言,它具有严格的数据类型、强作用域变量和许多内置方法。Rust 值得一看,如果你要探索它,那么你应该下载我们的免费 opensource.com,以便快速了解基础知识。越早开始,就越早了解 Rust。当然,你应该经常练习以避免生疏。

opensource.com

via:

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出

欢迎遵照 CC-BY-SA 协议规定转载,

如需转载,请在文章下留言 “ 转载:公众号名称”,

我们将为您添加白名单,授权“ 转载文章时可以修改”。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
广东外援引援又失败了!仅奎因能看,麦考尔太独,双大外无作用!

广东外援引援又失败了!仅奎因能看,麦考尔太独,双大外无作用!

篮球资讯达人
2026-05-13 00:43:14
令人振奋!上海地铁“傲慢大妈”终于被依法惩处,倚老卖老已无用

令人振奋!上海地铁“傲慢大妈”终于被依法惩处,倚老卖老已无用

瓜哥的动物日记
2026-05-12 07:09:39
同一天两起猝死!马拉松再现悲剧:高温+低龄参赛

同一天两起猝死!马拉松再现悲剧:高温+低龄参赛

老王谈跑步
2026-05-12 15:03:29
观点 | 瓜达尔港突然爆火,究竟发生了什么?

观点 | 瓜达尔港突然爆火,究竟发生了什么?

南亚研究通讯
2026-05-11 22:04:49
倒计时 8 个月!深圳绿牌零门槛窗口期,错过大概率要收紧

倒计时 8 个月!深圳绿牌零门槛窗口期,错过大概率要收紧

音乐时光的娱乐
2026-05-13 00:56:51
“可偏转弹丸!中国研发出鳄鱼结构装甲”

“可偏转弹丸!中国研发出鳄鱼结构装甲”

观察者网
2026-05-12 14:04:05
外媒:蒙牛等赞助世界杯的中国企业担忧世界杯没版权导致营销损失

外媒:蒙牛等赞助世界杯的中国企业担忧世界杯没版权导致营销损失

懂球帝
2026-05-13 01:09:14
刘振阳被查

刘振阳被查

商丘交通广播
2026-05-12 21:18:00
特朗普懵了:来北京前被废掉“杀手锏”,这是他最憋屈的一次出访

特朗普懵了:来北京前被废掉“杀手锏”,这是他最憋屈的一次出访

闫树军论评
2026-05-12 18:37:32
俄罗斯克里米亚大桥交通临时关闭

俄罗斯克里米亚大桥交通临时关闭

界面新闻
2026-05-12 15:11:58
杨受成“霸占”容祖儿半生:不娶也不放,她到底图什么?

杨受成“霸占”容祖儿半生:不娶也不放,她到底图什么?

橙星文娱
2026-05-12 15:17:44
炸穿台湾政坛!蒋友松强行迁走两蒋悬棺,半世纪漂泊终要归乡

炸穿台湾政坛!蒋友松强行迁走两蒋悬棺,半世纪漂泊终要归乡

陈漎侃故事
2026-04-14 17:28:18
广东男篮不敌北京,郭艾伦评价徐杰犯规胡明轩强

广东男篮不敌北京,郭艾伦评价徐杰犯规胡明轩强

春日筆記
2026-05-13 00:35:48
不断挑拨离间!小玥儿忍无可忍,一个动作揭开了与马筱梅的关系

不断挑拨离间!小玥儿忍无可忍,一个动作揭开了与马筱梅的关系

观察鉴娱
2026-05-12 09:28:50
日本政客说走嘴,为何对林诗栋站上球桌破大防,所谓失礼只是借口

日本政客说走嘴,为何对林诗栋站上球桌破大防,所谓失礼只是借口

杨华评论
2026-05-12 19:34:15
好了伤疤忘了疼 曼联昔日神童死性不改 恐遭法甲清洗且无人敢接盘

好了伤疤忘了疼 曼联昔日神童死性不改 恐遭法甲清洗且无人敢接盘

零度眼看球
2026-05-12 08:43:43
大疆发布扫拖机器人 ROMO 2 系列 / 千问与淘宝全面打通 / Google 安全团队首次发现 AI 参与黑客活动的迹象

大疆发布扫拖机器人 ROMO 2 系列 / 千问与淘宝全面打通 / Google 安全团队首次发现 AI 参与黑客活动的迹象

少数派sspai
2026-05-12 12:09:13
叶妙任湖南团省委书记

叶妙任湖南团省委书记

中国经济网
2026-05-12 15:09:15
雅思宣布:中国大陆地区,9月1日起取消纸笔考试

雅思宣布:中国大陆地区,9月1日起取消纸笔考试

南方都市报
2026-05-10 23:34:08
心理学上有个词叫:螃蟹效应。永远要记住,和周围人搞好关系的秘诀就是,不分享喜悦、不炫耀成功、不说三道四、不假装聪明

心理学上有个词叫:螃蟹效应。永远要记住,和周围人搞好关系的秘诀就是,不分享喜悦、不炫耀成功、不说三道四、不假装聪明

德鲁克博雅管理
2026-04-28 17:04:30
2026-05-13 06:47:00
Linux
Linux
Linux 中国开源社区
8018文章数 73112关注度
往期回顾 全部

科技要闻

宇树发布载人变形机甲,定价390万元起

头条要闻

特朗普称将同中方讨论对台军售和黎智英案 外交部回应

头条要闻

特朗普称将同中方讨论对台军售和黎智英案 外交部回应

体育要闻

骑士终于玩明白了?

娱乐要闻

白鹿风波升级!掉粉20万评论区沦陷

财经要闻

利润再腰斩 京东干外卖后就没过过好日子

汽车要闻

吉利银河“TT”申报图曝光 电动尾翼+激光雷达

态度原创

手机
家居
教育
健康
时尚

手机要闻

谷歌携手苹果升级换机体验:iPhone转安卓可迁移密码、主屏布局

家居要闻

极简主义下的居住场域与空间

教育要闻

“为你,千千万万遍”——那些让人心碎的经典文学句子大盘点

干细胞能让人“返老还童”吗

普通人真该学学如何穿搭!多穿裙子比裤子更时髦,大方提气质

无障碍浏览 进入关怀版