全面認識 RUST -- 掌控未來的雷電
文章目錄
Rust 簡介
如何衡量語言的好壞?
靜態(tài)語言
編譯器
語言定位
代表性項目
Hello World
Rust 前景
RUST 簡介
Rust 是一種兼顧內(nèi)存安全、高并發(fā)和穩(wěn)定運行的編程語言。它有著驚人的運行速度(有些領域甚至超過 C/C++),能夠防止運行錯誤,并保證線程安全。RUST 語言使每個人都能夠構(gòu)建可靠、高效的軟件。
如何衡量語言的好壞?
在編程領域,人們通常從以下幾個方面判斷語言的 [好壞] :
性能
生產(chǎn)率
可靠性
性能:RUST 在這幾個方面做得都不錯,甚至超過同類語。RUST 沒有 Runtime 和 GC,即 RUST 沒有運行時,也不用垃圾回收。這使得它的運行速度非常快,并且很省內(nèi)存。
生產(chǎn)率:不得不說,RUST 的文檔寫得很好。出色的文檔和友好的編譯器、一流的包管理器和構(gòu)建工具、精準的錯誤提示,這些都是 RUST 為開發(fā)者準備好的,我們只需要將精力放在邏輯上即可。
可靠性:RUST 的編譯器很嚴格,它幾乎不允許任何不可控的因素存在。它會在編譯時為你檢查語法、變量、所有權(quán)等內(nèi)容,避免程序在運行中發(fā)生故障。
RUST 的可靠性真的很強,這并不是吹的。嚴格的編譯器將因患扼殺在萌芽時期,一旦編譯通過,那么你的程序?qū)⒆兊梅浅7€(wěn)定(社區(qū)討論到,編譯通過后的程序穩(wěn)定性在 90% 以)。
靜態(tài)語言
RUST 是一門靜態(tài)語言,這也是它運行速度如此快的原因之一。在遇到 RUST 之前,我是一名 PYTHON 開發(fā)者。PYTHON 最讓人詬病的莫過于速度,無論是 WEB 、網(wǎng)絡還是程序執(zhí)行方面,都讓人感到難過。動態(tài)語言的優(yōu)勢是靈活、簡短和足夠快的開發(fā)速度。靜態(tài)語言的優(yōu)勢則是運行速度,為此,我們必須犧牲開發(fā)速度(當你熟悉之后,其實開發(fā)速度也不會差到哪里去)。
編譯器
與 PYTHON 這種動態(tài)語不同,RUST 程序在運行前必須進行編譯,編譯完成后才能夠運行。RUST 的編譯器是 LLVM(底層虛擬機 Low-Level Virtual Machine),同樣使用 LLVM 作為編譯器的開發(fā)語言還有 Swift。
語言定位
每一門語言都應該有自己的定位,雖然最終的結(jié)果和開發(fā)團隊預想的不同。PYTHON 如今被應用在互聯(lián)網(wǎng)各個領域,如爬蟲、WEB、深度學習、軟件開發(fā)等,雖然 WEB 領域有 JAVA、PHP 和 GO 這樣的強勁對手,但使用 Django、Flask 和 Tornado 的開發(fā)者仍然不少。
我是一名職業(yè)爬蟲工程師,所以爬蟲領域的事我比較清楚,PYTHON 在爬蟲領域幾乎沒有對手,這個領域排名第二的應該是 JAVA,其次是 GO 語言。爬蟲是多變的,爬蟲工程師經(jīng)常改動它們的代碼,從開發(fā)效率和開發(fā)時間方面來說,沒有什么語言比 PYTHON 更省事。爬蟲爬取過程并不追求超高的速度,太快的話會導致目標網(wǎng)站拒絕訪問(大量垃流量是不道德的行為),如果影響網(wǎng)站運行,那么就會將自己處于法律邊緣。還有一點, PYTHON 庫非常多,很多東西伸手就用,根本不需要耗費時間去造輪子。綜合考慮來說,爬蟲領域還真的是 PYTHON 更合適一些。
由于 PYTHON 豐富的生態(tài)和極簡的代風格,使它成為深度學習的首選。PYTHON 占據(jù)著深度學習的大半江,這點是其他語言難以撼動的。
軟件開發(fā)領域,常年以來都被 C# 和 C++ 占據(jù),系統(tǒng)層面則是 C 和 C++,其他語言根本沒有參與的能力(相對于 C++ 和 C ?來說,GO PYTHON NODEJS JAVA 這些語言太弱了)。
RUST 能做什么呢?適合做什么呢?
RUST 語言對標的是 C 和 C++,但它還具備了抗衡 GO 語言的能力,在深度學習和爬蟲領域也有一定的機會。RUST 被視為 [系統(tǒng)級] 語言,它能夠開發(fā)出穩(wěn)定性超強、運行速度極快的項目。能夠成為系統(tǒng)級編程語言,是因為它無 GC 和 Runtime,它超強的穩(wěn)定性來源于所有權(quán)。
有實際案例證明,RUST 將會成為下一代操作系統(tǒng)的開發(fā)語言。火狐用它編寫了一個名為 Redox 的類UNIX 操作系統(tǒng)。系統(tǒng)界面如下:
C++ 一直是游戲和高性能軟件的首選,但很多開發(fā)者都會遇到內(nèi)存(C 語言也有,如懸垂指針)方面的問題。RUST 嚴格的編譯器和良好的設計使它規(guī)避了這些問題,它并不會出現(xiàn)內(nèi)存安全方面的故障。并且,由于 RUST 和 C++、C 一樣,都是無 GC 和 Runtime 的編程語言,也同為靜態(tài)語言,所以它能夠扮演 C 和 C++ 的角色,甚至還有些優(yōu)勢。
在 WEB 領域,現(xiàn)在 GO 語言火得一塌糊涂。這得益于它的運行速度和開發(fā)效率——它既有 JAVA 的運行速度,有又堪比 PYTHON 的開發(fā)效率,而且它在高并發(fā)場景的處理能力高過 PYTHON 等語言。這些因素綜合在一起,使它成為如今 WEB 開發(fā)的首選。RUST 的運行速度和高并發(fā)處理能力只會比 GO 更強,但開發(fā)效率方面卻無法保證(語法方面其實也還可以,但由于編譯器的嚴格要求,使得開發(fā)效率不高)。
有人用 RUST 代替 GO 了嗎?當然有,不然我也不會拋出這個話題,請看:
TiDB 團隊使用 RUST 來構(gòu)建 TiKV 產(chǎn)品,團隊開發(fā)人員在 RUST 大會上有談論過 RUST 與 GO 的選擇。在綜合因素的考慮下,他們最后選擇了 RUST。
一些區(qū)塊鏈項目正在/已經(jīng)從 GO ?專為 RUST,不為別的,安全。
深度學習方面,Tensorflow 已經(jīng)支持 RUST 了。如果這還不能說明什么,那么我們可以從速度上考慮這個問題。神經(jīng)網(wǎng)絡的發(fā)展很迅速,而且層級越來越深,還有不斷加深的趨勢。我對圖像識別和卷積有一些了解,卷積通過不斷的計算圖片像素張量得出特征。程序不斷的迭代圖像,直到獲得 [合適] 的特征,這個過程其是計算的過程。目前來說,GPU 的計算能力比 CPU 要高,所以計算方面都由 GPU 完成,而不是 編程語言。但是程序本身的運行速度是整體效率的一個部分,所以 RUST 有可能被用來處理那些耗時的工作。(深度學習領域的生態(tài)肯定趕不上 PYTHON,不要想了)。
爬蟲領域,爬蟲不單單是網(wǎng)絡請求和文解析的問題,它是綜合技術(shù)的應用。程序運行速度并不是硬需求,但每個爬蟲工程師都希望 PYTHON 的運行速度再提升一個等級(事實上,大部分 PYTHON 開發(fā)者都希望 PYTHON 和 C 一樣快)。所以,如果 RUST 降低網(wǎng)絡請求和文本解析的門檻,我認為它也會吸引一部分使用 PYHTON 的爬蟲工程。我就是這么被吸引過來的,我要造幾個輪子(網(wǎng)絡請求文本解析方面的輪子)。
代表性項目
新的語言,如果沒有代表性項目,那么就很難斬露頭角。當然,如果有 Google 這樣的大公司推動,事情就會完全不一樣(參考 GO 和 Flutter)。但 GO 語言已經(jīng)有了足夠強大的產(chǎn)品作為證明,比如 Docker、七牛云存儲、TiDB 和 Kubernetes。
RUST 生于火狐,由火狐研發(fā)人員和 RUST 社區(qū)維護。目前來說,RUST 還未出現(xiàn)類似于 Docker 或 Kubernetes 這樣的流行項目,但 RUST 在一些領域已經(jīng)有了大的邁步,如:
Redox - 類 UNIX 操作系統(tǒng)。
Servo - 火狐新一代瀏覽器引擎。
TiKV - 分布式的 KV 系統(tǒng)。
并且,很多大企業(yè)都在嘗試將 RUST 融入到生產(chǎn)中。我相信在未來幾年,RUST 肯定會大放異彩。
Hello World
之前提到過,RUST 文檔很友好,我們可以通過一個案例了解 RUST。
在開始之前,我們需要下載并安裝 RUST 語言。根據(jù)官網(wǎng)文檔教程(如果大家不習慣看英文文檔,可以到 RUST 中文站查看教程,以下為 Linux 環(huán)境下的安裝,Window 環(huán)境安裝以教程為準)的提示,我們在終端運行以下命令:
curl?https://sh.rustup.rs?-sSf?|?sh?復制代碼
即可完成 RUST 的下載,并安裝 RUST。這會安裝最新穩(wěn)定版 Rust。過程中可能會提示你輸入密碼。如果安裝成功,將會出現(xiàn)如下內(nèi)容:
Rust?is?installed?now.?Great!?復制代碼
然后配置環(huán)境變量,在 ~/.bash_profile 文件中增加如下內(nèi)容:
$?export?PATH="$HOME/.cargo/bin:$PATH"?復制代碼
配置保存后,使用命令讓其立生效:
$?source?~/.bashrc?復制代碼
一切準備就緒后,我們就可以開始編寫代碼了。新建名為 hello.rs 的文件,并將以下內(nèi)容寫入 hello.rs:
fn?main()?{?????println!("Hello,?world!");?}?復制代碼
代碼編寫完成后,需要進行編譯,才能運行。在終端執(zhí)行以下命令:
$?rustc?hello.rs?$?./hello?復制代碼
如果看到終端輸出 Hello, world! 則代表程序運行成功。
你已經(jīng)正式編寫了一個 Rust 程序,成為一名 Rust 程序員,歡迎!
RUST 前景
花里胡哨的語言我們見得多了,它們既不安全又慢。多年來,沒有任何語言能夠撼 C/C++ 的地位,RUST 的出現(xiàn)使得編程界有了新的氧氣。作為一名從事爬蟲工作的開發(fā)者(接觸的技術(shù)較多),我認為編程語言 [快] 是趨勢,靜態(tài)語言是未來。我很喜歡 PYTHON,它的語法簡潔、開發(fā)效率超高。但不得不承認,我從心底里希望 PYTHON 變得更快,但動態(tài)語言出身的它決定了它速度的上限,所以我將目標轉(zhuǎn)投到 RUST 上。GO 語言非常優(yōu)秀,生態(tài)也很好,但我看好 RUST 而不是 GO 的理由是:RUST NO GC NO RUNTIME,SAFTY。
這使得 RUST 必將成為未來掌控雷電的語言,尤其是 Redox 的出現(xiàn),使我更加堅信 RUST 的未來。
https://juejin.im/post/5cfffc386fb9a07ea71307c3
Go Python
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。