整理 | 蘇宓
【資料圖】
出品 | CSDN(ID:CSDNnews)
Rust 這把火在微軟 Azure CTO Mark Russinovich 的助力下,似乎越燒越旺。而每當(dāng)波及編程語言時(shí),紛爭再起,這不,近日外媒 The Register 在發(fā)出 " 是時(shí)候在新程序中用 Rust 來讓 C、C++ 了嗎?" 的問句,引發(fā)了不少開發(fā)者的熱議。
Rust vs C++
相比編程語言榜單的 Top 級(jí)語言,Rust 要稍顯年輕一些。最初,Rust 僅僅是由 Mozilla 的一位工程師 Graydon Hoare 開發(fā)的,隨后得到了 Mozilla 的贊助,目的是為開發(fā)他們的瀏覽器 Mozilla Firefox 創(chuàng)造一個(gè)更好的工具。
2010 年,Rust 首次對(duì)外公開開發(fā)這個(gè)語言的計(jì)劃。2015 年 5 月,Rust 1.0 版本正式發(fā)布。作為一種多范式的編程語言,Rust 專注于性能和安全,特別是安全并發(fā)。Rust 在語法上與 C++ 相似,但它提供更高的速度和更好的內(nèi)存安全,不用自動(dòng)垃圾回收,也無需手動(dòng)釋放。
在安全的內(nèi)存管理方面,不少開發(fā)者視 Rust 是一種更具創(chuàng)新性的系統(tǒng)級(jí)語言,因?yàn)樗辉试S懸空指針或空指針。它是為了在不影響性能和速度的情況下做到安全、可靠而創(chuàng)建的。多數(shù)情況下,Rust 被用來開發(fā)設(shè)備驅(qū)動(dòng)程序和操作系統(tǒng),如 BlogOS、intermezzOS、QuiltOS、Redox、RustOS、Rux、Tafflin 和 Tock。它也被用于瀏覽器,如 Mozilla Firefox、游戲等方面。
Hello World 用法示例如下:
fn main ( ) { println! ( "Hello World!" ) 。}
與之相對(duì)應(yīng)的 C++,是由丹麥計(jì)算機(jī)科學(xué)家 Bjarne Stroustrup 開發(fā)的高級(jí)、通用的面向?qū)ο蟮木幊陶Z言,屬于一種 " 類 C" 語言。C++ 的設(shè)計(jì)偏重于系統(tǒng)編程和嵌入式、資源受限的軟件和大型系統(tǒng),性能、效率和使用的靈活性是其設(shè)計(jì)亮點(diǎn)。使用 C++,程序員可以對(duì)系統(tǒng)資源和內(nèi)存進(jìn)行高度控制,也可以為程序提供清晰的結(jié)構(gòu),并允許代碼被重復(fù)使用。
從使用維度來看,C++ 方便開發(fā)者用較少的編譯和執(zhí)行時(shí)間建立超級(jí)快速的應(yīng)用程序,因?yàn)樗胸S富的標(biāo)準(zhǔn)庫,稱為 "STL- 庫 "。你可以建立各種各樣的應(yīng)用程序,從 GUI 應(yīng)用程序到 3D 圖形、游戲、桌面應(yīng)用程序,以及核心計(jì)算機(jī)視覺應(yīng)用程序。
Hello World 示例如下:
#include
相比 C、C++,Rust 有什么樣的優(yōu)勢(shì)?
整體而言,Rust 的設(shè)計(jì)是以性能和安全為前提,C、C++ 更注重在速度提升上,安全性可能要排到第二位。
The Register 也在文章中做出如此評(píng)價(jià):的確,或許你總是可以寫出完美安全的 C 和 C++ 代碼。只是,這對(duì)于大多數(shù)人而言,從來都不是一件容易的事。因?yàn)檫@兩種語言都太容易造成內(nèi)存錯(cuò)誤了,如帶來無效的堆和棧內(nèi)存訪問;內(nèi)存泄漏;不匹配的內(nèi)存分配和反分配;以及未初始化的內(nèi)存訪問。
現(xiàn)實(shí)中,也有不少企業(yè)在 C、C++ 的安全上 " 翻了車 "。此前,英特爾技術(shù)咨詢工程師 Naveen Gv 表示," 內(nèi)存錯(cuò)誤在 C 和 C++ 應(yīng)用程序中非常普遍,而且 ...... 可能難以重現(xiàn),難以調(diào)試,而且糾正起來可能也很昂貴。"
早在 2019 年,微軟稱自 2006 年以來,所修復(fù)的 CVE 中約有 70% 是由于內(nèi)存安全問題造成的。2020 年,微軟云開發(fā)者 Ryan Levick 公開表示," 我們使用的語言很古老,來自不同的年代,無法為我們提供防范種種漏洞的能力。C++ 不是一種內(nèi)存安全的語言,沒人會(huì)真的假裝它是內(nèi)存安全的語言。"
除了微軟,Google 的開發(fā)者也在基于 Chromium 內(nèi)核的網(wǎng)絡(luò)瀏覽器代碼中發(fā)現(xiàn)了同樣比例的內(nèi)存問題。
相較之下,使用 Rust 雖然無法 100% 地杜絕安全錯(cuò)誤的發(fā)生,但是它也不容易犯 C、C++ 應(yīng)用程序中常見的內(nèi)存錯(cuò)誤。另外,Rust 還有一個(gè)優(yōu)勢(shì),就是使得編寫并發(fā)程序變得更加容易,這也有助于其在容器、云中落地應(yīng)用。
Rust 為什么突然爆火?
不過當(dāng)論及 Rust 為什么在短短幾年后的今天突然崛起,目前據(jù) Slashdata 最新數(shù)據(jù)統(tǒng)計(jì),Rust 在過去一年中使用數(shù)量幾乎增加了兩倍,實(shí)則 Rust 的爆火的經(jīng)歷與曾經(jīng) Python 的經(jīng)歷有些雷同。也正如此前 MegaEase CEO 陳皓(左耳朵耗子)曾分享過具有競爭性的技術(shù)無外乎有三個(gè)特性:
有殺手級(jí)應(yīng)用:無論是什么技術(shù),它一定要是能解決痛點(diǎn)問題的。
有大廠的支持:需要明白,大公司不會(huì)把錢浪費(fèi)在一些 " 無用功 " 上,它一定會(huì)投資一些有價(jià)值的技術(shù)。譬如 Go 語言的背后是 Google、Java 的背后亦是很多巨頭公司支持的。
有強(qiáng)大的社區(qū)支持。
對(duì)于 Rust 而言,其得以迅速崛起,一方面,離不開諸多大廠的投入使用。譬如,微軟在 VS Code、Visual Studio 等工具都已經(jīng)提供了對(duì) Rust 的良好支持;Google 于去年也宣布 Android 支持 Rust 語言來開發(fā)操作系統(tǒng),并支持 Linux 內(nèi)核引入 Rust 代碼;亞馬遜為此更早之前還聘用了 Rust 編譯器團(tuán)隊(duì)負(fù)責(zé)人之一的 Felix Klock,以及 AWS 從很早開始并宣布贊助 Rust 開源項(xiàng)目等等。
另一方面,基于 Rust 語言自身雖然并沒有絕對(duì)的 " 殺手級(jí)應(yīng)用 " 誕生,但是不乏頂級(jí)的項(xiàng)目引入。在 2022 Linux 內(nèi)核維護(hù)者峰會(huì)上,Linus 提議將 Rust 支持合并到 Linux 6.1 中。隨后,微軟 Azure CTO Mark Russinovich 在 Twitter 上公開呼吁,「現(xiàn)在是時(shí)候停止在 C/C++ 中啟動(dòng)任何新的項(xiàng)目了,一切需要無垃圾回收語言的場景都該使用 Rust。出于安全性和可靠性的考慮,業(yè)界應(yīng)該宣布這些語言已經(jīng)被棄用?!?/p>
不過,Russinovich 并不是直接建議把所有已經(jīng)用 C 或 C++ 寫好的東西都扔掉,其表示," 有大量的 C/C++ 將被維護(hù)和發(fā)展數(shù)十年(或更長時(shí)間)。昨晚我為 Handle 編寫了一個(gè)功能,添加到我編寫的大約 85,000 行 Sysinternals C/C++ 代碼中。也就是說,對(duì)于新工具,我會(huì)偏向于 Rust。"
Rust 會(huì)取代 C、C++ 嗎?
其實(shí),Rust 對(duì)標(biāo) C++,宛如 Kotlin 欲對(duì)抗 Java、TypeScript 對(duì)標(biāo) JavaScript、Carbon 對(duì)標(biāo) C++ 等,不過,對(duì)于 Rust 遲早取代 C++ 這一說法,不少人持懷疑態(tài)度。
一位名為 devjoe 的網(wǎng)友表示:
我需要指出的是,任何將 C 和 C++ 混為一談的人一開始就脫離了正軌。C++ 是為了使那些在 C 語言中不可能實(shí)現(xiàn)的事情成為可能,它是通過顯著地?cái)U(kuò)展 C 語言的語法和語義來實(shí)現(xiàn)的。這是兩種不同的語言,解決了兩種不同的問題。任何寫 "C/C++" 的人如果混淆了這一點(diǎn),我就懷疑這個(gè)人的能力。
Rust 的目標(biāo)是解決一些問題,這很好。在我看來,最值得注意的問題之一是可靠的錯(cuò)誤處理,在這一問題上,C++ 可以很好地解決,但是 Rust 不行。Rust 鼓勵(lì)一種忽略錯(cuò)誤的編碼風(fēng)格,因?yàn)橥ㄟ^返回值傳回錯(cuò)誤是很繁瑣的。
相比之下,C++ 用異常來解決這個(gè)問題(這絕不是 C++ 發(fā)明的),這也是對(duì)合格的代碼編寫有自己的一套要求。這并不是說你不能用 Rust 編寫好的軟件,其實(shí)你當(dāng)然可以。很多偉大的軟件也是用 C 語言寫的,而且我確信在很多用途上,Rust 表現(xiàn)要比 C 要好一些。
但是說實(shí)話,對(duì)于需要在現(xiàn)實(shí)世界中工作的大規(guī)模應(yīng)用來說,用 Rust 取代 C++?當(dāng)然,你可以做到這一點(diǎn)。只要有足夠的投資,任何事情都是可能的。但我不得不說,對(duì)于那些真正需要他們的軟件在任何時(shí)候都能工作的企業(yè)來說,我不認(rèn)為這種大規(guī)模的應(yīng)用會(huì)發(fā)生。
為此,你怎么看?Rust 是否會(huì)取代 C、C++?
參考資料:
https://www.theregister.com/2022/09/28/is_it_time_to_retire_c/?td=rt-3a
頭條 22-10-03
頭條 22-10-02
頭條 22-10-02
頭條 22-10-02
頭條 22-10-02
頭條 22-10-02
頭條 22-10-02
頭條 22-10-02
頭條 22-10-02
頭條 22-10-01
頭條 22-10-01
頭條 22-10-01
頭條 22-10-01
頭條 22-10-01
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30
頭條 22-09-30