Quick Rust Comparison
I've been wanting to try out Rust with something very simple as a first pass through the language.
Rust Impressions
Although I didn't do much with functions on this quick pass - I love the ability to not have the order of main in a program to matter.
Super helpful error messages. Here is an example:
warning: value assigned to `temp` is never read
--> src/main.rs:4:13
|
4 | let mut temp=0u32;
| ^^^^
|
= note: `#[warn(unused_assignments)]` on by default
= help: maybe it is overwritten before being read?
I know others have said this, but the Rust compiler feels like it was designed to help me code, rather than just throw errors.
Speed?
I decided to write a simple unoptimized version of the fibonacci sequence. My goal was to take enough time to be noticable...
- On my first pass:
-
- Rust runs took 1m34seconds (using cargo run)
- Python took more than 6 minutes
- C got 7 seconds
Clearly I must have done something wrong...
It turns out that by default it has debug info and checks that slow Rust down. So a
cargo build --release
./target/release/fib
Then it was faster than C.. and I realized I need to turn off C\'s debug bits too with:
gcc -O2 -s -DNDEBUG to gcc helped. gcc fib.c
- The final results (all approximate):
-
- Python: 6+ minutes.
- C: 1.101s
- Rust: .95sE
The Rust
fn main() {
let mut previous=0u32;
let mut current=1u32;
let mut temp;
let maxvalue = 2000000000u32;
for _n in 0..2000000000 {
if current >= maxvalue {
//Reset!
previous=0; current=1;
}
temp = current;
current = previous + current;
previous = temp;
}
println!("{}", current);
}
The C
#include <stdio.h>
int main() {
unsigned long int previous=0;
unsigned long int current=1;
unsigned long int temp;
unsigned long int maxvalue = 2000000000;
for ( int n=0; n < 2000000000; n++ ) {
if (current >= maxvalue) {
//Reset!
previous=0; current=1;
}
temp = current;
current = previous + current;
previous = temp;
}
printf("%lu", current);
}
The Python3
previous=0;
current=1;
temp = 0;
maxvalue = 2000000000;
for n in range(2000000000):
if current >= maxvalue:
#Reset!
previous=0; current=1;
temp = current;
current = previous + current;
previous = temp;
print(current);