zoukankan      html  css  js  c++  java
  • 为什么要用Rust取代C/C ++重写Python底层?

    https://www.techug.com/post/rewrite-python-with-rust.html?utm_source=tuicool&utm_medium=referral

    Rust是Mozilla开发的注重性能和内存安全的语言,它的设计目的是逐渐取代C/C ++,但这个过程还需要一段时间。

    值得肯定的是,Rust在现有阶段可以取代传统上部分C语言库。用于统计和机器学习的Python系统中的大部分内容都是用C语言编写而成的,所以模块被重写的可能性非常大。

     
    图0:为什么要用Rust取代C/C ++重写Python底层?

    虽然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的内存安全性能并不能完全发挥作用,所以使用要谨慎。

     
    图1:为什么要用Rust取代C/C ++重写Python底层?

    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程序员。

     
    图2:为什么要用Rust取代C/C ++重写Python底层?

    Cookiecutter

    定义:这个项目涉及将二进制模块与Python库绑定时出现的常见问题。Cookiecutter从模板创建Python项目,可用的模板Cookiecutter PyPackage Rust Cross-Platform Publish简化了将Rust二进制文件与Python库捆绑在一起的过程。

    这个项目非常重要的目标是能够生成二进制分发(Wheel),这样就不需要最终用户自己编译Rust代码。Windows用户经常因为缺乏预编译的Windows二进制Python包在工作中受阻,所以这个项目应该是非常受欢迎的。

    适用人员:那些用Rust绑定创建许多Python项目或试图发布项目的程序员。

  • 相关阅读:
    设计模式Day02
    OA,ERP等源码一部分演示
    第三方登录
    其实没那么复杂!探究react-native通信机制
    学习面试题(day01)
    学习面试题Day02
    学习面试题Day03
    python 字典排序
    Mac系统下adb工具的配置
    Mac adb 安装
  • 原文地址:https://www.cnblogs.com/dhcn/p/12973570.html
Copyright © 2011-2022 走看看