Rust新手快速上手!告别“内存泄漏”噩梦,手把手教你写出高性能安全代码!
兄弟姐妹们,大家好啊!我是你们的老朋友eccfy,今天咱们不聊别的,直接上硬核干货!要说什么编程语言现在最火、最能解决后端开发的痛点,那毫无疑问就是Rust!它号称能让你的代码告别“内存安全”的噩梦,写出如同火箭般飞快的程序!是不是有点心动了?OK So,这次我来当一回“B站大学教授”,手把手带大家从零入门Rust,甚至还能做出一个实际的小Demo!
Rust安装与第一个“Hello World”!
好,废话不多说,Show Time!
首先,你得有Rust环境,对不对?别担心,超级简单!
- 下载安装器: 打开你的浏览器,直接搜索“Rust 安装教程”,你会找到官方的 Rustup 页面。这里会有详细的安装指令。对于Windows用户,下载
rustup-init.exe;Mac/Linux,直接在终端敲:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh。 - 跟着提示走: 就像我屏幕上现在展示的,它会问你安装类型,选默认就行,敲个回车,等一小会儿,一杯咖啡没喝完就装好了!
- 验证安装: 装完之后,打开你的终端,输入
rustc --version,如果看到版本号出来,比如说“rustc 1.70.0 (904365376 2023-05-31)”,恭喜你,成功了!是不是比找免费VPN还简单?
接下来,咱们来写第一个Rust程序!
fn main() {
println!("Hello, eccfy铁子们!");
}
(屏幕上会同步展示代码编写过程和终端编译运行结果)
- 新建一个文件,命名为
main.rs,把这段代码复制进去。 - 打开终端,进入到你的文件目录,输入
rustc main.rs,回车! - 然后输入
./main(Windows是main.exe),boom!“Hello, eccfy铁子们!”就出现在你的眼前了!看,Rust就是这么酷炫!
“所有权”和“借用”:Rust内存安全的魔法!
OK So,现在大家应该已经能跑起来Rust代码了,但是!Rust最牛逼的地方,也是它“告别内存泄漏”的杀手锏,在于它的“所有权”和“借用”系统。这可不是什么虚无缥缈的概念,它是实打实的编译期检查!
(屏幕上开始展示代码对比,左边是Java/Python等语言的常见操作,右边是Rust的对应操作和可能遇到的编译错误)
我们来看一个简单的例子:
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1的所有权被转移给了s2
// println!("{}", s1); // 编译错误!s1已经失效
println!("{}", s2);
}
当你尝试打印s1的时候,Rust会给你一个大大的编译错误!“value borrowed here after move”。这就是所有权转移的体现!s1把它的“拥有权”给了s2,自己就不能再用了。这就像你把房产证给了别人,你就不能再声称自己是房主了。是不是很形象?
那么,“借用”又是怎么回事呢?
fn main() {
let s1 = String::from("hello");
let len = calculate_length(&s1); // s1被借用
println!("The length of '{}' is {}.", s1, len);
}
fn calculate_length(s: &String) -> usize { // 接收一个字符串的引用
s.len()
}
看到没?我们用&s1把s1“借”出去,calculate_length函数只是临时用一下,用完就还回来,s1的所有权还在主函数手里!这种“借而不占”的机制,完美解决了传统语言中,多个指针指向同一块内存,最后导致内存泄漏或数据竞争的问题!这简直是编程界的“定海神针”,帮你省去无数的Debug时间!
Rust实战:一个简单的命令行工具!
好,理论讲了这么多,接下来咱们来点实际的。我来带大家用Rust写一个简单的命令行查找工具,输入关键词,它能在一个文件中找到所有匹配的行。
(开始展示VS Code界面,新建项目,编写代码)
// src/main.rs
use std::env;
use std::fs;
fn main() {
let args: Vec = env::args().collect();
let query = &args[1];
let file_path = &args[2];
println!("Searching for '{}' in file '{}'", query, file_path);
let contents = fs::read_to_string(file_path).expect("Should have been able to read the file");
for line in contents.lines() {
if line.contains(query) {
println!("{}", line);
}
}
}
(屏幕上会详细演示项目初始化:cargo new minigrep,然后进入对应的目录,修改main.rs,最后编译运行)
- 打开终端,输入
cargo new minigrep,这样我们就创建了一个新的Rust项目。 - 进入
minigrep目录,打开src/main.rs,把上面的代码复制进去。 - 新建一个测试文件,比如
poem.txt,随便写几行文字,包含我们要搜索的关键词。 - 在终端输入:
cargo run keyword poem.txt。 (屏幕上会实时显示命令输入和匹配结果)
看!它是不是把包含“keyword”的行都打印出来了?酷不酷!这就是Rust的魅力,代码简洁,性能强悍,而且因为有了所有权和借用,你根本不用担心内存安全问题!这个小工具可以帮助我们更好地理解 Rust 的命令行参数处理和文件IO操作,对大家写出更复杂的后端服务非常有启发!
好了,今天的分享就到这里!Rust的强大远不止这些,它的异常处理、并发模型、宏等等都非常值得深入学习。如果你对Rust语言教程还有任何疑问,或者想知道油管怎么看的最新方法,随时在评论区留言!我会一一解答的!喜欢今天的视频,记得点赞、投币、收藏,支持一波!咱们下期视频不见不散!