Rust vs C++:2024,谁更懂错误处理?

讲动人的故事,写懂人的代码

「席双嘉,听说你的C++项目又因为忘了检查返回值导致内存泄漏,又加班了?」

周五中午,在国内某科技巨头熙熙攘攘的员工餐厅,贾克强半开玩笑地戳了戳坐在隔壁的席双嘉,眼神中满是戏谑。

贾克强,一个热衷于Rust的程序员,总是乐于挑战和探索新技术的边界。

而席双嘉,则是那种深耕于C++领域,有着丰富经验和对性能追求无比执着的老兵。

席双嘉苦笑着摇头,「是啊,这不还是‘常规操作’嘛。我有异常处理,怕啥。」

「‘常规操作’?”贾克强一边调侃,一边用手比划了一个广场舞的动作,“我宁愿跳广场舞,也不想跟着内存泄漏的节奏扭腰。」

席双嘉自嘲地笑了笑,「说得好像你们用Rust能就免疫这些问题似的。」

1 代码对决

这时,贾克强提出了一个小比赛的想法。就是两人午餐后,回到工位,在30分钟内,各自用Rust和C++实现同一个功能——读取文件到字符串中,看看谁的代码不仅稳定还能效率更高。

席双嘉立刻来了精神,眼睛一亮,「好啊,如果我赢了,今晚的加班夜宵你买单!」

贾克强笑着拍胸脯,「行!但如果我赢了,你得穿上我给你准备的‘安全第一,我用Rust’的T恤,还要给团队做个分享。」

两人一拍即合。

午餐后,两人拿着笔记本电脑,步入配备先进设施的会议室。

贾克强把桌上的计时沙漏倒过来,计时开始。

席双嘉不到10分钟就写完了。贾克强大概用了20分钟。

他们各自在大型电视屏幕上展示自己的代码。

贾克强的Rust代码,显示在左边的电视上。

席双嘉的C++代码,则显示在右边。

2 Rust代码讲解

贾克强展示了他写的Rust代码。

use std::fs::File;
use std::io;
use std::io::Read;

// 定义一个函数,尝试读取文件到字符串中
// 这个函数返回 Result 类型,要么是包含文件内容的 String,要么是 io::Error
fn read_file_to_string(path: &str) -> Result<String, io::Error> {
    let mut file = match File::open(path) {
        Ok(file) => file,
        Err(e) => return Err(e),
    };

    let mut contents = String::new();
    match file.read_to_string(&mut contents) {
        Ok(_) => Ok(contents),
        Err(e) => Err(e),
    }
}

// 使用 Option 类型处理可能的空值
fn find_first_line(contents: &str) -> Option<&str> {
    contents.lines().next()
}

fn main() {
    // 尝试读取一个文件
    match read_file_to_string("hello.txt") {
        Ok(contents) => {
            // 尝试找到文件的第一行
            match find_first_line(&contents) {
                Some(line) => println!("First line: {}", line),
                None => println!("File is empty"),
            }
        }
        Err(e) => println!("Error reading file: {}", e),
    }
}

然后他开始给席双嘉讲解。

「这段Rust代码读取一个文件,并打印文件的第一行。」

「它使用Rust的错误处理和Option类型来处理错误和空值。」

2.1 main()函数

main函数是程序的入口点。这个函数调用了 read_file_to_string 函数。使用了硬编码文件名 "hello.txt"。这个函数要打开并读取文件到一个字符串中。」

fn main() {
    // 尝试读取一个文件
    match read_file_to_string("hello.txt") {
        Ok(contents) => {
        // ...
        }
        Err(e) => println!("Error reading file: {}", e),
    }
}
<
  • 34
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值