3 ms·
They use the LLVM as the backend, which is quite well optimised. The relatively poorer performance of that program on x86 may just be a bug (as the x86 version
by logicchains 12y ago
They use the LLVM as the backend, which is quite well optimised. The relatively poorer performance of that program on x86 may just be a bug (as the x86 version is compiled with a slightly different version of the Rust compiler); the program uses recursion, which may not be a Rust idiom and hence may not be well tested for performance regressions.
- dbaupp 12y agoIt doesn't actually use recursion; it is tail recursion and LLVM optimises it to a loop: .LBB0_77: movq %rax, %rbx movq %rcx, %rax addq %rbx, %rax incq %rdx movq %rbx, %rcx jne .LBB0_77 The difference on x64-64 is the Rust is using 64-bit integers (`int` is pointer sized), while the C is only using 32-bit ones; changing them to the 32-bit `i32` to match the C makes Rust super-fast: 75699 LANGUAGE Rust 2167 75699 LANGUAGE C 2220 # gcc 75699 LANGUAGE C 2271 # clang I opened https://github.com/logicchains/armfib/pull/1 https://github.com/logicchains/armfib/pull/1 .
- logicchains 12y agoThanks. The tables have been updated to use the new values; I'm really surprised how much of a difference changing from int to int32 made.