前言
最近,宇润忽然想学下很炽热的 Rust 语言,毕竟连驰名大喷子 linus 都接收了 Rust,必定有它的可取之处。
通过这篇文章来分享一下,我学习 Rust 语言的教训心得,如有说得不对请轻喷。
Rust 语言官网:https://www.rust-lang.org/zh-CN
居然有官网中文,褒扬!
装置
首先要来装置 Rust,我是打算在 wsl 里开发,所以装置了 Linux 版本。(当然 Windows 甚至有安装包,也是很不便)
Rust 装置:https://www.rust-lang.org/zh-…
一句话装置:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
跟我设想中的齐全不一样,不必梯子也能够很快下载好,装置也不必很繁琐的步骤,让我不敢相信曾经装完了。
编辑器
我是 VSCode 的忠诚用户,写 PHP、H5、C、C++ 都是用 VScode 写的,这次学 Rust 也不例外。
搜了一下“Rust”关键词,遇事不决,抉择下载量最多的:rust-analyzer
如何学习
良久没有学过新的语言了,反正每次刚入门的时候都是最头大的。
我抉择间接看官网文档,通过一些例子来理解语言的根本个性和写法等等。
学习 Rust:https://www.rust-lang.org/zh-…
练手我的项目
接下来就是找个小我的项目练练手,死记硬背,争取胜利入门。
当初新生代的语言出厂自带包管理器曾经成为了标配,Rust 的包管理器叫作 Cargo。
我先创立一个我的项目目录,而后在外面执行:cargo init
这样一个我的项目骨架就生成好了。
接下来就是将后面学习根本个性阶段的常识拿过去搭积木了,当然两头遇到了很多问题,通过查文档、百度、Google、一直调试最终都顺利解决。
cargo
拉依赖如果慢的话,须要在 ~/.cargo/config.toml
中配置国内镜像源:
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"
通过我的致力,终于实现了一个繁难 Webhook 服务,反对 Gitee 和 Github。
rust-webhook:https://github.com/Yurunsoft/…
因为是一个十分十分非常简单的小我的项目,外面用到的个性非常少,可能离入门还有很长一段距离。
总结
变量默认不可变
Rust 的变量默认是不可变的,我感觉他就不应该叫他变量。
fn main() {
let a = 1;
a = 2; // 编译不通过,变量 a 不可变
println!("a={}!", a);
}
你得给变量申明 mut
,那这个变量才是可变的。
fn main() {
let mut a = 1;
a = 2;
println!("a={}!", a);
}
值得一提的是,大部分场景,编译器会猜想你的变量类型,而不用申明类型。当然你也能够申明变量类型。
内存治理
Rust 不像 C/C++ 须要 malloc
和 free
,或者 new
和 delete
,也不像其它高级语言一样有援用计数主动垃圾回收机制。
Rust 是通过借用机制治理内存的,这也是为什么 Rust 号称比 C/C++ 更加内存平安,并且比其它高级语言性能更好。
例子 1 - 编译报错:
fn main() {let a = String::from("test");
let b = a; // 赋值:a 被 b 借用,a 变量不再可用
println!("a={}!", a); // 编译不通过,a 变量被借用不可用
println!("b={}!", b);
}
例子 1 - 通过编译:
fn main() {let a = String::from("test");
let b = &a; // 援用
println!("a={}!", a);
println!("b={}!", b);
}
例子 2 - 编译报错:
fn main() {let a = String::from("test");
test(a); // 传参:a 被传参借用,a 变量不再可用
println!("a={}!", a); // 编译不通过,a 变量被借用不可用
}
fn test(str: String) {println!("str={}!", str);
}
例子 2 - 通过编译:
fn main() {let a = String::from("test");
test(&a); // 援用传参
println!("a={}!", a);
}
fn test(str: &String) {println!("str={}!", str);
}
错误处理
Rust 默认不会捕捉谬误,咱们须要在每个办法调用之后,跟上 .unwrap()
让它主动解决,如果这个函数返回谬误就失败。
use std::fs;
fn main() {let data = fs::read("1.txt").unwrap();
println!("data={:?}", data);
}
或者捕捉后抛出自定义信息:
use std::fs;
fn main() {let data = fs::read("1.txt").expect("我是错误信息");
println!("data={:?}", data);
}
个人感觉 Rust 的错误处理相比 Go 要好一些,但也不是太优雅,会造成代码十分啰嗦。
最初总结
Rust 语言是一个十分“阳间”的编程语言,写起来跟咱们通常用的编程语言思路都不一样。
初上手时候,脑细胞会耗费得十分多,如果你也在学 Rust,无妨多吃点补脑食物。
符号过多也是个问题,浏览代码有些目迷五色。
这篇水文次要列了一些跟支流语言差别大的局部,并不是感觉这些个性不好,只不过我还没习惯。
目前也只是浅尝辄止,前面我会寻找应用场景,持续深入研究。