The Computer Language
25.02 Benchmarks Game

Rust versus Swift

How the programs are written matters! Always look at the source code.

If the fastest programs are flagged * possible hand-written vector instructions or "unsafe" or naked ffi, does the host language matter? You might be more interested in the less optimised programs — more seconds, less gz source code.

fannkuch-redux      
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
* Rust #6 3.81 15.15—15.33 4,137 1260 10.56
Rust #4 6.90 27.12 4,141 1026 10.29
Rust #5 7.47 29.34 3,985 1023 10.27
* Swift #3 8.22 32.50—32.61 13,808 1103 14.41
Swift #8 34.68 34.68—34.78 13,476 470 12.23
Rust #2 9.16 35.93 3,985 1198 9.94
n-body      
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
* Rust #9 2.19 1.45—4.13 3,195 1881 9.38
* Rust #7 3.24 3.24 2,937 1759 9.85
Rust #3 3.46 3.46 3,023 1774 9.16
Rust #2 3.65 3.65 3,019 1809 9.62
* Rust #6 4.36 4.00—5.52 3,019 1796 9.37
* Rust #5 5.02 5.02 3,027 2224 9.56
Rust #4 5.13 4.74—6.21 3,019 1810 9.19
* Swift #3 5.46 5.45—5.53 25,002 1688 14.30
* Swift #4 5.49 5.49 25,010 1361 15.19
* Swift #5 5.52 5.50—5.55 25,010 1372 15.67
* Swift #7 5.53 5.52 25,010 1333 14.58
Rust 5.52 5.55—5.67 3,019 1483 9.35
Swift #6 5.81 5.79—5.86 12,947 1213 13.99
Swift #8 6.66 6.66 12,808 1285 12.73
Swift 7.89 7.88 12,808 1210 13.77
Swift #9 287.49 287.49—288.02 24,867 1532 14.21
spectral-norm      
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
* Rust #6 0.72 2.85 4,293 1132 10.41
Rust #4 0.72 2.85 4,014 823 10.35
* Rust #5 0.72 2.85 3,981 1062 10.56
* Rust 0.72 2.86 4,276 1262 9.73
* Rust #2 0.73 2.86 4,264 1117 10.55
* Rust #3 0.74 2.94 4,010 1060 9.69
Swift #8 5.36 5.35 24,936 411 15.00
Swift #3 1.45 5.71 13,705 607 13.91
* Rust #7   Empty  
mandelbrot      
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
* Rust #4 0.95 3.78 35,955 1301 10.94
* Rust #6 1.08 4.22 36,385 1338 10.98
Rust #2 1.10 4.34 36,016 770 11.17
Rust #5 1.12 4.38 36,549 725 11.15
Rust #7 1.11 4.38 35,934 763 10.92
Rust #3 1.15 4.57 14,008 1013 10.73
* Swift #7 1.35 5.30 57,856 1147 15.57
* Swift #6 1.48 5.78 60,969 1147 15.74
Rust 2.03 7.90 42,541 874 9.75
Swift #8 25.63 25.62 12,841 426 13.44
Swift 26.55 26.54 12,853 400 13.78
Swift #5 7.28 27.12 49,291 665 14.09
* Swift #3   Bad Output  
fasta      
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
* Rust #7 0.78 1.55 4,866 2533 10.02
Rust #3 1.98 1.98 2,933 1235 9.40
Rust #9 0.94 3.22—3.29 5,362 1952 9.60
Rust #5 0.94 3.33—3.44 5,505 1963 9.57
Rust #2 0.94 3.45—3.49 5,550 1910 9.74
Rust #6 3.48 3.48 128,033 959 9.00
Rust #4 3.48 3.48 128,160 944 9.04
* Swift #2 2.24 4.74—5.94 13,767 1952 15.21
Rust 4.49 4.51—4.55 2,990 1240 9.54
* Swift #3 2.20 5.37 39,313 2097 16.81
* Swift 5.43 5.42—5.47 12,640 1533 14.40
Swift #8 18.86 18.86—18.92 12,837 828 13.46
k-nucleotide      
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
Rust #7 2.61 8.24—8.48 139,071 1585 12.79
Rust #3 3.24 9.47—9.81 141,701 1549 10.47
Rust #6 2.81 10.17—10.43 165,057 1697 12.99
Rust #5 3.82 11.24—11.54 143,118 1745 10.89
Rust #2 6.05 15.52—16.06 143,139 1350 10.31
Rust #9 6.58 17.36—18.41 140,845 1850 12.86
Rust #4 6.76 18.78—19.84 142,778 1755 11.32
* Swift #2 14.46 55.16—55.44 273,932 1373 14.99
Rust 21.38 65.36—66.34 159,539 1086 10.25
Swift #8 167.99 175.66—188.61 904,810 658 14.96
Swift #7 225.53 231.92—242.63 649,970 607 14.99
Swift   Empty  
reverse-complement      
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
* Rust 0.54 0.85 513,090 2762 10.01
Rust #2 0.99 1.63 1,022,960 1332 10.05
Rust #3 1.00 1.73 1,022,190 1105 10.48
* Swift 1.97 2.41 825,594 1293 16.00
binary-trees      [ Contentious. Different approaches. ]
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
Rust #5 1.10 3.95—4.10 137,413 771 10.93
Rust #2 1.21 4.32—4.38 141,509 729 10.47
Rust #4 1.38 5.04—5.11 171,651 765 10.67
Rust #3 1.40 5.04—5.12 162,599 762 10.77
Rust 2.07 7.21—7.27 137,667 760 9.46
Swift 18.32 54.27—54.38 763,609 720 15.54
Swift #8 54.91 54.85—57.23 416,625 567 11.96
Swift #4 17.69 55.61—57.68 733,131 772 15.64
Swift #5 18.99 56.13—58.05 764,781 813 14.50
Swift #2 18.36 58.30—64.86 733,131 822 15.77
Swift #3 18.24 58.63—59.13 733,000 868 14.57
* Swift #9   Empty  
pidigits      [ Contentious. Different libraries. ]
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
Rust #4 0.72 0.72 3,994 804 10.17
* Rust 0.75 0.75 4,239 1426 9.18
* Rust #2 0.75 0.75 4,243 1312 9.19
* Rust #3 0.75 0.75 4,481 1373 9.31
* Swift #2 0.76 0.75 14,238 606 13.58
regex-redux      [ Contentious. Different libraries. ]
  elapsed Mean or 95% CI      
source secs cpu secs mem gz make
Rust #6 1.18 1.43 160,154 994 11.90
Rust #5 1.34 1.58 210,186 777 10.93
Rust 1.33 1.56—1.61 160,023 811 11.14
Rust #4 1.35 1.60 206,840 771 10.94
Rust #3 1.36 1.59—1.65 210,850 726 12.52
Rust #2 1.39 1.64 160,625 707 10.84
* Rust #7 0.79 2.01 155,496 2464 11.52
Swift #2 38.81 38.84—39.05 710,750 678 14.74
Swift 23.39 39.78—39.91 922,284 721 13.23
Swift #4 18.22 41.22—41.58 1,099,583 751 14.65
Rust

1.83.0
(90b35a623
2024-11-26)
LLVM version: 19.1.1

Swift

Swift version 6.0
(swift-6.0-RELEASE)
Target: x86_64-unknown-linux-gnu