Rust 和 C 排序演算法效能對比
關注「 Rust程式設計指北 」,一起學習 Rust,給未來投資
“C++ 和 Java 的發展速度比 C 語言更快,但我敢肯定,C 語言仍然會長期存在。”
Dennis Ritchie, C語言之父
C 和 Rust 的速度比較
方法
比較這兩種語言速度的方法是,通過實現常用的排序演算法,並在不同的元素範圍執行,比較哪種語言在排序時耗時最長。我們使用的排序演算法包括:
1. Bubble Sort(氣泡排序)
2. Insertion Sort(插入排序)
3. Selection Sort(選擇排序)
4. Shell Sort(希爾排序)
5. Heap Sort(堆排序)
圖:時間複雜度
以上是常見的排序演算法的時間複雜度,通過觀察最壞情況下的複雜度,我們可以大致知道哪種排序技術會在它們之間表現最差。
氣泡排序 Bubble sort 最壞情況複雜度為O(N²),與其他排序演算法相比,可能會出現表現最差的情況。我們將要生成的結果還將輸出比較元素排序所需的時間,來幫助我們瞭解最壞情況下的時間複雜度。
所以,我已經用 C 和 Rust 編寫了以上 5 種演算法。對於輸入,我使用一個整數陣列,並使用 C 語言中的隨機數生成器函式 rand() 和 Rust 中的 rand::Rng 在陣列中填充隨機數。這個陣列被作為排序演算法的輸入,輸出記錄在一個矩陣中。測試三個範圍 1000,10000 & 100000 個元素的演算法效能。
我們設定運行了 100 次迭代,並取平均值來生成輸出結果。
效能測試的設定
完成並執行上述設定的系統配置是:
macOS Catalina
MacBook Pro(16英寸,2019年版本)
處理器: 2.3 GHz 8 核英特爾酷睿 i9
記憶體: 16 GB 2667 MHz DDR4
clang 版本 12.0.0 (優化 flag -O3)
rustc 1.45.2 (優化 flag -release)
效能統計
以下是生成的輸出:
C語言在不同排序演算法上的表現
Rust 在不同排序演算法上的表現
從輸出結果中可以非常清楚地看到,大部分結果是非常接近。對於每種排序演算法和陣列範圍,在某些情況下 Rust 表現更好,而在某些情況下 C 表現更好。在較小的元素範圍(1000 元素)中,除了插入排序之外,Rust 表現更好一些。對於 10000 元素的範圍,C 語言在每種排序演算法下都表現得更好。
條形圖也展示了所有情況下的執行結果,速度幾乎相同。
你也可以嘗試在自己的系統上去驗證。
專案程式碼 Github : http://github.com/imrushabh/C_vs_Rust
結論
要得出哪種語言更快的結論是相當困難的,因為它取決於具體情況。但我們可以認為 Rust 在速度上是 C 語言的競爭對手,它比許多其他流行的語言如 Java 和 Python 速度更快。Rust 提供了很多功能,比如它注重速度、記憶體安全和並行,而且它也是開源的,我們可以使用 Rust 開發廣泛的新軟體應用,比如遊戲引擎、作業系統、檔案系統、瀏覽器元件和虛擬現實的模擬引擎。在未來的時間裡,我們肯定會到處看到 Rust 的身影!!!
英文原文:
http://levelup.gitconnected.com/which-is-faster-rust-or-c-lets-find-out-who-is-the-usain-bolt-87495c774c8
推薦閱讀
覺得不錯,點個贊吧
掃碼關注「 Rust程式設計指北 」
- Rust 安全參考 | Rust 編譯到 WebAssembly 可能出現側通道攻擊
- Rust 實戰:使用閉包和泛型實現簡單的Cache
- 學習 Rust 你需要一個認知框架
- Rust 實戰:使用 Iterator 迭代器實現斐波那契數列(Fibonacci)
- Rust 中的氣泡排序:第一部分
- rust Cell 與 RefCell的區別
- 2022年非同步Rust的改進計劃
- rust 如何用單調時鐘獲取更精確的時間間隔
- 反方觀點:為什麼我們沒有選擇Rust?
- rust使用vec在遍歷時刪除元素
- 為 Rust 編譯器提速的經驗分享
- Rust 中常見的有關生命週期的誤解
- Rust 與 C 不完全對比
- Python、Java佔主導,Rust、Go增長迅速,元宇宙成為關注焦點|2022技術趨勢預測
- Rust 在這個領域要大放異彩:一本新書推薦
- 用 Rust 鏽化 Vue Compiler
- Rust 到底值不值得學:萬字長文對比、特色和理念
- Node.js 開發者的 Rust 入門指南
- 厭倦 JavaScript,開發者用 Rust 開啟替換潮?
- 喜歡 Rust 的 5 大理由,你認可嗎?