One of my colleagues have updated my Bubble Sort Benchmark with a Rust implementation, and the results are in!
> ./start.bat > clang -O -fsanitize=address main.cpp && a.exe Creating library a.lib and object a.exp 30125ms to sort 50000 elements 10 times (Vector) 22985ms to sort 50000 elements 10 times (Array) > clang -O main.cpp && a.exe 10281ms to sort 50000 elements 10 times (Vector) 9906ms to sort 50000 elements 10 times (Array) > dotnet run --configuration=Release 32547ms to sort 50000 elements 10 times (List) 15531ms to sort 50000 elements 10 times (Array) > node index.js 28133ms to sort 50000 elements 10 times > rustc -O main.rs -o rust.exe > rust.exe Took: 10.5915778s to sort 50000 elements 10 times
As seen, sorting 50k elements 10 times took 10.59 seconds using Rust. The C++ implementation was a tad faster at 9.9 seconds when using C arrays and 10.28 seconds when using std::vector. However, the C++ implementation does not guarantee against memory corruption, which is the case with Rust. The paid memory safety overhead of 3-7% in Rust, is in my opinion worth it.
Comparing the address sanitized version of the C++ array implementation, Rust is twice as fast fast: 10.59 vs 22.98 seconds. I believe this is due to the implementation of the sanitizer in clang, i.e. it needs protect every memory access, since C++ allows pointer arithmetic. Rust does not allow such programming behavior, unless wrapped in
Compared with the node and DotNet core implementations of Bubble sort, the Rust implementation is between 50% (DotNet Array) and 300% (DotNet List) faster, which again is not surprising due to the restrictions of the Rust language: which allows for tight optimizations without introducing runtime checks (except for array out of bounds).
Rust is an awesome language and I definitely hope to see it succeed!