Rust初體驗,它確實(shí)有點(diǎn)快

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的特性:

  1. 對0和任意數(shù)進(jìn)行XOR運(yùn)算,得到的仍然是這個數(shù)本身,即a^0=a。
  2. 對同一個數(shù)進(jìn)行XOR運(yùn)算,返回的結(jié)果是0。即a^a=0。
  3. 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)步。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容