网站首页 > 开源技术 正文
Rust是Mozilla开发的注重性能和内存安全的语言,它的设计目的是逐渐取代C/C ++,但这个过程还需要一段时间。
值得肯定的是,Rust在现有阶段可以取代传统上部分C语言库。用于统计和机器学习的Python系统中的大部分内容都是用C语言编写而成的,所以模块被重写的可能性非常大。
虽然Rust是编译型语言,Python是解释型语言,但是由于两者的ABI(应用程序二进制接口)在设计上存在相似性,Rust代码可以应用到Python上。现在一些Rust包已经被用于Python绑定,通过Rust库也可以将C语言的API应用到Python上。
大量新项目的应用使得开发Rust库更容易,方便绑定Python和部署具有Rust二进制文件的Python软件包。下面4个项目的实际应用,说明结合Python与Rust在一定程度上完全可以取代C/C ++。
Rust-CPython
定义:Rust-Cpython就是在Rust中CPython运行时的一组绑定,Rust程序连接到CPython上,使用它的ABI来运行Python程序,在Rust环境下与Python的面向对象一起工作。
适用对象:熟练使用控制CPython的Rust程序员。需要注意的是,由于Python对象管理方式的问题,Rust的内存安全性能并不能完全发挥作用,所以使用要谨慎。
PyO3
定义:对于Rust开发人员来讲,PyO3项目提供了两个方向的基本方法来编写绑定Python的Rust软件。Rust程序可以与Python对象和解释器接口,并且可以与C模块相同的方式将Rust应用到Python中。
PyO3支持的Python功能有限,但是实现最基本的功能还是可以的。PyO3惯用的Rust功能是通过装饰既有代码去实现Python-aware。
适用人员:那些编写与Python运行直接交互模块的程序员。
Snaek
定义:在这个项目的早期阶段,Snaek允许开发人员根据需要创建加载Python动态的Rust库,但是这个Rust库不依赖于静态连接Python的运行。Rust库使用Snaek时,不需要专门针对Python进行编写,只公开C语言兼容的方法就可以了。但Snaek的一个潜在缺点是不能使用ctypes,ctypes是与C代码接口的标准Python库,它使用的是cffi。cffi是由PyPy团队开发的一个备选库,学习cffi并不难,但如果真的要使用cffi,一些已经使用ctypes的项目都需要重写。
适用人员:将Rust写入的方法应用到Python脚本中或想对Python做进一步了解的Rust程序员。
Cookiecutter
定义:这个项目涉及将二进制模块与Python库绑定时出现的常见问题。Cookiecutter从模板创建Python项目,可用的模板Cookiecutter PyPackage Rust Cross-Platform Publish简化了将Rust二进制文件与Python库捆绑在一起的过程。
这个项目非常重要的目标是能够生成二进制分发(Wheel),这样就不需要最终用户自己编译Rust代码。Windows用户经常因为缺乏预编译的Windows二进制Python包在工作中受阻,所以这个项目应该是非常受欢迎的。
适用人员:那些用Rust绑定创建许多Python项目或试图发布项目的程序员。
猜你喜欢
- 2024-10-07 9月编程语言排行榜|C语言跌出前三历史最低,Python创新高
- 2024-10-07 9 月编程语言排行榜|C语言跌出前三历史最低,Python 创新高
- 2024-10-07 c语言和Python双剑合璧“天下无敌”
- 2024-10-07 “挑战用 500 行 Python 写一个 C 编译器”
- 2024-10-07 C、Java、C#、Python、Ruby、Go、C++ 和JavaScript 工作机制概述
- 2024-10-07 C 语言的诞生,竟然是一个失败的项目?
- 2024-06-28 Python语言的12个基础知识点小结
- 2024-06-28 禁用Python的GC机制后,Instagram性能提升10%
- 2024-06-28 为什么 Python 程序员有必要学习一下 C++?
- 2024-06-28 PyPy为什么能让Python比C还快?一文了解内在机制
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)