Rust初體驗
寫了多年的Java,某天機(jī)緣巧合之下聽說了一門語言叫Rust,Rust的親爹是Mozila,如果要和其它語言拼爹的話,實(shí)力應(yīng)該還是可以的。
官方介紹如下:
Rust is blazingly fast and memory-efficient: with no runtime or garbage collector, it can power performance-critical services, run on embedded devices, and easily integrate with other languages.
Rust速度快得驚人,內(nèi)存效率也很高。沒有運(yùn)行時或垃圾收集器,它可以為性能關(guān)鍵的服務(wù)提供強(qiáng)大支持,可以在嵌入式設(shè)備上運(yùn)行,并且很容易與其他語言集成。
Rust’s rich type system and ownership model guarantee memory-safety and thread-safety — enabling you to eliminate many classes of bugs at compile-time.
Rust豐富的類型系統(tǒng)和所有權(quán)模型保證了內(nèi)存安全性和線程安全性——使您能夠在編譯時消除許多各種各樣的bug。
Rust has great documentation, a friendly compiler with useful error messages, and top-notch tooling — an integrated package manager and build tool, smart multi-editor support with auto-completion and type inspections, an auto-formatter, and more.
Rust的文檔很強(qiáng)大,有一個友好的編譯器,能提示一些有用的錯誤信息,以及一流的工具——一個集成的包管理器和構(gòu)建工具,支持自動完成和類型檢查的智能多項編輯器,一個自動格式化程序,等等。
我已經(jīng)在上文中把今天的重點(diǎn)加粗標(biāo)識了。打算用一個LeetCode上的算法題目來對比下Java實(shí)現(xiàn)和Rust實(shí)現(xiàn),看看Rust是不是真的很驚人。
題目如下:
給定一個非空整數(shù)數(shù)組,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。
歡迎留言討論。微信/知乎可搜索碼神手記同名賬號,分享關(guān)注,共同進(jìn)步。
示例1:
輸入: [2,2,1]
輸出: 1
示例2
輸入: [4,1,2,1,2]
輸出: 4
解法:利用異或運(yùn)算(XOR)的特性,使用位操作進(jìn)行計算。
先來一起復(fù)習(xí)下XOR的特性:
- 對0和任意數(shù)進(jìn)行XOR運(yùn)算,得到的仍然是這個數(shù)本身,即a^0=a。
- 對同一個數(shù)進(jìn)行XOR運(yùn)算,返回的結(jié)果是0。即a^a=0。
- XOR滿足交換律和結(jié)合律。即aba=(aa)b=0^b=b。
以下是擼代碼環(huán)節(jié)......
Java版本:
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for (int num : nums) {
result = result ^ num;
}
return result;
}
}
Rust版本:
impl Solution {
pub fn single_number(nums: Vec<i32>) -> i32 {
let mut result: i32 = 0;
for num in nums {
result = result ^ num;
}
return result;
}
}
執(zhí)行結(jié)果整理到一個表格中,便于直觀地對比:
| 語言 | 執(zhí)行用時 | 內(nèi)存消耗 |
|---|---|---|
| Java | 1ms | 40.9MB |
| Rust | 0ms | 2.1MB |
從數(shù)據(jù)來看,Rust在執(zhí)行用時和內(nèi)存消耗上比Java強(qiáng)大太多。這個例子中內(nèi)存消耗的差距更明顯一些。
結(jié)語
如果不談Java和Rust背后的生態(tài),僅從運(yùn)行效率本身來看。Rust作為一門更接近底層的語言,性能比Java強(qiáng)也是應(yīng)該的。在內(nèi)存要求苛刻、GC時間苛刻的場景下不失為一個好的選擇,例如嵌入式、實(shí)時股票行情場景。能不能取代C++就看Mozila怎么搞好社區(qū)和生態(tài)圈了,以及C++程序員們是否愿意付出學(xué)習(xí)成本。
我也是剛接觸Rust,之后也會持續(xù)關(guān)注,希望Rust未來可期。朋友們有興趣的話可以多多交流,共同拓寬技術(shù)廣度與深度。
歡迎留言討論。微信/知乎可搜索碼神手記同名賬號,分享關(guān)注,共同進(jìn)步。