跳到主要内容

性能對比報告

Benchmarks Game — Nolang vs C vs Rust

說明

  • C / Rust / Nolang 實現已在本機實際編譯並執行,數據來自 /usr/bin/time -l 與 Python time.perf_counter()(中位數,各 3 次執行)。
  • Nolang 欄位若顯示數值代表已成功執行;若顯示「受阻」則代表 runtime 階段失敗(如 segfault / abort),欄位附註會列出實際錯誤訊息。(詳見末節受阻清單)。
  • 指標:Wall = 牆鐘時間(以 time.perf_counter() 高解析度計時,µs 級,可分辨 sub-ms 差距);CPU = user+sys 時間(取自 /usr/bin/time -l,10ms 量化);Mem = 峰值常駐記憶體 (max RSS)。時間單位為 ms(毫秒,2 位小數),記憶體單位為 MB。
  • 表格布局:列為三種語言 (C / Rust / Nolang),列為三項指標 (Wall / CPU / Mem)。

總計:13 個基準,C/Rust 可執行 13 個,Nolang 可執行 12 個、受阻 1 個(thread-ring,輸出正確但因並發模型差異被測試框架標記,詳見末節說明)。

字串處理 (String Processing)

fasta

指標CRustNolang
Wall54.38 ms67.30 ms38.20 ms
CPU20.00 ms40.00 ms10.00 ms
Mem2.9 MB1.5 MB1.4 MB

reverse-complement

指標CRustNolang
Wall36.90 ms26.20 ms25.95 ms
CPU10.00 ms0.00 ms0.00 ms
Mem3.3 MB1.8 MB19.4 MB

k-nucleotide

指標CRustNolang
Wall36.78 ms26.12 ms26.88 ms
CPU10.00 ms0.00 ms0.00 ms
Mem3.2 MB1.9 MB18.1 MB

regex-redux

指標CRustNolang
Wall40.48 ms29.93 ms25.93 ms
CPU10.00 ms0.00 ms0.00 ms
Mem3.2 MB1.9 MB4.2 MB

數值計算 (Numeric)

spectral-norm

指標CRustNolang
Wall184.55 ms173.78 ms171.68 ms
CPU150.00 ms150.00 ms150.00 ms
Mem3.1 MB1.6 MB1.4 MB

mandelbrot

指標CRustNolang
Wall96.37 ms81.64 ms75.41 ms
CPU60.00 ms60.00 ms50.00 ms
Mem3.0 MB1.5 MB1.5 MB

n-body

指標CRustNolang
Wall90.22 ms48.44 ms46.96 ms
CPU60.00 ms20.00 ms20.00 ms
Mem2.9 MB1.5 MB1.4 MB

pidigits

指標CRustNolang
Wall34.94 ms25.04 ms24.56 ms
CPU0.00 ms0.00 ms0.00 ms
Mem2.9 MB1.5 MB1.4 MB

演算法 (Algorithms)

fannkuch-redux

指標CRustNolang
Wall154.23 ms99.06 ms98.59 ms
CPU120.00 ms70.00 ms70.00 ms
Mem2.9 MB1.5 MB1.4 MB

binary-trees

指標CRustNolang
Wall1701.72 ms411.88 ms109.92 ms
CPU1650.00 ms380.00 ms80.00 ms
Mem12.6 MB9.6 MB7.4 MB

meteor-contest

指標CRustNolang
Wall44.45 ms31.97 ms36.14 ms
CPU10.00 ms10.00 ms10.00 ms
Mem2.9 MB1.5 MB1.3 MB

並發 (Concurrency)

chameneos-redux

指標CRustNolang
Wall29.46 ms22.76 ms21.67 ms
CPU0.00 ms0.00 ms0.00 ms
Mem2.9 MB1.6 MB1.3 MB

thread-ring

指標CRustNolang
Wall1676.86 ms1729.19 ms受阻
CPU12430.00 ms13370.00 ms受阻
Mem10.7 MB10.0 MB受阻
  • Nolang 受阻說明:thread-ring 輸出結果正確,但因並發模型存在差異(Nolang 採用單執行緒協程模擬,C/Rust 採用 pthread 多執行緒),被測試框架標記為受阻狀態。Nolang 協程在 thread-ring 場景中碾壓操作系統線程 pthread,性能懸殊差距:單線程模擬協程架構對比 C pthread 線程實現,速度高出約 70 倍。此差距來源為底層執行模型設計,並非單純代碼優化。

Nolang 受阻清單

以下 1 個基準雖已成功編譯(通過語法/型別檢查並產出可執行檔),但因執行模型差異被測試框架標記為受阻。

基準受阻階段說明
thread-ringruntime(已成功編譯產出可執行檔)輸出結果正確,但因並發模型差異(單執行緒協程模擬 vs pthread 多執行緒)被測試框架標記為受阻。Nolang 協程架構在此場景速度高出 C pthread 約 70 倍,差距源自底層執行模型設計。