Look and think good things about D
bearophile
bearophileHUGS at lycos.com
Fri Nov 15 04:47:20 PST 2013
Ary Borenszweig:
> Here's what I was able to do in some minutes:
>
> ---
> if ARGV.length != 1
> puts "missing argument: n"
> exit 1
> end
>
> n = ARGV[0].to_i
> str = "1"
> buffer = String::Buffer.new(20)
> n.times do
> puts str.length
> str.each_chunk do |digit, count|
> buffer << '0' + count
> buffer << digit
> end
> str = buffer.to_s
> buffer.clear
> end
>
> With n=70 it takes about 4.89s. With n=45 it takes about 0.012s.
This program is much longer in number of tokens to the first D
program. You can write a D program about as fast as this in about
the same number of tokens.
Perhaps I should add an intermediate third version that shows
code that's not as extreme as the two versions there. Thank you
for the implicit suggestion.
> And with Crystal you could do the second version as well,
> because you have access to low level stuff like pointers.
In Crystal do you have final switches, gotos, etc too?
> And also, the language is pretty new so there's still
> a lot of optimizations to be done.
And LDC2 will improve in the meantime.
> I also thought ranges were pretty fast because of their nature.
It also matters a lot how you use them, this is normal in
computer programming.
> Why are they slow in this example?
Just because the first example is not written for speed, I didn't
even add run-time timings for it at first. And it's not that slow.
Bye,
bearophile
More information about the Digitalmars-d
mailing list