-d:release disables bounds checking, so the Rust examples would have to be modified for unchecked indexing for a fair comparison.
It disables a lot of other things too. The current comparison is unfair. Why do the examples need to be modified to disable bounds checking for Rust? If it's easier you can compile the Nim examples with -d:release and enable bounds checking by also supplying --boundChecks:on.
I’ve added additional results with Nim’s --boundChecks:on flag. Thank you two for the suggestions.
Oh, my bad. The numbers differ a lot (2~2.5x faster). I’ve updated the article.
Now it's more in line with my experience of Nim usually being quite a bit faster than Rust, not to mention much easier to write and less verbose (text munging code in Rust seemed to be about 15% calls to as_slice() and to_string ()).
The as_slice situation was acknowledged to be deplorable, and is being vastly improved in the runup to 1.0.
As for speed, please file a performance bug! We love to know where we're missing out on optimizations.