首页 / 后端开发 / Rust新手快速上手!告别“内存泄漏

Rust新手快速上手!告别“内存泄漏”噩梦,手把手教你写出高性能安全代码!

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

兄弟姐妹们,大家好啊!我是你们的老朋友eccfy,今天咱们不聊别的,直接上硬核干货!要说什么编程语言现在最火、最能解决后端开发的痛点,那毫无疑问就是Rust!它号称能让你的代码告别“内存安全”的噩梦,写出如同火箭般飞快的程序!是不是有点心动了?OK So,这次我来当一回“B站大学教授”,手把手带大家从零入门Rust,甚至还能做出一个实际的小Demo!

Rust安装与第一个“Hello World”!

性价比88易用性82稳定性95安全性90客服75

好,废话不多说,Show Time!

首先,你得有Rust环境,对不对?别担心,超级简单!

  1. 下载安装器: 打开你的浏览器,直接搜索“Rust 安装教程”,你会找到官方的 Rustup 页面。这里会有详细的安装指令。对于Windows用户,下载rustup-init.exe;Mac/Linux,直接在终端敲:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh。
  2. 跟着提示走: 就像我屏幕上现在展示的,它会问你安装类型,选默认就行,敲个回车,等一小会儿,一杯咖啡没喝完就装好了!
  3. 验证安装: 装完之后,打开你的终端,输入rustc --version,如果看到版本号出来,比如说“rustc 1.70.0 (904365376 2023-05-31)”,恭喜你,成功了!是不是比找免费VPN还简单?

接下来,咱们来写第一个Rust程序!

fn main() {
    println!("Hello, eccfy铁子们!");
}

(屏幕上会同步展示代码编写过程和终端编译运行结果)

  1. 新建一个文件,命名为main.rs,把这段代码复制进去。
  2. 打开终端,进入到你的文件目录,输入rustc main.rs,回车!
  3. 然后输入./main(Windows是main.exe),boom!“Hello, eccfy铁子们!”就出现在你的眼前了!看,Rust就是这么酷炫!

“所有权”和“借用”:Rust内存安全的魔法!

Q1需求调研Q2产品开发Q3内测上线Q4全面推广

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,最后编译运行)

  1. 打开终端,输入cargo new minigrep,这样我们就创建了一个新的Rust项目。
  2. 进入minigrep目录,打开src/main.rs,把上面的代码复制进去。
  3. 新建一个测试文件,比如poem.txt,随便写几行文字,包含我们要搜索的关键词。
  4. 在终端输入:cargo run keyword poem.txt。 (屏幕上会实时显示命令输入和匹配结果)

看!它是不是把包含“keyword”的行都打印出来了?酷不酷!这就是Rust的魅力,代码简洁,性能强悍,而且因为有了所有权和借用,你根本不用担心内存安全问题!这个小工具可以帮助我们更好地理解 Rust 的命令行参数处理和文件IO操作,对大家写出更复杂的后端服务非常有启发!

好了,今天的分享就到这里!Rust的强大远不止这些,它的异常处理、并发模型、宏等等都非常值得深入学习。如果你对Rust语言教程还有任何疑问,或者想知道油管怎么看的最新方法,随时在评论区留言!我会一一解答的!喜欢今天的视频,记得点赞、投币、收藏,支持一波!咱们下期视频不见不散!

延伸阅读