Rust初體驗
寫了多年的Java,某天機緣巧合之下聽說了一門語言叫Rust,Rust的親爹是Mozila,如果要和其它語言拼爹的話,實力應該還是可以的。
官方介紹如下:
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速度快得驚人,內存效率也很高。沒有運行時或垃圾收集器,它可以為性能關鍵的服務提供強大支持,可以在嵌入式設備上運行,并且很容易與其他語言集成。
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豐富的類型系統和所有權模型保證了內存安全性和線程安全性——使您能夠在編譯時消除許多各種各樣的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的文檔很強大,有一個友好的編譯器,能提示一些有用的錯誤信息,以及一流的工具——一個集成的包管理器和構建工具,支持自動完成和類型檢查的智能多項編輯器,一個自動格式化程序,等等。
我已經在上文中把今天的重點加粗標識了。打算用一個LeetCode上的算法題目來對比下Java實現和Rust實現,看看Rust是不是真的很驚人。
題目如下:
給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。
歡迎留言討論。微信/知乎可搜索碼神手記同名賬號,分享關注,共同進步。
示例1:
輸入: [2,2,1]
輸出: 1
示例2
輸入: [4,1,2,1,2]
輸出: 4
解法:利用異或運算(XOR)的特性,使用位操作進行計算。
先來一起復習下XOR的特性:
- 對0和任意數進行XOR運算,得到的仍然是這個數本身,即a^0=a。
- 對同一個數進行XOR運算,返回的結果是0。即a^a=0。
- XOR滿足交換律和結合律。即aba=(aa)b=0^b=b。
以下是擼代碼環節......
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;
}
}
執行結果整理到一個表格中,便于直觀地對比:
語言 | 執行用時 | 內存消耗 |
---|---|---|
Java | 1ms | 40.9MB |
Rust | 0ms | 2.1MB |
從數據來看,Rust在執行用時和內存消耗上比Java強大太多。這個例子中內存消耗的差距更明顯一些。
結語
如果不談Java和Rust背后的生態,僅從運行效率本身來看。Rust作為一門更接近底層的語言,性能比Java強也是應該的。在內存要求苛刻、GC時間苛刻的場景下不失為一個好的選擇,例如嵌入式、實時股票行情場景。能不能取代C++就看Mozila怎么搞好社區和生態圈了,以及C++程序員們是否愿意付出學習成本。
我也是剛接觸Rust,之后也會持續關注,希望Rust未來可期。朋友們有興趣的話可以多多交流,共同拓寬技術廣度與深度。
歡迎留言討論。微信/知乎可搜索碼神手記同名賬號,分享關注,共同進步。