十年 Python 程序员,初次尝试 Rust:“非常优秀!”

摘要:Python/ target=_blank class=infotextkey>Python 和 Rust,都是近几年深受开发者喜爱的编程语言,那么作为一个拥有十年 Python 编程经验的开发者来说,初次尝试 Rust 会有怎样的感受呢?
链接:https://karimjedda.com/carefully-exploring-rust/
作者 | Karim Jedda
译者 | 弯月 责编 | 郑丽媛
出品 | CSDN(ID:CSDNnews)
最近,我找到了一份新工作,公司最常用的编程语言之一是Rust 。
在此之前,我使用 Python 长达十年之久,主要是做数据工程的工作 。但如今,我打算尝试一下这种新的(对我来说)编程语言 。我经常在不同平台上看到各类夸赞 Rust 的文章,我想看看 Rust 是否真的不负盛名 。
Rust 与 Python 有很大的不同,因此我不打算在本文中详细说明 Rust 的独特之处 。作为初学者,我只希望尽快上手,希望能以最短的过渡,尽快用Rust 完成工作,同时也希望评估一下我自己的学习能力 。
从某种程度上来说,我更感兴趣的是 Rust 整体的使用体验,而不是具体的功能列表 。

十年 Python 程序员,初次尝试 Rust:“非常优秀!”

文章插图
设置开发环境
设置开发环境非常简单,只需参照 Rust 网站提供的示例,在终端中运行一个命令就可以了 。
当你认为一切都已安装并配置妥当,此时如果想验证 Rust 是否已正确安装,只需在空目录中创建一个空项目:
  •  
  •  
  •  
cargonew tutorial cdtutorial cargorun接下来,在文本编辑器中打开该文件夹 。如果你是新手,我推荐 VSCode,因为其中的一些扩展很有帮助,关于如何使用这些扩展的指南也很容易入手 。我推荐 rust-analyzer 作为 VSCode 的唯一扩展 。
输出与调试
如果想了解程序是如何运行的,首先要做的就是通过命令行来了解程序在干什么,以及完成了什么 。
十年 Python 程序员,初次尝试 Rust:“非常优秀!”

文章插图
此外,你还可以使用常规调试器 。在 M1 上,我推荐在 Visual Studio Code 中使用 LLDB,它不仅工作良好,通常还要比在输出结果中打印日志更为方便 。
十年 Python 程序员,初次尝试 Rust:“非常优秀!”

文章插图
到这里为止,Rust 与 Python 其实都非常相似,只不过所有命令都是通过 cargo run 运行的,而不是调用特定文件,如 python3 somefile.py 。
另外,你也可以先运行 cargo build,然后运行 target/debug/tutorial 中的文件,得到的结果是相同的 。接下来,如果将生成的文件复制到另一个位置或另一台类似的机器上,也可以正常工作,且无需安装任何与 Rust 相关的东西 。
错误处理
不得不承认,编程中总会遇到一些意外,能够以可预测的方式处理这些意外非常重要 。编程中的一大挑战就是很难考虑到程序中所有可能出现的错误,因为只要写代码就可能会出错 。
“每个人都知道调试比编写程序要难一倍 。所以,如果你在代码编写代码时就用尽了聪明才智,又如何调试呢?”
—— Brian W. Kernighan
在 Python 中,通常我们通过 try/except 方法来抛异常,并完成错误处理 。我们运行一段代码,如果出错,则通过条件来捕捉异常,如果所有条件都不匹配,则将其放入一个通用的异常中 。异常有各种不同的类别,Python 允许你在包中调用不存在的函数,并在运行时产生异常,但在 Rust 中这样做甚至无法通过编译——Rust 不允许在运行时出现任何奇怪的错误,从而消除了一大类不太容易预测的错误 。
下面通过一个例子来说明 Rust 的这种方法,同时我会用 Python 的术语进行解释 。
十年 Python 程序员,初次尝试 Rust:“非常优秀!”

文章插图

十年 Python 程序员,初次尝试 Rust:“非常优秀!”

文章插图
在上面的代码中,我们创建了一个自定义的异常,在 do_something 函数中抛出,而 main 函数会检查该异常 。上面的代码跟 try/exept 基本上一样,只不过多了一些样板代码( 这些样板代码是必须的,但以我现在的水平有点难以理解)  。
你也许会说“肯定有更好的办法”,特别是如果你有很多 Python 经验的话,的确如此,我们将不得不使用包 。。
使用外部包
与其他行业相比,编程的最大优势就是可以使用别人构建的东西 。如果你计划在程序中进行错误处理,那么有一个很好用的包 thiserror 。Rust 的包管理器是 cargo 。
Rust 中的包叫做 crate 。安装方法为编辑目录下的 Cargo.toml 文件 。在本例中,我们在 [dependencies] 后面添加 thiserror = "1.0" 就可以了 。


推荐阅读