自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

我將介紹以下內容:

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

什么是Rust?

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

 

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

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

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

什么是Python?

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

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

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

何時使用Rust

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

當性能很重要的時候,Rust是一種常用的語言,因為它能很好地處理大量數(shù)據。它可以處理CPU密集型的操作,如執(zhí)行算法,這就是為什么Rust比Python更適合系統(tǒng)開發(fā)的原因。

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

總而言之,你應在以下情況下使用Rust:

  • 你的項目需要高性能
  • 你正在構建復雜的系統(tǒng)
  • 你重視內存安全而不是簡單性

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

Python被廣泛用于機器學習,數(shù)據科學和AI,因為它是:

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

在以下情況下,你應該使用Python:

  • 你需要一種靈活的語言來支持Web開發(fā),數(shù)據科學和分析以及機器學習和AI
  • 你重視可讀性和簡單性
  • 你需要一種對初學者友好的語言
  • 與性能相比,你更喜歡語法簡單和開發(fā)速度

為什么Rust可以取代Python

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

性能

Rust超越Python的一個主要原因是性能。因為Rust是直接編譯成機器代碼的,所以在你的代碼和計算機之間沒有虛擬機或解釋器。

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

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

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

  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)在,讓我們來看一下使用迭代方法用Rust編寫的定時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)化技術的情況下,Rust和Python在同一臺機器上執(zhí)行類似的操作分別需要4.6微秒和8.6微秒。這意味著Python花費的時間幾乎是Rust的兩倍。

內存管理

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

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

錯誤檢查與診斷

Python和其他語言一樣,提供了錯誤檢查和日志機制。但是在讓開發(fā)者知道出了什么問題的時候,Rust和Python之間有一些對比。

舉一個Python變量錯誤的典型例子:

  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只會拋出錯誤,而不會給出如何修復的建議。

舉個例子:

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

此代碼引發(fā)錯誤,因為默認情況下Rust中的變量是不可變的。除非它具有關鍵字 ou’'t,否則無法更改。

錯誤:

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

修正錯誤:

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

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

因此,維護Rust代碼庫通常很容易。除非指定,否則Rust不允許更改。Python確實允許這種性質的更改。

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

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

并行運算

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

Python使用全局解釋器鎖(GIL),它鼓勵只有一個線程同時執(zhí)行,以提高單線程的性能。這個過程是一個阻礙,因為它意味著你不能使用多個CPU核進行密集計算。

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

 

同樣,“ 2020 HackerRank開發(fā)人員技能報告”的受訪者將Rust列為他們計劃下一步學習的十大編程語言:

 

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

 

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

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

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

總結

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

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

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

責任編輯:武曉燕 來源: 前端全棧開發(fā)者
相關推薦

2022-01-14 10:50:23

PythonRust編程語言

2020-09-25 08:10:55

Rust系統(tǒng)編程

2015-11-17 08:54:42

語言gorust

2015-11-17 10:00:50

DGORust

2024-02-05 22:51:49

AGIRustPython

2024-08-28 10:49:47

2025-01-03 09:12:11

2025-01-26 16:12:52

PythonRust開發(fā)

2023-05-26 17:21:15

PythonRust

2023-03-10 08:48:29

2015-07-13 10:27:40

GoRust競爭者

2023-04-03 11:21:29

PythonGoRust

2024-06-04 10:49:05

Rust插件開發(fā)工具

2022-10-21 18:41:23

RustC++Azure

2024-01-10 18:07:27

Rust語言多線程

2020-07-07 07:00:00

RustGo語言編程語言

2023-05-29 16:25:59

Rust函數(shù)

2024-11-08 09:19:28

2022-12-30 11:05:40

Rust代碼

2024-05-21 11:34:03

RustPython編譯器
點贊
收藏

51CTO技術棧公眾號