在本指南中,咱们将比拟Rust和Python编程语言。咱们将探讨每种状况下的实用用例,回顾应用Rust与Python的优缺点,并阐明为什么Rust可能会取代Python。
我将介绍以下内容:
- 什么是Rust?
- 什么是Python?
- 何时应用Rust
- 何时应用Python
- 为什么Rust能够取代Python
什么是Rust?
Rust是一种多范式语言,使开发人员可能构建牢靠且高效的软件。Rust重视平安和性能,相似于C和C++,速度快,内存效率高,没有垃圾收集。它能够与其余语言集成,也能够在嵌入式零碎上运行。
Rust领有优良的文档、敌对的编译器和有用的错误信息,以及先进的工具,包含集成的包管理器、构建工具、智能多编辑器反对、主动实现和类型查看、主动格式化等。
Rust是由Mozilla Research的Graydon Hoare在2010年推出的。尽管与Python相比,Rust是一门年老的语言,但它的社区却在稳步发展。事实上,在Stack Overflow的 "2020开发者考察 "中,86%的受访者将Rust评为2020年他们最喜爱的编程语言。
乍一看,Rust被动态化和强类型化可能看起来很极其。正如你所看到的,从久远来看,这有助于避免意外的代码行为。
什么是Python?
Python是一种编程语言,旨在帮忙开发人员更高效地工作,更无效地集成系统。和 Rust 一样,Python 也是多范式的,并且被设计成可扩大的。如果速度是最重要的,你能够应用低级别的 API 调用,比方 CPython。
Python的历史能够追溯到1991年Guido van Rossum推出的Python,它以代码的可读性、打消分号和大括号而闻名。
除了它的可扩展性,Python 是一种解释型语言,这使得它比大多数编译型语言慢。正如你所意料的那样,Python的成熟度很高,它有一个宏大的库的生态系统和一个宏大的业余社区。
何时应用Rust
Rust被利用于零碎开发、操作系统、企业零碎、微控制器利用、嵌入式零碎、文件系统、浏览器组件、虚拟现实的仿真引擎等。
当性能很重要的时候,Rust是一种罕用的语言,因为它能很好地解决大量数据。它能够解决CPU密集型的操作,如执行算法,这就是为什么Rust比Python更适宜零碎开发的起因。
Rust 保障了内存的安全性,让你能够控制线程行为和线程之间的资源分配形式。这使你可能构建简单的零碎,这使Rust比Python更有劣势。
总而言之,你应在以下状况下应用Rust:
- 你的我的项目须要高性能
- 你正在构建简单的零碎
- 你器重内存平安而不是简略性
何时应用Python
Python能够用于许多应用领域,从Web开发,到数据迷信和剖析,到AI和机器学习,再到软件开发。
Python被宽泛用于机器学习,数据迷信和AI,因为它是:
- 简略易写
- 灵便的
- 蕴含大量面向数据的软件包和库
- 由杰出的工具和库生态系统反对
在以下状况下,你应该应用Python:
- 你须要一种灵便的语言来反对Web开发,数据迷信和剖析以及机器学习和AI
- 你器重可读性和简略性
- 你须要一种对初学者敌对的语言
- 与性能相比,你更喜爱语法简略和开发速度
为什么Rust能够取代Python
思考到Rust的迅速遍及和宽泛的用例,它仿佛简直不可避免地会在不久的未来超过Python,以下是一些起因。
性能
Rust超过Python的一个次要起因是性能。因为Rust是间接编译成机器代码的,所以在你的代码和计算机之间没有虚拟机或解释器。
与Python相比,另一个要害劣势是Rust的线程和内存治理。尽管Rust不像Python那样有垃圾回收性能,但Rust中的编译器会强制查看有效的内存援用透露和其余危险或不规则行为。
编译语言通常比解释语言要快。然而,使Rust处于不同程度的是,它简直与C和C ++一样快,然而没有开销。
让咱们看一个用Python编写的O(log n)程序的示例,并应用迭代办法计算实现工作所需的工夫:
import randomimport datetimedef binary_searcher(search_key, arr): low = 0 high = len(arr)-1 while low <= high: mid = int(low + (high-low)//2) if search_key == arr[mid]: return True if search_key < arr[mid]: high = mid-1 elif search_key > arr[mid]: low = mid+1return False
输入:
> python -m binny.pyIt took 8.6s to search
当初,让咱们来看一下应用迭代办法用Rust编写的定时O(log n)程序:
>use rand::thread_rng;use std::time::Instant;use floating_duration::TimeFormat;fn binary_searcher(search_key: i32, vec: &mut Vec<i32>) -> bool { let mut low: usize = 0; let mut high: usize = vec.len()-1; let mut _mid: usize = 0; while low <= high { _mid = low + (high-low)/2; if search_key == vec[_mid] { return true; } if search_key < vec[_mid] { high = _mid - 1; } else if search_key > vec[_mid] { low = _mid + 1; } } return false;}fn main() { let mut _rng = thread_rng(); let mut int_vec = Vec::new(); let max_num = 1000000; for num in 1..max_num { int_vec.push(num as i32); } let start = Instant::now(); let _result = binary_searcher(384723, &mut int_vec); println!("It took: {} to search", TimeFormat(start.elapsed()));}
输入
> cargo runFinished dev [unoptimized + debuginfo] target(s) in 0.04sRunning target\debug\algo_rusty.exeIt took: 4.6s to search
在没有任何优化技术的状况下,Rust和Python在同一台机器上执行相似的操作别离须要4.6微秒和8.6微秒。这意味着Python破费的工夫简直是Rust的两倍。
内存治理
Python 和大多数古代编程语言一样,被设计成内存平安的。然而Rust在内存平安方面却让Python可望不可即,即便没有垃圾回收。
Rust采纳了一种独特的形式来确保内存平安,其中波及所有权零碎和借用查看器(borrow checker)。Rust的借用查看器确保援用和指针不会超过它们所指向的数据。
谬误查看与诊断
Python和其余语言一样,提供了谬误检查和日志机制。然而在让开发者晓得出了什么问题的时候,Rust和Python之间有一些比照。
举一个Python变量谬误的典型例子:
apple = 15print('The available apples are:', apple)
Python输入
Traceback (most recent call last): File "binny.py", line 2, in <module> print('The available apples are:', aple) NameError: name 'aple' is not defined
Rust中的相似示例:
fn main() { let apple = 15; println!("The available apples are:", apple);}
Rust输入
println!("The available apples are:", aple); ^^^^ help: a local variable with a similar name exists: `apple`
在这里,Rust举荐了可能的变量,这些变量可能是你想输出的。Python只会抛出谬误,而不会给出如何修复的倡议。
举个例子:
fn main() { let grass = 13; grass += 1;}
此代码引发谬误,因为默认状况下Rust中的变量是不可变的。除非它具备关键字 ou’'t
,否则无奈更改。
谬误:
let grass = 13; | ----- | | | first assignment to `grass` | help: make this binding mutable: `mut grass`
修改谬误:
fn main() { let mut _grass: i32 = 13; _grass += 1;}
如你所见,当初它不会引发任何谬误。除此之外,Rust不容许不同的数据类型互相操作,除非将它们转换为雷同的类型。
因而,保护Rust代码库通常很容易。除非指定,否则Rust不容许更改。 Python的确容许这种性质的更改。
与大多数编译语言相比,Rust因其速度快、内存平安有保障、超强的可靠性、一致性和用户敌对性而备受青眼。在编程中,咱们曾经到了速度开始变得毫不费力的境地。
随着技术的倒退,它变得越来越快,试图在更短的工夫内做更多的事件,而不须要那么多的衡量。Rust帮忙实现了这一点,同时又不障碍开发者的工作。当技术试图推动能够实现的边界时,它也会思考零碎的安全性和可靠性,这是Rust背地的次要思维。
并行运算
除了速度外,Python在并行计算方面也有局限性。
Python应用全局解释器锁(GIL),它激励只有一个线程同时执行,以进步单线程的性能。这个过程是一个妨碍,因为它意味着你不能应用多个CPU核进行密集计算。
社区
如前所述,Stack Overflow的“ 2020开发人员考察”中有86%的受访者将Rust称为2020年最喜爱的编程语言。
同样,“ 2020 HackerRank开发人员技能报告”的受访者将Rust列为他们打算下一步学习的十大编程语言:
相比之下,2019年的考察将Rust排在列表的底部,这表明Rust开发人员社区正在迅速增长。
正如这些数据所示,Rust正在成为支流开发者社区的一部分。许多大公司都在应用Rust,一些开发者甚至用它来构建其余编程语言应用的库。驰名的Rust用户包含Mozilla、Dropbox、Atlassian、npm和Cloudflare等等。
Amazon Web Service还对Lambda,EC2和S3中的性能敏感组件采纳了Rust。在2019年,AWS发表资助Rust我的项目,尔后为Rust提供了AWS开发工具包。
公司正越来越多地用更高效的编程语言(如Rust)取代速度较慢的编程语言。没有其余语言能像Rust一样在简略和速度之间做出均衡。
总结
Rust曾经倒退成为一种罕用的编程语言,其采用率也因而而减少。尽管Python在机器学习/数据迷信社区中占有巩固的位置,但Rust很可能在将来被用作Python库的更无效后端。
Rust具备取代Python的微小后劲。在目前的趋势下,作为利用、性能和速度方面的首选编程语言,Rust不仅仅是一种编程语言,更是一种思维形式。