Is it? An object field access in python is a dynamic hash lookup followed by a method call as a fallback (itself involving hashed lookups up the class hierarchy). That's not an "interpreter vs. native" kind of thing, that's just the semantics of the language that have to be preserved. And that's just not going to be "fast" in the way that the user of a JIT would want. Code dominated by Python datastructures is going to be "slow" in ways that JITs can't fix, ever.
Which is why Python appears to have given up on the effort in this space. PyPy too[1] really never delivered on the desired performance gains (like 5x or so on typical code) without forcing the user into careful optimization.
Numba, to its credit, doesn't even try. It falls back to python if it must for python stuff, but is quite clear that it's providing no benefit if that's what you're doing. And the stuff it does do is obvious and clean and extremely useful.
[1] PyPy is also looking pretty moribund recently.
[–] Dylan16807 2 days ago
[–] zahlman 1 day ago
But that doesn't help much if/when you're doing two hash lookups per iteration just to find two small integers to add together.
[–] ajross 2 days ago
Maybe, but the world is still waiting for the counterexample. Python is simply not a runtime well-suited to optimization.
In the meantime, those of us who actually enjoy real HPC problems are using numba and rolling our eyes about all the confuffery around JITs. Maybe one will arrive that proves us wrong, but numba is fast today.
[–] Dylan16807 2 days ago
I don't have enough experience with PyPy to say much about it.
[–] strenholme 1 day ago
I wish Lua 5.1 could become part of POSIX; there are a lot of implementations of it out there.
[–] ajross 1 day ago
The upthread comment was about an idea for "inline Cython", which was then hijacked because that's largely what numba is. These are technologies aimed at optimized native code running over native types to do stuff like numerics and ML and other HPC tasks. Lua isn't any more responsive to this domain than Javascript has been, it's not really the subject under discussion.
[–] strenholme 1 day ago
Lua 5.1’s edge over Javascript and Python is that it’s a lot smaller and simpler.
[1] It’s possible to recompile Lua 5.1 to have the numeric data type be an int, but the standard compiles of Lua5.1 only have double precision floats for numbers. Bitwise operators are technically not part of Lua 5.1, but a library to add support is easy and is usually done: Most Lua5.1 forks including LuaJIT and MediaWiki’s version of Lua5.1 have such a library available. Later versions of Lua have both int and float support.
[–] ajross 13 hours ago
Yeah, but again you don't reach for C when you have a string or hash-based logic problem, which is the reason that other platforms are favored. You reach for Python[1] to solve those problems, and it works fine.
You reach for C when you care about cache footprint or memory layout. You reach for C when you need SIMD parallelism. You reach for C when you care about doing the math in single precision or 32 bit integers and will handle the precision worries yourself.
You emphatically don't reach for python (or Lua) in those situations. But notably you can reach for numba, and implement your small core of performance code in python next to the other logic you already have. And there's value there.
Screaming about using Lua instead is just nonresponsive. Lua is arguably better at performance code than Python. Lua is absolutely not faster than numba, nor will it ever be (absent a numba-like translation layer) and repeatedly trying to argue so is very much missing the point.
[1] Or fine, Lua or JS or whatever. But I'm trying deeply not to let this turn into a frothing language flame, and this is after all a python discussion.
[–] Dylan16807 1 day ago
When OP wrote "inline Cython" they didn't seem focused on numerics, they talked about "proper C speed", and they mentioned modifying the language. I don't think it's getting off-topic to suggest a deeper integration that lets the JIT be very intimate with the interpreter and truly inline things in a way that bypasses language-crossing and type-dispatching overhead. As long as you're in the hot path, let it look up object fields in a couple instructions.
[–] ajross 1 day ago
Isn't that basically what I said? Lua isn't "proper C speed", nor is PyPy, the cancelled Python JIT in question, nor even V8. That's a different problem area with different technologies. The fact that you like coding backend stuff in Lua or whatever isn't really saying much about whether numba is great.
But it is. Numba is great.