偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Rust與Python:為什么Rust可以取代Python

開發(fā) 后端
Rust是一種多范式語(yǔ)言,使開發(fā)人員能夠構(gòu)建可靠且高效的軟件。Rust注重安全和性能,類似于C和C++,速度快,內(nèi)存效率高,沒有垃圾收集。它可以與其他語(yǔ)言集成,也可以在嵌入式系統(tǒng)上運(yùn)行。

我將介紹以下內(nèi)容:

  • 什么是Rust?
  • 什么是Python?
  • 何時(shí)使用Rust
  • 何時(shí)使用Python
  • 為什么Rust可以取代Python

什么是Rust?

Rust是一種多范式語(yǔ)言,使開發(fā)人員能夠構(gòu)建可靠且高效的軟件。Rust注重安全和性能,類似于C和C++,速度快,內(nèi)存效率高,沒有垃圾收集。它可以與其他語(yǔ)言集成,也可以在嵌入式系統(tǒng)上運(yùn)行。

 

Rust擁有優(yōu)秀的文檔、友好的編譯器和有用的錯(cuò)誤信息,以及先進(jìn)的工具,包括集成的包管理器、構(gòu)建工具、智能多編輯器支持、自動(dòng)完成和類型檢查、自動(dòng)格式化等。

Rust是由Mozilla Research的Graydon Hoare在2010年推出的。雖然與Python相比,Rust是一門年輕的語(yǔ)言,但它的社區(qū)卻在穩(wěn)步發(fā)展。事實(shí)上,在Stack Overflow的 "2020開發(fā)者調(diào)查 "中,86%的受訪者將Rust評(píng)為2020年他們最喜歡的編程語(yǔ)言。

乍一看,Rust被靜態(tài)化和強(qiáng)類型化可能看起來(lái)很極端。正如你所看到的,從長(zhǎng)遠(yuǎn)來(lái)看,這有助于防止意外的代碼行為。

什么是Python?

Python是一種編程語(yǔ)言,旨在幫助開發(fā)人員更高效地工作,更有效地集成系統(tǒng)。和 Rust 一樣,Python 也是多范式的,并且被設(shè)計(jì)成可擴(kuò)展的。如果速度是最重要的,你可以使用低級(jí)別的 API 調(diào)用,比如 CPython。

Python的歷史可以追溯到1991年Guido van Rossum推出的Python,它以代碼的可讀性、消除分號(hào)和大括號(hào)而聞名。

除了它的可擴(kuò)展性,Python 是一種解釋型語(yǔ)言,這使得它比大多數(shù)編譯型語(yǔ)言慢。正如你所預(yù)料的那樣,Python的成熟度很高,它有一個(gè)龐大的庫(kù)的生態(tài)系統(tǒng)和一個(gè)龐大的專業(yè)社區(qū)。

何時(shí)使用Rust

Rust被應(yīng)用于系統(tǒng)開發(fā)、操作系統(tǒng)、企業(yè)系統(tǒng)、微控制器應(yīng)用、嵌入式系統(tǒng)、文件系統(tǒng)、瀏覽器組件、虛擬現(xiàn)實(shí)的仿真引擎等。

當(dāng)性能很重要的時(shí)候,Rust是一種常用的語(yǔ)言,因?yàn)樗芎芎玫靥幚泶罅繑?shù)據(jù)。它可以處理CPU密集型的操作,如執(zhí)行算法,這就是為什么Rust比Python更適合系統(tǒng)開發(fā)的原因。

Rust 保證了內(nèi)存的安全性,讓你可以控制線程行為和線程之間的資源分配方式。這使你能夠構(gòu)建復(fù)雜的系統(tǒng),這使Rust比Python更有優(yōu)勢(shì)。

總而言之,你應(yīng)在以下情況下使用Rust:

  • 你的項(xiàng)目需要高性能
  • 你正在構(gòu)建復(fù)雜的系統(tǒng)
  • 你重視內(nèi)存安全而不是簡(jiǎn)單性

何時(shí)使用PythonPython可以用于許多應(yīng)用領(lǐng)域,從Web開發(fā),到數(shù)據(jù)科學(xué)和分析,到AI和機(jī)器學(xué)習(xí),再到軟件開發(fā)。

Python被廣泛用于機(jī)器學(xué)習(xí),數(shù)據(jù)科學(xué)和AI,因?yàn)樗牵?/p>

  • 簡(jiǎn)單易寫
  • 靈活的
  • 包含大量面向數(shù)據(jù)的軟件包和庫(kù)
  • 由出色的工具和庫(kù)生態(tài)系統(tǒng)支持

在以下情況下,你應(yīng)該使用Python:

  • 你需要一種靈活的語(yǔ)言來(lái)支持Web開發(fā),數(shù)據(jù)科學(xué)和分析以及機(jī)器學(xué)習(xí)和AI
  • 你重視可讀性和簡(jiǎn)單性
  • 你需要一種對(duì)初學(xué)者友好的語(yǔ)言
  • 與性能相比,你更喜歡語(yǔ)法簡(jiǎn)單和開發(fā)速度

為什么Rust可以取代Python

考慮到Rust的迅速普及和廣泛的用例,它似乎幾乎不可避免地會(huì)在不久的將來(lái)超越Python,以下是一些原因。

性能

Rust超越Python的一個(gè)主要原因是性能。因?yàn)镽ust是直接編譯成機(jī)器代碼的,所以在你的代碼和計(jì)算機(jī)之間沒有虛擬機(jī)或解釋器。

與Python相比,另一個(gè)關(guān)鍵優(yōu)勢(shì)是Rust的線程和內(nèi)存管理。雖然Rust不像Python那樣有垃圾回收功能,但Rust中的編譯器會(huì)強(qiáng)制檢查無(wú)效的內(nèi)存引用泄漏和其他危險(xiǎn)或不規(guī)則行為。

編譯語(yǔ)言通常比解釋語(yǔ)言要快。但是,使Rust處于不同水平的是,它幾乎與C和C ++一樣快,但是沒有開銷。

讓我們看一個(gè)用Python編寫的O(log n)程序的示例,并使用迭代方法計(jì)算完成任務(wù)所需的時(shí)間:

  1. import random 
  2. import datetime 
  3. def binary_searcher(search_key, arr): 
  4.   low = 0 
  5.   high = len(arr)-1 
  6.   while low <= high: 
  7.     mid = int(low + (high-low)//2) 
  8.     if search_key == arr[mid]: 
  9.       return True 
  10.     if search_key < arr[mid]: 
  11.       high = mid-1 
  12.       elif search_key > arr[mid]: 
  13.         low = mid+1 
  14. return False 

輸出:

  1. > python -m binny.py 
  2. It took 8.6μs to search 

現(xiàn)在,讓我們來(lái)看一下使用迭代方法用Rust編寫的定時(shí)O(log n)程序:

  1. >use rand::thread_rng; 
  2. use std::time::Instant; 
  3. use floating_duration::TimeFormat; 
  4.  
  5. fn binary_searcher(search_key: i32, vec: &mut Vec<i32>) -> bool { 
  6.   let mut low: usize = 0; 
  7.   let mut high: usize = vec.len()-1; 
  8.   let mut _mid: usize = 0; 
  9.   while low <= high { 
  10.     _mid = low + (high-low)/2; 
  11.     if search_key == vec[_mid] { 
  12.       return true
  13.     } 
  14.     if search_key < vec[_mid] { 
  15.       high = _mid - 1; 
  16.     } else if search_key > vec[_mid] { 
  17.       low = _mid + 1; 
  18.     } 
  19.   } 
  20.   return false
  21.  
  22. fn main() { 
  23.   let mut _rng = thread_rng(); 
  24.   let mut int_vec = Vec::new(); 
  25.   let max_num = 1000000; 
  26.  
  27.   for num in 1..max_num { 
  28.     int_vec.push(num as i32); 
  29.   } 
  30.   let start = Instant::now(); 
  31.   let _result = binary_searcher(384723, &mut int_vec); 
  32.   println!("It took: {} to search", TimeFormat(start.elapsed())); 

輸出

  1. > cargo run 
  2. Finished dev [unoptimized + debuginfo] target(s) in 0.04s 
  3. Running target\debug\algo_rusty.exe 
  4. It took: 4.6μs to search 

在沒有任何優(yōu)化技術(shù)的情況下,Rust和Python在同一臺(tái)機(jī)器上執(zhí)行類似的操作分別需要4.6微秒和8.6微秒。這意味著Python花費(fèi)的時(shí)間幾乎是Rust的兩倍。

內(nèi)存管理

Python 和大多數(shù)現(xiàn)代編程語(yǔ)言一樣,被設(shè)計(jì)成內(nèi)存安全的。然而Rust在內(nèi)存安全方面卻讓Python望塵莫及,即使沒有垃圾回收。

Rust采用了一種獨(dú)特的方式來(lái)確保內(nèi)存安全,其中涉及所有權(quán)系統(tǒng)和借用檢查器(borrow checker)。Rust的借用檢查器確保引用和指針不會(huì)超過(guò)它們所指向的數(shù)據(jù)。

錯(cuò)誤檢查與診斷

Python和其他語(yǔ)言一樣,提供了錯(cuò)誤檢查和日志機(jī)制。但是在讓開發(fā)者知道出了什么問(wèn)題的時(shí)候,Rust和Python之間有一些對(duì)比。

舉一個(gè)Python變量錯(cuò)誤的典型例子:

  1. apple = 15 
  2. print('The available apples are:', apple) 

Python輸出:

  1. Traceback (most recent call last): 
  2.     File "binny.py", line 2, in <module> 
  3.       print('The available apples are:', aple) 
  4.     NameError: name 'aple' is not defined 

Rust中的類似示例:

  1. fn main() { 
  2.   let apple = 15; 
  3.   println!("The available apples are:", apple); 

Rust輸出:

  1. println!("The available apples are:", aple); 
  2.    ^^^^ help: a local variable with a similar name exists: `apple` 

在這里,Rust推薦了可能的變量,這些變量可能是你想輸入的。Python只會(huì)拋出錯(cuò)誤,而不會(huì)給出如何修復(fù)的建議。

舉個(gè)例子:

  1. fn main() { 
  2.   let grass = 13; 
  3.  
  4.   grass += 1; 

此代碼引發(fā)錯(cuò)誤,因?yàn)槟J(rèn)情況下Rust中的變量是不可變的。除非它具有關(guān)鍵字 ou’'t,否則無(wú)法更改。

錯(cuò)誤:

  1. let grass = 13; 
  2.       |         ----- 
  3.       |         | 
  4.       |         first assignment to `grass` 
  5.       |         help: make this binding mutable: `mut grass` 

修正錯(cuò)誤:

  1. fn main() { 
  2.   let mut _grass: i32 = 13; 
  3.  
  4.   _grass += 1; 

如你所見,現(xiàn)在它不會(huì)引發(fā)任何錯(cuò)誤。除此之外,Rust不允許不同的數(shù)據(jù)類型相互操作,除非將它們轉(zhuǎn)換為相同的類型。

因此,維護(hù)Rust代碼庫(kù)通常很容易。除非指定,否則Rust不允許更改。Python確實(shí)允許這種性質(zhì)的更改。

與大多數(shù)編譯語(yǔ)言相比,Rust因其速度快、內(nèi)存安全有保證、超強(qiáng)的可靠性、一致性和用戶友好性而備受青睞。在編程中,我們已經(jīng)到了速度開始變得毫不費(fèi)力的地步。

隨著技術(shù)的發(fā)展,它變得越來(lái)越快,試圖在更短的時(shí)間內(nèi)做更多的事情,而不需要那么多的權(quán)衡。Rust幫助實(shí)現(xiàn)了這一點(diǎn),同時(shí)又不妨礙開發(fā)者的工作。當(dāng)技術(shù)試圖推動(dòng)可以實(shí)現(xiàn)的邊界時(shí),它也會(huì)考慮系統(tǒng)的安全性和可靠性,這是Rust背后的主要思想。

并行運(yùn)算

除了速度外,Python在并行計(jì)算方面也有局限性。

Python使用全局解釋器鎖(GIL),它鼓勵(lì)只有一個(gè)線程同時(shí)執(zhí)行,以提高單線程的性能。這個(gè)過(guò)程是一個(gè)阻礙,因?yàn)樗馕吨悴荒苁褂枚鄠€(gè)CPU核進(jìn)行密集計(jì)算。

社區(qū)如前所述,Stack Overflow的“ 2020開發(fā)人員調(diào)查”中有86%的受訪者將Rust稱為2020年最喜歡的編程語(yǔ)言。

 

同樣,“ 2020 HackerRank開發(fā)人員技能報(bào)告”的受訪者將Rust列為他們計(jì)劃下一步學(xué)習(xí)的十大編程語(yǔ)言:

 

相比之下,2019年的調(diào)查將Rust排在列表的底部,這表明Rust開發(fā)人員社區(qū)正在迅速增長(zhǎng)。

 

正如這些數(shù)據(jù)所示,Rust正在成為主流開發(fā)者社區(qū)的一部分。許多大公司都在使用Rust,一些開發(fā)者甚至用它來(lái)構(gòu)建其他編程語(yǔ)言使用的庫(kù)。著名的Rust用戶包括Mozilla、Dropbox、Atlassian、npm和Cloudflare等等。

Amazon Web Service還對(duì)Lambda,EC2和S3中的性能敏感組件采用了Rust。在2019年,AWS宣布贊助Rust項(xiàng)目,此后為Rust提供了AWS開發(fā)工具包。

公司正越來(lái)越多地用更高效的編程語(yǔ)言(如Rust)取代速度較慢的編程語(yǔ)言。沒有其他語(yǔ)言能像Rust一樣在簡(jiǎn)單和速度之間做出平衡。

總結(jié)

Rust已經(jīng)發(fā)展成為一種常用的編程語(yǔ)言,其采用率也因此而增加。雖然Python在機(jī)器學(xué)習(xí)/數(shù)據(jù)科學(xué)社區(qū)中占有穩(wěn)固的地位,但Rust很可能在未來(lái)被用作Python庫(kù)的更有效后端。 

Rust具有取代Python的巨大潛力。在目前的趨勢(shì)下,作為應(yīng)用、性能和速度方面的首選編程語(yǔ)言,Rust不僅僅是一種編程語(yǔ)言,更是一種思維方式。

本文轉(zhuǎn)載自微信公眾號(hào)「前端全棧開發(fā)者」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系前端全棧開發(fā)者公眾號(hào)。

責(zé)任編輯:武曉燕 來(lái)源: 前端全棧開發(fā)者
相關(guān)推薦

2022-01-14 10:50:23

PythonRust編程語(yǔ)言

2020-09-25 08:10:55

Rust系統(tǒng)編程

2015-11-17 08:54:42

語(yǔ)言gorust

2015-11-17 10:00:50

DGORust

2024-02-05 22:51:49

AGIRustPython

2024-08-28 10:49:47

2025-01-26 16:12:52

PythonRust開發(fā)

2025-01-03 09:12:11

2023-05-26 17:21:15

PythonRust

2023-03-10 08:48:29

2015-07-13 10:27:40

GoRust競(jìng)爭(zhēng)者

2022-10-21 18:41:23

RustC++Azure

2024-06-04 10:49:05

Rust插件開發(fā)工具

2023-04-03 11:21:29

PythonGoRust

2020-07-07 07:00:00

RustGo語(yǔ)言編程語(yǔ)言

2024-01-10 18:07:27

Rust語(yǔ)言多線程

2024-11-08 09:19:28

2023-05-29 16:25:59

Rust函數(shù)

2022-12-30 11:05:40

Rust代碼

2023-05-23 13:59:41

RustPython程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)