Hacker News new | ask | show | jobs
by mborch 4257 days ago
Assuming this is Python 2.x (doesn't seem to be specified in the benchmark results), then the use of "range" is problematic (should be "xrange").
2 comments

Not really. "range" returns a list, "xrange" returns an iterator. I assume that the list is much easier to reason about in a JIT. In python3, range is a type of its own and certainly more useful for in a JIT.

https://docs.python.org/3/library/stdtypes.html#typesseq-ran...

https://docs.python.org/2/library/functions.html#range

How is allocating and populating a Python list order to do a simple for loop in a tight inner loop not problematic? Neither CPython nor PyPy can optimize that out.

As I said, this is assuming we're on Python 2.x.

PyPy optimizes that out, you have a thing that looks exactly like a list, but is implemented differently under the hood
Based on the description in the docs (http://pythonhosted.org/hope/lang.html#loops), my guess is that "for i in range(N)" is directly translated into something like "for (i = 0; i < N; i++)" in the C++.