然后可以像下面这样重写之前的代码:
【十年 Python 程序员,初次尝试 Rust:“非常优秀!”】
文章插图
现在代码看起来很正常 。与一切从头开始相比,我更喜欢这种做法 。
我花了四五年时间才找到用 Python 编程的乐趣,所以我也愿意多花些时间来探索 Rust 的高级功能 。Rust 有许多错误处理的方法,而我喜欢更简单的方法 。
我有意略过了一些简单的概念,比如“什么是 enum?” “pub 是什么意思?” “那些#标记是什么”等,因为你只需运行一下代码就能明白它们的意思 。
一切看起来都还不错 。那么,测试方面又如何呢?
编写测试
测试应该从单元测试和集成测试两个级别上着手 。实现方法有好几种,虽然你可以把测试代码和 Rust 代码放在同一个文件中(这也是官方指南的推荐),但我还是希望用一个单独的文件夹来组织所有测试代码,这样可以减少阅读代码时的负担,也可以减少编辑文件时占用的屏幕面积 。而且说实话,在编写测试和编写代码时,我的心情是不一样的 。
方法之一如下:
文章插图
然后可以用 cargo test 运行测试,结果如下:
文章插图
还有许多值得展开讲的地方,但为了避免过于复杂,我们点到为止,这算是“帕累托最优”(又称80/20法则) 。这让我想起了 pytest,一个能即刻提高舒适度的工具 。
读取文件、运行一些代码并写入另一个文件
以上,我们讨论了一些最基本的问题:输出,调试,使用外部包,以及测试 。下面,我们来做一些更有效率的事情:我们可以写一个程序来处理本地文件 。下面的例子将会读取 CSV 文件,计算一些数值,然后将输出结果 。
为了实现该程序,我们需要在 Cargo.toml 中添加以下两行设置:
- csv="1.1"
- serde={version="1", features=["derive"]}
文章插图
当然,这个程序还可以实现更多功能 。如果你有一个非常复杂的 CSV 文件,则可以在 Rust 中调用 pandsa(pola.rs)来处理数据 。我还需要进一步研究,不过似乎这种处理方法非常强大且高效 。
我认为,与 Python 相比,Rust的 CSV 处理能力不相上下,除了它能自动反序列化之外 。
最后,我们还可以添加一些测试,此处不再赘述 。
发送 HTTP 请求
下面,我们来尝试发送基本的 HTTP 请求并处理结果 。现在的绝大多数请求都需要处理 JSON 。
在 Cargo.toml 中添加如下几行代码:
我相信,Rust 的生态系统会越来越大,以覆盖更多的用例,以后利用已有的 crate 实现这一切会易如反掌 。
使用 SQLite
虽然在这篇文章中提到 SQLite 似乎有些奇怪,但我开发过的程序经常用到 SQLite 。我很喜欢 SQLite,因为它是可移植的,非常有效,而且不需要任何维护 。
用 Python 操作 SQLite 的问题永远是要不要使用 ORM 。请不要误会,SQLAlchemy 非常优秀,但在进行非常小的操作时,用它就像杀鸡用牛刀了 。而且 SQLAlchemy 带来的复杂性使它不适合小型嵌入式设备 。
反之, Rust 可以在这方面大放异彩,网上有很多如何利用Rust操作 SQLite 的例子,我认为都非常不错 。
举个简单的例子,别忘了在 Cargo.toml 中添加下面这行代码:
文章插图
该例子来自 rusqlite crate 。当然,这只是冰山一角 。但组合以上几种方法,就可以实现许多很有用的功能了 。
总结
综合考虑,Rust 是一个非常优秀的语言,有许多优秀的包,非常感谢发明这门语言并为之努力贡献的开发者们 。虽然这篇文章只是对 Rust 做了初步的探索,但我希望抛砖引玉,让初学者产生学习 Rust 的兴趣 。
推荐阅读
- python代码提速有哪些方法
- 沃尔沃xc90缺点 开了十年车 12年沃尔沃xc90怎么样
- Python 获取上市公司利润表数据
- 天下长河|《天下长河》压箱底十年,7位实力派坐镇,5大看点刷爆朋友圈
- 大S|大S经纪人:十年婚姻不是三言两语能说得清,大街上骂人,小巷子道歉
- 张敏|张敏:被向华胜追爱十年,54岁无儿无女,如今情感状况如何了?
- |八十年代的农村电影放映员很吃香,你知道为什么吗?
- 春晚|她是春晚最美钉子户,出道几十年0绯闻,台下气场全开大长腿吸睛
- 汪小菲|汪小菲爽约未现身机场,大S谎言被揭穿,十年前就与具俊晔见过面
- 高圆圆|高圆圆怎么也不会想到,自己近十年辛苦营造的魅力人设就这样被央视的镜头出卖了。