This is a common misconception! It is true that, of the Smalltalk descendants, Python was not designed for speed like Self or Java; but it was not designed to be slow or difficult to compile. The main technique required to implement a Python JIT is virtualizable objects, which allows the JIT to temporarily desynchronize the contents of registers from the contents of the heap; it’s not obvious and wasn’t in the first few iterations of PyPy. Additionally, it turns out that tracing the meta-level (see docs or the paper) is a key trick: instead of JIT’ing the Python program, the JIT operates on the interpreter, on the Python VM itself!
That ignores just how slow it is. It’s on the order of 100x slower than “fast” languages like Rust and Go, so doubling in speed… while nice for Python Devs doesn’t really make it fast on an absolute scale. They need to double it’s speed a few more times at least.
Absolute rubbish. Go is typically something like 2-3x slower than “native” languages like C and Rust. Python is typically 50-100x times slower. Go is much much closed to C than it is to Python.
the thing with python is that there is a huge difference between fast and slow code. in go, only really slow code is slow, and in rust even slow code is fast.
You shouldn’t blindly trust those numbers. If you actually read the Python code a lot of them use ctypes to just delegate the work to C. It even says that at the bottom of the page.
Seems like they’ve finally started calling these out - search for “contentious” on this page:
Nonsense. You are only “supposed” to do that because if you are using Python and you want performance you have no other choice!
Reminds me of people saying you aren’t “supposed” to store binaries in git - yeah only because git is so bad at it! When we were all using SVN people would have said “you aren’t supposed to have multiple people editing the same file simultaneously” as if it were a fundamental truth.
And Python isn’t “a glue language”. It’s often used like that but there are many many pure Python projects.
Nonsense. You are only “supposed” to do that because if you are using Python and you want performance you have no other choice!
Reminds me of people saying you aren’t “supposed” to store binaries in git - yeah only because git is so bad at it! When we were all using SVN people would have said “you aren’t supposed to have multiple people editing the same file simultaneously” as if it were a fundamental truth.
And Python isn’t “a glue language”. It’s often used like that but there are many many pure Python projects.
python is a language explicitly designed to resist any form of proper optimization. It just can’t be made fast
This is a common misconception! It is true that, of the Smalltalk descendants, Python was not designed for speed like Self or Java; but it was not designed to be slow or difficult to compile. The main technique required to implement a Python JIT is virtualizable objects, which allows the JIT to temporarily desynchronize the contents of registers from the contents of the heap; it’s not obvious and wasn’t in the first few iterations of PyPy. Additionally, it turns out that tracing the meta-level (see docs or the paper) is a key trick: instead of JIT’ing the Python program, the JIT operates on the interpreter, on the Python VM itself!
it doubled in speed from 3.9 to now, so it’s getting there.
That ignores just how slow it is. It’s on the order of 100x slower than “fast” languages like Rust and Go, so doubling in speed… while nice for Python Devs doesn’t really make it fast on an absolute scale. They need to double it’s speed a few more times at least.
go is also not a fast language. it’s about halfway between python and c.
but they all solve different problems so that’s ok.
Absolute rubbish. Go is typically something like 2-3x slower than “native” languages like C and Rust. Python is typically 50-100x times slower. Go is much much closed to C than it is to Python.
not exactly: https://benchmarksgame-team.pages.debian.net/benchmarksgame/box-plot-summary-charts.html tl;dr it can be true, but not necessarily. fast python code is on the magnitude of 1/5th the speed of go.
the thing with python is that there is a huge difference between fast and slow code. in go, only really slow code is slow, and in rust even slow code is fast.
You shouldn’t blindly trust those numbers. If you actually read the Python code a lot of them use
ctypes
to just delegate the work to C. It even says that at the bottom of the page.Seems like they’ve finally started calling these out - search for “contentious” on this page:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/python3-go.html
i mean, that’s what you’re supposed to do. python is a glue language, after all.
Nonsense. You are only “supposed” to do that because if you are using Python and you want performance you have no other choice!
Reminds me of people saying you aren’t “supposed” to store binaries in git - yeah only because git is so bad at it! When we were all using SVN people would have said “you aren’t supposed to have multiple people editing the same file simultaneously” as if it were a fundamental truth.
And Python isn’t “a glue language”. It’s often used like that but there are many many pure Python projects.
Nonsense. You are only “supposed” to do that because if you are using Python and you want performance you have no other choice!
Reminds me of people saying you aren’t “supposed” to store binaries in git - yeah only because git is so bad at it! When we were all using SVN people would have said “you aren’t supposed to have multiple people editing the same file simultaneously” as if it were a fundamental truth.
And Python isn’t “a glue language”. It’s often used like that but there are many many pure Python projects.