On Fri, 03 Sep 2010 21:17:44 +0100, BartC wrote:
> I'm not sure the Python developers were interested in getting fast > loops. > > For-loops which iterate between two numbers are amongst the easiest > things to make fast in a language. Yet originally you had to use: > > for i in range(N): I don't have any versions of Python prior to version 1.5, but as far back as that there was always a choice between creating a list with range() and a lazy iterator with xrange(). > which (if I understood correctly) actually created a list of N objects, > populated it with the values 0, 1, 2...N-1 (presumably using a more > sensible loop), then iterated between the values of the list! By "more sensible", do you mean "in C code"? If so, then you are correct. > So Python had the distinction of being one of the slowest languages in > which to do nothing (ie. running an empty loop). Nonsense. [st...@sylar ~]$ time python test.py real 0m3.441s user 0m2.969s sys 0m0.024s [st...@sylar ~]$ time perl test.pl real 0m3.490s user 0m2.722s sys 0m0.011s [st...@sylar ~]$ time ruby test.rb real 0m11.875s user 0m6.740s sys 0m3.995s The difference between an empty loop in Python and Perl is insignificant, and much faster than Ruby (at least the specific version of Ruby installed on my machine, 1.8.6). And if you want to see the code I ran: [st...@sylar ~]$ cat test.* # perl for ($i = 0; $i < 10_000_000; ++$i) { 1; } # python for i in xrange(10000000): 1 # ruby for i in 0...10000000 1 end Just for comparisons' sake: [st...@sylar ~]$ gpc empty_test.p [st...@sylar ~]$ time ./a.out real 0m0.106s user 0m0.070s sys 0m0.004s [st...@sylar ~]$ cat empty_test.p program main(input, output); var i: integer; begin for i := 0 to 10000000 do begin end; end. Of course, a real optimizing compiler would realise that the Pascal code did nothing at all, and compile it all away to an empty a.out file... -- Steven -- http://mail.python.org/mailman/listinfo/python-list