 Python

Rust正在取代C作为高性能Python包的“后端”主力语言。为什么? 让我们从激励我们的问题开始:Python易于编写,但运行缓慢。它太慢了,以至于无法用纯Python编写高性能库,尤其是无法用这种方式编写数据处理库。然而,Python是ML和数据工程的主导语言。因此,如果你想为数据工程师、ML工程师等编写一个库,你会发现自己处于以下情况:

API需要使用Python您不能将Python用于高性能数据处理的“实际工作”。

从历史上看,这意味着未来的图书馆作家必须做两件事之一:

学习用C语言编程,或者。。。希望其他人学会了用C语言编程,并且他们写了一个库,你可以依靠它来获得低级的东西。

“好吧,”C爱好者可能会问,“这有什么不好的?”也许大多library 作者可以通过将数字运算外包给numpy或scipy来完成这项工作。在少数真正必要的情况下,他们当然可以学习一点C。这会培养性格。 在实践中,它只是没有那么好用。当它工作时,能够将事情外包给numpy、scipy等是很好的,但必须对每个函数进行矢量化,并且不能为循环编写是一种痛苦。想知道某些东西是否会被GIL阻断是一件痛苦的事。并不是所有你想做的事情都能很好地适应现有的库。 好吧,那么选项#2呢:为什么不用C从头开始编写库,并添加一些Python绑定呢?问题是,如果你来自Python背景,用C语言编程会显得非常低级;学习这门语言需要一些努力。空指针取消引用、缓冲区溢出、内存泄漏……这些只是用C进行自我攻击的许多有趣方法中的一小部分,所有这些对本地Python程序员来说都是陌生的。 如果有更好的方法就好了。如果有一种语言能像C一样快速、高效地使用内存,但不需要手动内存管理或垃圾收集就好了。如果该语言拥有出色的Python工具和蓬勃发展的现有开发人员社区就好了。要是…就好了

呂 Rust

Rust速度快,内存效率高。它使并行和并发编程变得更容易。它有很棒的工具和友好的编译器。它有一个庞大而快乐的开发者社区。Rust会让你跑得更快,跳得更高,在学校里结交更多的朋友。 而且,最重要的是,Python开发人员学习Rust比学习C更容易。 “第一级”体验更好,因为新手更容易在Rust中编写“安全”的代码。学习曲线更平滑,随着时间的推移,您可以学习到更高级的语言功能。 因此,在过去的几年里,我们看到一些具有Python前端的高性能库选择Rust作为后端。例如

Polars是一个快速、高度并行、内存高效的库,用于处理DataFrames。Polars的作者Ritchie Vink为Polars考虑了几种不同的语言,最终选择了Rust。以下是里奇对优势的看法。

“我认为数据工程/科学将继续由连接低级别编译二进制文件的高级语言主导。多线程,该主机语言的性能无关紧要,因为工作将传递给他们分配的工具。 因此,我们可以使用C、C++、Rust、Zig或Fortran。 Zig很年轻,但它可能会成为新的C。 Rust,IMO已经做好了成为新C++的准备。 在这些语言中,Rust拥有最好的工具。 借用检查器保证安全的内存使用和安全的并发性。这与其出色的工具(crates.io、pyo3)一起,使其成为构建低级工具的最佳语言。 因为默认情况下是安全的,新语言学习者也可以轻松地开始构建工具并逐步学习。我今天看到了这种情况,很多Python用户都在写Rust,完成了任务,并对他们获得的加速感到高兴。 简而言之,我认为Rust具有最好的正确性保证,是一种现代系统语言。”

Lance是一个高性能、低成本的矢量数据库。Lance的创始人Chang She和Lei Xu最初用C++编写代码库,后来决定改用Rust,尽管团队拥有丰富的C开发经验。这是张向我解释的。

“对我们来说,从C++切换到Rust的决定主要是因为我们可以在不损失性能的情况下提高工作效率,而不必处理CMake。我们基本上是从零开始学习Rust的,在这样做的同时,雷和我在大约三周内将Lance重写为Rust(替换了大约四个月的C++代码)此外,每次发布时,我们都更有信心在Rust中发布新功能,而不用担心它会破坏其他命令。” Rust不仅仅用于数据处理,它还是许多其他具有高性能需求的Python包的有用后端。例如

Ruff是一个速度极快的Python linter,用Rust编写。以下是Ruff创始人和Astral创始人Charlie Marsh关于Rust在Python生态系统中成功的原因。

“作为系统编程的新手,Rust提高了我可以构建的软件的上限。作为一种语言,它让你(或:强迫你)在编写高性能代码时关心重要的细节:你在哪里、何时分配,如何在内存中布局数据等等。更高级别的语言保护你不受这些细节的影响,这是有充分理由的;但对于某些类别的软件来说,它们是您构建的核心。Rust使您能够在不牺牲抽象的情况下在这些较低级别上进行操作。 不过,最终,我相信Rust的成功很大程度上来自于它的工具(Cargo),以及语言和生态系统本身的可访问性。我职业生涯的大部分时间都在写Python、TypeScript和Java,Ruff是我第一次尝试在Rust中从头开始构建一些东西。Rust不是一门容易学习的语言,但根据我的经验,困难来自于学习新概念和新思维模式,而不是与构建问题或不透明错误作斗争。对我来说,Rust使系统编程变得平易近人,这让我非常看好它作为Python和其他高级语言的补充的未来。”

Pydantic是一个开发人员友好的Python验证库。Pydantic团队在Rust中编写了V2,即使是简单的型号,性能也提高了20倍。除了性能,Rust还有其他好处。Pydantic创始人Samuel Colvin为我召集了一些人。

“关于Rust的另一点是,它不仅速度更快,而且在Rust中编写和维护坚如磐石的代码也会容易得多。特别是,Rust强制您捕获和处理所有可能的错误,而Python(和TypeScript)的类型系统会忽略错误,所以我可以调用‘foobar()我不知道在什么情况下会出现什么例外。我基本上必须反复试验,找出可能失败的地方。”

Python 欄 Rust

我们认为,我们将继续看到更多的库,其中Python前端用于人体工程学,Rust后端用于性能。结果是Python开发人员现在有了一条更好、更顺畅的构建高性能库的道路。

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。