Redian新闻
>
2022 Rust 入门指南 | Linux 中国

2022 Rust 入门指南 | Linux 中国

科技
 
导读:如果你打算在今年探索 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-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🔗 crates.io 是一个很好的社区 crate 注册网站。

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

  1. [package]
  2. name = "myproject"
  3. version = "0.1.0"
  4. authors = ["Seth <[email protected]>"]
  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 来运行它,它会检测代码是否被更改并触发一个新的构建。构建过程中下载名为 rand 的 crete 和它依赖的所有 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 值得一看,如果你要探索它,那么你应该下载我们的免费 Rust 速查表🔗 opensource.com,以便快速了解基础知识。越早开始,就越早了解 Rust。当然,你应该经常练习以避免生疏。

Rust 速查表🔗 opensource.com


via: https://opensource.com/article/22/1/rust-cheat-sheet

作者:Seth Kenlon 选题:lujun9972 译者:hanszhao80 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
苏联援助越南抵抗中国的侵略使用 rustup 管理你的 Rust 工具链 | Linux 中国Fedora Linux 36 发布 | Linux 中国基于 Rust 的 Redox OS 0.7.0 发布:增强硬件支持 | Linux 中国如何在 Linux 桌面中启用 “激活 Linux” 水印通知 | Linux 中国英伟达在提升 Linux 上的 GPU 使用体验上迈出了一大步 | Linux 中国在 Linux 上使用 sudo 命令的 5 个理由 | Linux 中国使用 apt 进行 Linux 包管理 | Linux 中国上一个说“丼”不读jǐng的人,已经被我骂哭了在 Ubuntu Linux 如何安装 H.264 解码器 | Linux 中国Archinstall 新的菜单系统让安装 Arch Linux 更容易了 | Linux 中国Linux 中国开通播客频道:“开源朗读者”和“硬核观察” | Linux 中国Fudgie?令人惊叹的 Budgie 桌面即将登陆 Fedora Linux | Linux 中国最适合程序员的 10 款 Linux 发行版 | Linux 中国我如何在 Linux 上扫描家庭照片 | Linux 中国如何在 Fedora Linux 中安装多媒体编码器 | Linux 中国光速不变其实并非一个简单的假设闪婚能解决问题?在虚拟机中运行 Linux 的十大优点 | Linux 中国临石涛《松风堂主人》你的 Linux 启动时有几只小企鹅? | Linux 中国中医在海外立足的法律探讨实测 Linux Mint 升级工具 | Linux 中国烤箱入门指南 | 预算内这些值得买!分享 8 篇使用 Linux 命令行的技巧 | Linux 中国如何在 Linux 和 Windows 电脑之间共享文件 | Linux 中国好消息!Docker Desktop 现已支持 Linux | Linux 中国Linus Torvalds 暗示很快就可以在内核中看到对 Rust 的支持 | Linux 中国GNU C 编译器的程序员入门指南 | Linux 中国HydraPaper:一个支持多显示器的 Linux 壁纸管理器 | Linux 中国System76 与惠普合作为开发者提供功能强大的 Linux 笔记本电脑 | Linux 中国使用 watch 和 tail 命令监视 Linux 上的活动 | Linux 中国用 Gwenview 在 Linux 上裁剪和调整照片大小 | Linux 中国微软还有另一个 Linux 发行版,而且是基于 Debian 的 | Linux 中国使用 dnf 进行 Linux 包管理 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。