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

Rust初體驗(yàn)

寫了多年的Java,某天機(jī)緣巧合之下聽說(shuō)了一門語(yǔ)言叫Rust彻采,Rust的親爹是Mozila腐缤,如果要和其它語(yǔ)言拼爹的話,實(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)存效率也很高。沒(méi)有運(yùn)行時(shí)或垃圾收集器特笋,它可以為性能關(guān)鍵的服務(wù)提供強(qiáng)大支持剃浇,可以在嵌入式設(shè)備上運(yùn)行,并且很容易與其他語(yǔ)言集成。

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)存安全性和線程安全性——使您能夠在編譯時(shí)消除許多各種各樣的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è)友好的編譯器,能提示一些有用的錯(cuò)誤信息淘讥,以及一流的工具——一個(gè)集成的包管理器和構(gòu)建工具圃伶,支持自動(dòng)完成和類型檢查的智能多項(xiàng)編輯器,一個(gè)自動(dòng)格式化程序适揉,等等。

我已經(jīng)在上文中把今天的重點(diǎn)加粗標(biāo)識(shí)了煤惩。打算用一個(gè)LeetCode上的算法題目來(lái)對(duì)比下Java實(shí)現(xiàn)和Rust實(shí)現(xiàn)嫉嘀,看看Rust是不是真的很驚人。

題目如下:
給定一個(gè)非空整數(shù)數(shù)組魄揉,除了某個(gè)元素只出現(xiàn)一次以外剪侮,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素洛退。

歡迎留言討論瓣俯。微信/知乎可搜索碼神手記同名賬號(hào),分享關(guān)注兵怯,共同進(jìn)步彩匕。

示例1:

輸入: [2,2,1]
輸出: 1

示例2

輸入: [4,1,2,1,2]
輸出: 4

解法:利用異或運(yùn)算(XOR)的特性,使用位操作進(jìn)行計(jì)算媒区。
先來(lái)一起復(fù)習(xí)下XOR的特性:

  1. 對(duì)0和任意數(shù)進(jìn)行XOR運(yùn)算驼仪,得到的仍然是這個(gè)數(shù)本身,即a^0=a袜漩。
  2. 對(duì)同一個(gè)數(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é)果整理到一個(gè)表格中座掘,便于直觀地對(duì)比:

語(yǔ)言 執(zhí)行用時(shí) 內(nèi)存消耗
Java 1ms 40.9MB
Rust 0ms 2.1MB

從數(shù)據(jù)來(lái)看递惋,Rust在執(zhí)行用時(shí)和內(nèi)存消耗上比Java強(qiáng)大太多。這個(gè)例子中內(nèi)存消耗的差距更明顯一些溢陪。

結(jié)語(yǔ)

如果不談Java和Rust背后的生態(tài)丹墨,僅從運(yùn)行效率本身來(lái)看。Rust作為一門更接近底層的語(yǔ)言嬉愧,性能比Java強(qiáng)也是應(yīng)該的贩挣。在內(nèi)存要求苛刻、GC時(shí)間苛刻的場(chǎng)景下不失為一個(gè)好的選擇,例如嵌入式王财、實(shí)時(shí)股票行情場(chǎng)景卵迂。能不能取代C++就看Mozila怎么搞好社區(qū)和生態(tài)圈了,以及C++程序員們是否愿意付出學(xué)習(xí)成本绒净。

我也是剛接觸Rust见咒,之后也會(huì)持續(xù)關(guān)注,希望Rust未來(lái)可期挂疆。朋友們有興趣的話可以多多交流改览,共同拓寬技術(shù)廣度與深度。

歡迎留言討論缤言。微信/知乎可搜索碼神手記同名賬號(hào)宝当,分享關(guān)注,共同進(jìn)步胆萧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庆揩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跌穗,更是在濱河造成了極大的恐慌订晌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚌吸,死亡現(xiàn)場(chǎng)離奇詭異锈拨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)羹唠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門推励,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肉迫,你說(shuō)我怎么就攤上這事验辞。” “怎么了喊衫?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵跌造,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我族购,道長(zhǎng)壳贪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任寝杖,我火速辦了婚禮违施,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瑟幕。我一直安慰自己磕蒲,他們只是感情好留潦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辣往,像睡著了一般兔院。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上站削,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天坊萝,我揣著相機(jī)與錄音,去河邊找鬼许起。 笑死十偶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼瓜富,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了荣刑?” 一聲冷哼從身側(cè)響起馅笙,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伦乔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后董习,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烈和,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年皿淋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了招刹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窝趣,死狀恐怖疯暑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哑舒,我是刑警寧澤妇拯,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站洗鸵,受9級(jí)特大地震影響越锈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膘滨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一甘凭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧火邓,春花似錦丹弱、人聲如沸德撬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砰逻。三九已至,卻和暖如春泛鸟,著一層夾襖步出監(jiān)牢的瞬間蝠咆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工北滥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刚操,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓再芋,卻偏偏與公主長(zhǎng)得像菊霜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子济赎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359