首页 > 编程语言 >Rust vs C++:2024,谁更懂错误处理?

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

时间:2024-04-03 12:00:26浏览次数:31  
标签:Err 贾克强 双嘉 2024 vs contents file 错误处理 Rust

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

「席双嘉,听说你的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),
    }
}
<

标签:Err,贾克强,双嘉,2024,vs,contents,file,错误处理,Rust
From: https://blog.csdn.net/wuzhenben/article/details/137338602

相关文章

  • 有锁编程 vs 无锁编程
    什么是无锁编程?简单来说就是有没有block住其他线程,没有,那就是无锁编程。https://preshing.com/20120612/an-introduction-to-lock-free-programming/区别......
  • 界面控件Kendo UI for jQuery 2024 Q1亮点 - 新的ToggleButton组件
    Telerik & KendoUI 2024Q1版本于2024年初发布,在此版本中将AI集成到了UI组件中,在整个产品组合中引入AIPrompt组件以及10多个新的UI控件、支持Angular17、多个数据可视化功能增强等。P.S:KendoUIforjQuery提供了在短时间内构建现代Web应用程序所需的一切,从众多UI子控件中......
  • 界面控件Kendo UI for jQuery 2024 Q1亮点 - 新的ToggleButton组件
    Telerik & KendoUI 2024Q1版本于2024年初发布,在此版本中将AI集成到了UI组件中,在整个产品组合中引入AIPrompt组件以及10多个新的UI控件、支持Angular17、多个数据可视化功能增强等。P.S:KendoUIforjQuery提供了在短时间内构建现代Web应用程序所需的一切,从众多UI子控......
  • 界面控件DevExtreme JS & ASP.NET Core 2024年度产品规划预览(一)
    在本文中我们将介绍今年即将发布的v24.1附带的主要特性,这些特性既适用于DevExtreme JavaScript(Angular、React、Vue、jQuery),也适用于基于DevExtreme的ASP.NETMVC/Core控件。注意:本文中列出的功能和特性说明官方当前/预计的发展计划,此信息仅供参考之用,其中列出的功能/产品可......
  • VS2022+QT5.14.2开发VS QT Tool的使用
    1.安装环境vs2022+QT5.14.2qtvstool(vsaddin)的使用遇到的坑1.安装qt-vsaddin-msvc2022-3.0.2.vsix安装失败2.安装qt-vsaddin-msvc2022-2.8.0.vsix在qtSetting->qtmodels模块管理中,没有Selectmodel的功能选项如下图位置3.卸载版本vsaddin_2.8.0后安装qt-vsaddin-msvc2......
  • 【2024-04-02】中医放血
    20:00绿遍山原白满川,子规声里雨如烟。乡村四月闲人少,才了蚕桑又插田。                                                 ——《乡村四月》宋·翁卷昨天,我去看了中医,是......
  • 【2024-04-01】连岳摘抄
    23:59记住,只有一个时间是重要的,那就是现在。它之所以很重要,是因为它是我们有所作为的时间。                                                 ——列夫·托尔斯泰半......
  • 2024.04.02
    在这个任务中,你需要实现前端上传Excel文件,然后将文件传输到后端,后端再将Excel文件解析并将数据插入数据库。下面是一种可能的实现方法:前端(Vue.js):使用<el-upload>组件实现文件上传功能,并绑定一个上传文件的事件。通过Axios或其他方式将上传的Excel文件发送到后端。......
  • 2024年度4-5月书单-挂书香斋-湖北省随州市广水市印台书院
     书香斋  ......
  • 2024年4月2日-UE5-普通攻击,动画蒙太奇
    创建一个输入,普通攻击 在战斗意境里,添加普通攻击,然后设置鼠标左键是触发按键 在角色总类里面添加普通攻击,把刚才创建的导入进来 找到资源里的攻击动作,把他转换为蒙太奇,用来绑定攻击动作 然后改名 在主角动画蓝图里添加一个插槽,意思是播放之前设置的移动动作中优......