Rust 是否会重写 Python 解释器与有关的库,替代 C 语言地位?

背景

近2年随着Rust语言的大力发展,一些系统与软件开始逐渐使用Rust语言来实现,并且一些大型公司也开始逐渐转向Rust

因为在学习 Polars 库时,看到该库是使用Rust实现的,小编近一年也逐渐开始学习Rust语言,了解到其中的一些思想相对其他语言来说确实比较先进,所有权概念的引入,不仅可以提升性能,而且还保证了数据安全、准确,不会有数据竞争问题的产生

小编最近在处理加解密任务时,借助Rust语言实现了一个DES加解密库,借助Rust 中的 pyo3 包,在Python 中借助 maturin 库,可以把 Rust 实现的库转换为 Python 的包,供Python调用

DES加解密,Rust实现

use pyo3::prelude::*;use openssl::provider::Provider;
use openssl::symm::{Cipher,encrypt,decrypt};
use hex;const KEY:&[u8; 8]=b"ABCD1234";
const IV:&[u8; 8]=b"ABCD1234";#[pyfunction]
fn des_encrypt(data:String)-> String {let _provider = Provider::try_load(None, "legacy", true).unwrap();let cipher: Cipher = Cipher::des_cbc();let ciphertext = encrypt(cipher, KEY, Some(IV), data.as_bytes());hex::encode(&ciphertext.unwrap()).to_uppercase()}#[pyfunction]
fn des_decrypt(data:String)-> String {let _provider = Provider::try_load(None, "legacy", true).unwrap();let cipher: Cipher = Cipher::des_cbc();match hex::decode(&data) {Ok(bytes) => {// println!("Decoded: {:?}", bytes); // 输出: [104, 101, 108, 108, 111]// println!("{:?}", des_decrypt(&bytes));match decrypt(cipher, KEY, Some(IV), &bytes) {Ok(bytes) => {// println!("Decoded: {:#?}", bytes); // 输出: [104, 101, 108, 108, 111]match String::from_utf8(bytes) {Ok(string) => string, // 输出: "hello"Err(_) => "".to_string(),}},Err(_) => "".to_string(),}},Err(_) => "".to_string(),}}#[pymodule]
fn des_rust(_py: Python, m: &PyModule) -> PyResult<()> {m.add_function(wrap_pyfunction!(des_encrypt, m)?)?;m.add_function(wrap_pyfunction!(des_decrypt, m)?)?;Ok(())
}

然后利用 Maturin 进行打包,可以生成 Python 的库/包/轮子,小编这里生成的是 des_rust-0.1.0-cp37-abi3-win_amd64.whl

然后安装该包后,即可在Python中进行使用

Python 使用

from des_rust import des_decrypt,des_encryptdata=des_decrypt(des_encrypt('DataShare'))print(data)    #DataShare

通过性能测试,效率相对使用Python实现的包,性能有大幅提升

进一步思考

通过以上的案例,小编走通了从Python中调用Rust代码的流程,结合小编学习 Rust 的思考,那么Rust + Python 结合,是否会成为将来数据分析、机器学习领域的趋势?

  • Python 比较灵活,拿来即用,学习起来也容易,现在普及程度也很广,最重要的是能很快出成果,处在现阶段的社会,出成果很重要,有的老板恨不得第1天晚上想出了一个idea,第2天就想要成果,当然这个也不能怨老板,只能说现阶段竞争很激烈

  • Rust 内存安全、性能高,可以弥补Python 的不足,截止当前已经有很多Python 库是使用Rust 实现的,随着老板的想发愈发复杂,想提升数据处理性能,只能使用底层的语言实现,但也不能另起炉灶,否则前期的工作相当于白做,而且业务也需要快速迭代

Rust + Python 结合是否会成为将来数据领域的趋势呢?让我们拭目以待

历史相关文章

  • 《精益数据分析》读书分享-----增长引擎说
  • 吴军老师的《计算之魂》部分重点摘要

以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号:DataShare ,不定期分享干货

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544797.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

并发编程。

进程 1.什么是进程&#xff1f; 进程是具有独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的 独立单位。进程是可与其他程序并发执行的程序&#xff0c;在一个数据集合上的运行过程。它是系统进行 资源分配和调度的一个独立单位。 2.进…

日丰卫浴启动国货好物节,以“焕新+公益+体验”筑国民美好生活

在当下卫浴行业面临转型升级的大背景下&#xff0c;宏观政策持续推动以旧换新和消费升级&#xff0c;为市场注入了新的活力。随着中秋国庆双节的临近&#xff0c;卫浴消费逐步进入传统旺季&#xff0c;叠加利好政策&#xff0c;市场需求进一步活跃&#xff0c;日丰卫浴借此契机…

常见统计量与其抽样分布

什么是统计量 我们首先给出统计量的定义:设 X 1 , X 2 , ⋯ , X n X_1,X_2,\cdots,X_n X1​,X2​,⋯,Xn​ 为来自于总体X的一个样本&#xff0c; g ( X 1 , X 2 , ⋯ , X n ) g(X_1,X_2,\cdots,X_n) g(X1​,X2​,⋯,Xn​) 为关于 X 1 , X 2 , ⋯ , X n X_1,X_2,\cdots,X_n X…

【2024W37】肖恩技术周刊(第 15 期):中秋节快乐

周刊内容: 对一周内阅读的资讯或技术内容精品&#xff08;个人向&#xff09;进行总结&#xff0c;分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率&#xff0c;每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…

微服务——配置管理

1.配置管理 微服务配置管理是指对微服务架构中各个服务的配置信息进行管理、更新、查询和审计等操作&#xff0c;以确保系统的正常运行和高效管理。例如&#xff0c;网关路由或某些业务配置在配置文件中写死了&#xff0c;每次修改都要重启服务。每个微服务都有很多重复的配置&…

同等学力英语历年真题有必要做吗

同等学力申硕历年真题是考生备考期间最重要的参考资料&#xff0c;在做真题的时候对那些经常出现的词汇要进行汇总整理&#xff0c;记忆高频词汇。 当你在阅读文章的时候发现不认识的单词或者一个熟悉的单词但是放在句子当中却读不通顺的这类单词的时候&#xff0c;一定要做好标…

WinCC中VB脚本和C脚本到底怎么选?

很多人认为VB脚本比C脚本慢&#xff0c;所以在WinCC中要尽量使用C脚本&#xff0c;以便提高性能&#xff0c;事实真是这样吗&#xff1f;工控人加入PLC工业自动化精英社群 先说结论&#xff1a;并非如此。在一个复杂的应用中&#xff0c;混合使用VB脚本和C脚本&#xff0c;对提…

mes系统在中小企业智能制造作用

MES系统&#xff08;制造执行系统&#xff09;在中小企业智能制造中扮演着至关重要的角色&#xff0c;其作用主要体现在以下几个方面&#xff1a; 1. 提升生产效率与质量 实时监控与数据采集&#xff1a;MES系统能够实时采集生产现场的各项数据&#xff0c;如设备状态、生产进…

Maya学习笔记:软选择

文章目录 打开软选择调整软选择范围衰减模式 软选择可以很好的进行渐变修改 打开软选择 方法1&#xff1a; 进入点线面模式&#xff0c;按B键进入软选择模式&#xff0c;再按B取消 方法2&#xff1a;双击左侧的选择按钮打开选择面板&#xff0c;勾选软选择 调整软选择范围 …

input文本框随其中内容而变化长

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>input文本框随其中内容而变化长</title><style>.input-length {border: 1px solid #ccc;padding: 5px;min-width: 10px;width: auto;}.in…

物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——STM32代码实现篇

STM32代码实现 开启本章节需要完成下方的前置任务&#xff1a; 点击跳转&#xff1a; 物联网实践教程&#xff1a;微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 目标 1.连接OneNET&#xff1a;STM32使用串口与ESP8266/01s连接发送…

node.js npm 安装和安装create-next-app

1、官网下载windows版本NODE.JS https://nodejs.org/dist/v20.17.0/node-v20.17.0-x64.msi 2、安装后增加两个文件夹目录node_global、node_cache npm config set prefix "C:\Program Files\nodejs\node_global" npm config set prefix "C:\Program Files\nod…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建超级马里奥

828华为云征文 | 云服务器Flexus X实例&#xff0c;Docker集成搭建超级马里奥 华为云端口放行 服务器放行对应端口5000 Docker安装并配置镜像加速 1、购买华为云 Flexus X 实例 Flexus云服务器X实例-华为云 (huaweicloud.com) 2、docker安装 yum install -y docker-ce3、验证 …

网络编程——TCP网络通信

通信步骤&#xff1a; 1、连接 2、传输数据 3、关闭连接服务端的创建流程&#xff1a; 1、创建服务端socket对象 socket_family:网络地址类型AF_INET--代表的是ipv4地址类型 socket_type:套接字类型SOCK_STREAM--代表的是tcp套接字SOCK_DGRAM--代表的是udp套接字 2、绑定自己的…

企业如何利用短视频平台做口碑塑造和品牌营销?

抖音和小红书作为短视频平台的代表&#xff0c;吸引了大量的用户和品牌。如何利用抖音、小红书等短视频平台进行品牌塑造和口碑营销呢&#xff1f;小马识途营销顾问分析&#xff0c;短视频平台的用户以年轻人为主&#xff0c;他们具有高度的社交性和消费意愿。短视频平台提供了…

使用Java基于GeoTools读取Shapefile矢量数据属性信息-以某市POI数据为例

前言 在之前的博客中&#xff0c;我们讲过在GDAL中如何读取空间数据的属性和数据信息&#xff0c;也简单的讲过如何在GeoTools中读取Shapefile文件的属性信息和数据信息。对于空间矢量数据库&#xff0c;就像我们传统的二维数据库的表字段和表数据的关系&#xff0c;在研究表数…

[大语言模型-论文精读] ACL2024-长尾知识在检索增强型大型语言模型中的作用

ACL2024-长尾知识在检索增强型大型语言模型中的作用 On the Role of Long-tail Knowledge in Retrieval Augmented Large Language Models Authors: Dongyang Li, Junbing Yan, Taolin Zhang, Chengyu Wang, Xiaofeng He, Longtao Huang, Hui Xue, Jun Huang 1.概览 问题解决&…

引领开放式耳机革命,南卡新品再次霸榜音质和舒适度TOP1!

​随着科技的不断进步&#xff0c;消费者对于耳机的需求已经不仅仅局限于基本的听觉体验&#xff0c;而是追求更加舒适、个性化的聆听感受。南卡科技推出的Ultra夹耳开放式蓝牙耳机&#xff0c;以其创新的设计和卓越的音质&#xff0c;为用户带来了全新的听觉盛宴。 南卡科技&a…

【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇

前言&#xff1a; 在进入Linux学习之前&#xff0c;我们首先要先做好以下两点&#xff1a;1、已经基本掌握C语言或C&#xff0c;2、已经配置好了Linux的环境&#xff0c;做完以上两点后我们就开始Linux的学习&#xff0c;今天我们首先要学习的就是Linux中最基础的操作&#xff…

Python自动化测试之unittest框架

一、什么是框架 框架是由大佬开发或者专业的研发团队研发的技术骨架&#xff0c;框架是一个半成品&#xff0c;框架是对常用的功能&#xff0c;基础的代码进行封装的一个工具&#xff0c;这个工具对外提供了一些API&#xff0c;其他的开发者只需要调用框架的接口即可&#xff…