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),}
}
<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588877.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站保安大作战:HTML代码加固技术攻略

引言 HTML是网站开发的基础语言&#xff0c;它的安全性直接关系到网站的安全性。为了保障网站的安全性&#xff0c;我们需要加固HTML代码。本文将介绍一些具体方法&#xff0c;帮助你加固HTML代码&#xff0c;提高网站的安全性。 摘要 本文将介绍以下几种方法来加固HTML代码…

36.not comply with the UI component syntax不允许在UI描述里直接使用

不允许在UI描述里直接使用&#xff0c;但可以在方法或者函数里使用 not comply with the UI component syntax. <etsLint> 这里ok:

商标撤销,华为还能“遥遥领先“吗?

华为不再"遥遥领先"? 去年 9 月&#xff0c;华为技术有限公司申请注册两枚「遥遥领先」商标&#xff0c;国际分类为「科学仪器」和「运输工具」。 今年 1 月 20 日&#xff0c;商标流程信息显示&#xff0c;上述两枚商标被撤回注册申请&#xff0c;当前为无效状态。…

openGauss学习笔记-254 openGauss性能调优-使用Plan Hint进行调优-子链接块名的hint

文章目录 openGauss学习笔记-254 openGauss性能调优-使用Plan Hint进行调优-子链接块名的hint254.1 功能描述254.2 语法格式254.3 参数说明254.4 示例 openGauss学习笔记-254 openGauss性能调优-使用Plan Hint进行调优-子链接块名的hint 254.1 功能描述 指明子链接块的名称。…

根据用户角色权限,渲染菜单的一个问题记录

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 背景 之前一直讲过自己独立在做一个中后台管理系统&#xff0c;当然这个只是开始&#xff0c;未来会基…

IP地址如何修改?分享操作技巧

在互联网世界中&#xff0c;IP地址是每台计算机或网络设备的唯一标识&#xff0c;它决定了设备在网络中的位置以及与其他设备的通信方式。然而&#xff0c;有时出于特定需求&#xff0c;我们可能需要修改设备的IP地址。虎观代理将详细阐述如何修改IP地址&#xff0c;并探讨在修…

通过nvtx和Nsight Compute分析pytorch算子的耗时

通过nvtx和Nsight Compute分析pytorch算子的耗时 一.效果二.代码 本文演示了如何借助nvtx和Nsight Compute分析pytorch算子的耗时 一.效果 第一次执行,耗时很长 小规模的matmul,调度耗时远大于算子本身 大规模的matmul,对资源的利用率高小规模matmul,各层调用的耗时 二.代码…

RuntimeError: Error compiling objects for extension虚拟环境和系统环境——添加、删除、修改环境变量

前言&#xff1a;因为一个报错RuntimeError: Error compiling objects for extension 没有配置cl.exe环境变量&#xff0c;我的应用场景是需要搞定虚拟环境变量配置 RuntimeError: Error compiling objects for extension手把手带你解决&#xff08;超详细&#xff09;-CSDN博…

RJ61BT11 三菱iQ-R系列CC-Link系统主站/本地站模块

RJ61BT11 三菱iQ-R系列CC-Link系统主站/本地站模块 RJ61BT11参数说明&#xff1a;CC-Link Ver.2版本&#xff0c;主站/本地站 三菱iQ-R系列CC-Link系统主站/本地站模块RJ61BT11产品规格&#xff1a; [传送速度] 156K/625K/2.5M/5M/l0Mbps(可选) [最多连接个数(主站时)] 64个 …

Vue项目中引入外部字体文件

1、导入字体文件&#xff08; .ttf格式&#xff09; 1.下载相应的字体文件&#xff0c;或者找ui设计师要一份。一般字体文件使用 .ttf 格式的即可。 将准备好的字体文件&#xff0c;放在项目中&#xff0c;文件目录示例如下&#xff1a; 2.创建一个font.css文件用于定义这个字…

zookeeper如何管理客户端与服务端之间的链接?(zookeeper sessions)

zookeeper客户端与服务端之间的链接用zookeeper session表示。 zookeeper session有三个状态&#xff1a; CONNECTING, ASSOCIATING, CONNECTED, CONNECTEDREADONLY, CLOSED, AUTH_FAILED, NOT_CONNECTED&#xff08;start时的状态&#xff09; 1、CONNECTING 。 表明客户…

开源大模型AI代理操作系统:像Windows一样,操控AI代理

去年&#xff0c;AutoGPT的出现让我们见识到了AI代理强大的自动化能力&#xff0c;并开创了一个全新的AI代理赛道。但在子任务调度、资源分配以及AI之间协作还有不少的难题。 因此&#xff0c;罗格斯大学的研究人员开源了AIOS&#xff0c;这是一种以大模型为核心的AI代理操作系…