写点什么

每日一 R「01」跟着大佬学 Rust

作者:Samson
  • 2022 年 8 月 08 日
  • 本文字数:1643 字

    阅读完需:约 5 分钟

每日一R「01」跟着大佬学 Rust

01-开篇辞

Hello,大家好,我是 Samson。作为一个工作三年有余的后端开发,日常主力开发语言是 Java,其次是 Shell 脚本。作为一个”curd boy”,日复一日的重复性劳动难免感到枯燥乏味。是时候掌握一门新的开发语言,跳出舒适圈。


为什么选择 Rust?


首先,Rust 据传是一门非常神奇的语言。以下描述来自《Rust语言圣经(Rust Course) 》:


Rust 语言真的好:连续七年成为全世界最受欢迎的语言、没有 GC 也无需手动内存管理、性能比肩 C++/C 还能直接调用它们的代码、安全性极高 - 总有公司说使用 Rust 后以前的大部分 bug 都将自动消失、全世界最好的包管理工具 Cargo 等等。但…


其次,据说 Rust 的学习曲线是十分陡峭的。唉,巧了不是。我还就是有那么一股”明知山有虎,偏上虎山行“的性格。开玩笑,其实主要是疫情期间公司将外出培训课程换成了极客时间上的在线课程,而恰巧有一门课程在授课,陈天老师的《Rust 编程第一课》。算是一个契机吧,打算就此机会好好学习 Rust,将其发展为我的下一个主力语言。


这其实是一个学习笔记系列(挖一个大坑,慢慢填),并且有两个目的:其一,记录学习中的思考和知识点与大家一同分享,交流与进步;其二,当作是一个激励自己坚持学习的工具,通过输出倒逼自己输入。

02-Rust 基本概念

与 Java 语言类似,Rust 中的变量可以分为两大类:原生类型和组合类型。


  • 原生类型包括整型(有符号、无符号)、浮点型、布尔型、字符型、元组(tuple)、切片、数组。

  • 组合类型包括 struct 和 enum。


声明变量的语法是let x,Rust 区别其他语言的一个特点是变量默认是不可变的,如果要声明可变变量,需要使用let mut x


注:听到这个语法规则是不是感觉不可思议,变量不可变不就成了常量?Rust 中常量是有专门的关键字的const。如何理解可变变量与不可变变量?我是这样理解的:不可变与可变的概念有点类似于读写锁,持读锁只能读取,而修改只能是持写锁才能执行。这样,变量或者说内存的状态就是安全的。


Rust 中函数是一等公民,也就是说它和变量一样重要。如下是一个函数示例:


fn hello() -> () {    println!("{}", "hello, rust");    ()}
复制代码


如果是首次看到 Rust 中的函数,肯定非常疑惑,这都是哪儿跟哪儿啊。让我来解释一下:除了上面说的默认不可变的变量外,Rust 中还有一个特点,就是除了let x这种变量绑定语句外,其他的几乎所有语句都是表达式类型,即可以计算出一个有类型的值。


上面的函数示例中,hello是函数名,-> ()表示函数的返回值是 unit () 类型。 unit () 类型是一个特殊的类型,它只有一个特殊的值 ()。由前面的表达式规定,函数声明也是表达式的一种,函数的最后一个表达式将作为函数的返回值返回。


如果要提前从函数中返回,可以通过 return 语句。


与 Java 类似,Rust 中支持 if / else 分支语句,而且还有更为强大的模式匹配语法:


match event {   Event::Join((uid, _tid)) => println!("user {:?} joined", uid),   Event::Leave((uid, tid)) => println!("user {:?} left {:?}", uid, tid),   Event::Message((_, _, msg)) => println!("broadcast: {}", msg),}
复制代码


模式匹配看起来像是 switch-case,但实际比其功能要强大很多,后面在开发过程中肯定会深刻体会。


Rust 支持 while / for / loop 等循环语法,其中 loop 表示无限循环,可通过 break 提前跳出循环。


在 Rust 中错误分为两类,可恢复的错误和不可恢复错误(panic)。不可恢复错误会导致 Rust 程序崩溃退出。处理错误时一般会用到 Result<T, E> 结构体,当无错误时返回一个具体的值,错误时(可恢复错误)返回错误信息。


Rust 的项目组织也与 Java 类似,但又有所不同。Rust 使用 cargo 作为项目管理工具(可以类比于 Java 中的 Maven),不过 cargo 更像是 JS 开发中使用的 npm。


cargo new hello命令行会创建一个新的 workspace,类比于 Java 中的 project。在 workspace 中可以创建多个 crate,crate 可以是可执行程序抑或是 lib 三方库。在每个 crate 中,可以创建多个 mod。




本节链接:03|初窥门径:从你的第一个Rust程序开始!

发布于: 刚刚阅读数: 4
用户头像

Samson

关注

还未添加个人签名 2019.07.22 加入

还未添加个人简介

评论

发布
暂无评论
每日一R「01」跟着大佬学 Rust_8月月更_Samson_InfoQ写作社区