首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

越来越多的 Python 开发者加入 Rust 队伍!

未来我们将看到更多以Python作为前端(提高编程效率)并以Rust作为后端(为了性能)的库。

未经允许,禁止转载!

作者 | Slater Stich       译者 | 弯月

责编 | 夏萌

出品 | CSDN(ID:CSDNnews)

Python

Rust正在取代C成为高性能Python软件包的“后端”工作语言。原因是什么呢?

首先,我们来看看动机问题,Python编写起来很方便,但运行速度慢。Python的速度实在太慢了,以至于你无法使用纯Python编写高性能库,尤其是无法编写数据处理库。然而,Python是机器学习和数据工程的主导语言。因此,如果你想为数据工程师、机器学习工程师等编写库,就会遇到以下问题:

你需要使用Python编写API,但是你不能使用Python完成高性能的数据处理工作。

这意味着,如果你想编写库就必须:

学习使用C编程,或祈祷有人学习使用C编程,并编写一个库,而你可以依赖这些库来实现底层的操作。

熟悉C语言的人可能会问,这有什么不好吗?也许大多数库的作者都可以将数值计算外包给NumPy或SciPy。而在确实需要时,他们也可以学一点C。

然而,情况并不是那么理想。尽管将一些任务外包给NumPy、SciPy等库确实很方便,但我们不得不向量化每个函数,而且还不能使用for循环写代码,这很痛苦。担心某些操作会被全局解释器锁(GIL)阻塞也很令人头疼,还有其他各种问题。并非你想做的一切都能轻松地找到现有库。

那么,还有一种办法,为什么不从头开始用C编写库,并加上一些Python绑定呢?问题在于,如果你有Python背景,那么使用C编程对你来说会显得非常底层,学习这种语言需要花费一些功夫。空指针解引用、缓冲区溢出、内存泄漏……这些都是使用C语言时可能遇到的陷阱,这些对于一开始就学Python程序员来说都是陌生的。

如果有更好的办法;如果有一种语言速度和内存效率与C语言相当,但不需要手动内存管理或垃圾回收;如果这种语言拥有出色的Python工具支持和一个蓬勃发展的开发者社区,那该多好啊。

Rust

Rust的速度很快,且内存管理高效。因此,并行和并发编程更加容易。Rust具有出色的工具和友好的编译器,拥有一个庞大而活跃的开发者社区。Rust可以让程序加快运行速度,跳得更高,而且还能在学习中交到更多朋友。

最重要的是,对于Python开发者来说,学习Rust比学习C更容易。

“第一层”体验更好,因为新手更容易使用Rust编写“安全”代码。学习曲线更平滑,可以随着时间的推移逐渐掌握更高级的语言特性。

因此,在过去的几年里,我们看到一些以Python作为前端的高性能库选择Rust作为后端。例如:

1. Polars

这是一个用于处理数据框的、快速、高度并行、内存高效的库。olars的作者Ritchie Vink考虑了几种不同的语言,最终选择了Rust。以下是Ritchie认为Rust具有的优势。

“我认为,数据工程/科学将继续由连接低级编译二进制文件的高级语言主导。该主机语言的多线程和性能并不重要,因为这些工作将传递给下游的工具。

因此,我们会选择C、C++、Rust、Zig或Fortran。

Zig还很年轻,但它可能会成为新的C。

在我看来,Rust已做好准备成为新的C++。

在这些语言中,Rust具有最好的工具支持(也许将来Zig也可以)……

借用检查器能够保证内存的安全使用和安全的并发。加上出色的工具(crates.io、pyo3),使其成为构建低级工具的最佳语言。

由于默认是安全的,新手也可以轻松地构建工具并逐步学习。如今就是这种情况,许多Python用户在编写Rust,不仅可以顺利完成工作,而且性能提升也很满意。

简而言之,我认为Rust具有最佳正确性保证,并且是一种现代系统语言。”

2. Lance

这是一款高性能、低成本的矢量数据库。创始人Chang She和Lei Xu最初使用C++编写了代码库,后来决定切换到Rust,尽管他们拥有丰富的C开发经验。Chang做这个决定的理由如下:

“对我们来说,从C++切换到Rust的决定主要是因为我们可以更有效率地工作,不会失去性能,而且不用再处理CMake。我们基本上是从零开始学习Rust,在学习的同时,Lei和我在大约三周的时间里用Rust重新编写了Lance(替换了大约四个月的C++代码)。此外,每次发布使用Rust编写的新功能时,我们更有信心,不用担心在执行每个其他命令时引发段错误。”

Rust不仅适用于数据处理,而且也可作为许多其他具有高性能要求的Python软件包的后端。

例如:

3. Ruff

Ruff是一个用Rust编写的、速度非常快的Python代码检查工具。以下是Ruff的创作者和Astral创始人Charlie Marsh阐述的关于在Python生态系统中使用Rust取得成功的原因。

“作为系统编程的新手,Rust提高了我构建软件的能力。作为一门语言,Rust会让你(或者说是强迫你)关注编写高性能代码的重要细节:何处以及何时分配内存,如何在内存中布置数据等等。高级语言会保护你免受这些细节的困扰,虽然背后的理由很充分,但对于某些类别的软件来说,它们是构建软件的核心。Rust能够在不牺牲抽象的情况下,在这些较低级别上操作。”

然而,我相信Rust的许多成功来自于它的工具(Cargo)以及语言和生态系统本身的易用性。我的大部分职业生涯使用的都是Python、TypeScript和Java,Ruff是我首次尝试从头开始使用Rust构建的产品。Rust并不是一门易学的语言,但根据我的经验,难度主要来自于学习新概念和新思维方式,而不是与构建问题或一些莫名其妙的错误做斗争。对于我来说,使用Rust可以进行系统编程,因此我很看好Rust作为Python和其他高级语言的补充。”

4. Pydantic

这是一个面向开发者的Python验证库。Pydantic团队使用Rust编写了第二版,并看到性能提升了20倍,即使对于简单的模型也是如此。除了性能之外,Rust还有其他的优点。Pydantic的创始人Samuel Colvin提到了其中一些:

“关于Rust的另一点是,不仅速度很快,而且使用Rust编写和维护的代码通常更容易。特别是,Rust会强制捕获和处理每一个可能的错误,而Python(以及TypeScript)的类型系统会忽略这些错误,因此我可以调用 'foobar()',而根本不知道在什么情况下可能引发什么异常。基本上,我必须通过反复试验来找出可能会失败的地方。”

Python与Rust的结合

我们认为,未来我们将看到更多以Python作为前端(提高编程效率)并以Rust作为后端(为了性能)的库。总的来看,如今的Python开发者在构建高性能库方面有更好、更顺畅的途径。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OvHbvzqsaT8Q5poV4T85Atyw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券