301 points ngoldbaum 1 day ago 105 comments
alienbaby 1 day ago | parent
sfink 1 day ago | parent
emmatyping 1 day ago | parent
Neywiny 1 day ago | parent
zahlman 1 day ago | parent
Edit: Digging in a bit, a lot of things are slightly bigger overall as you'd expect; but notably the documentation folder has gained two animated GIFs totaling over 10MB (which presumably don't compress too much further even with XZ) demonstrating "tachyon" (which presumably refers to the new sampling profiler, https://docs.python.org/3.15/library/profiling.sampling.html ). These seem to be screen captures from terminal sessions, which work well enough to illustrate what a TUI looks like, but are probably not all that informative about how to use it. I would have much preferred SVG diagrams based around static screenshots.
HackerThemAll 1 day ago | parent
Just take your time to contribute that to the project, it's a win-win.
bsoqk 1 day ago | parent
zahlman 14 hours ago | parent
eviks 1 day ago | parent
lsofzz 1 day ago | parent
droidjj 1 day ago | parent
Nice to see improvements here!
simonw 1 day ago | parent
Here's the "what's new in Python 3.11" document: https://docs.python.org/3/whatsnew/3.11.html
ryandrake 1 day ago | parent
zahlman 1 day ago | parent
Even relatively conservative Linux distros, for example, will only leave you with an unsupported-by-the-core-devs system Python for a small fraction of the cycle. For example, Mint 21.x (which distributes Python 3.10) will be EOL at the end of next April.
ryandrake 1 day ago | parent
EOL doesn't mean the software vanishes from the face of the earth, although we seem to be quickly moving to a world where once the OS vendor EOLs a platform, developers take that as a signal to break everyone on that platform.
I know, open source = I'm not entitled to anything, which is why I say "wish" instead of "demand."
- Sad owner of an iPhone 7
StableAlkyne 1 day ago | parent
I don't think anyone™ goes out of their way to explicitly break things for old Python versions.
It's usually more like "oh cool I can make this code faster/more readable if I use this feature. I don't have to care about the old version anymore so I will do that."
If you really to super duper need a backport, you're in luck: python is an interpreted language whose source is in plaintext, on your local machine.
zahlman 14 hours ago | parent
Okay, but that isn't happening here. There isn't even a real way Python developers could do that, even if they wanted to. That isn't how Python package management works.
When the developer wants to start using features from a new Python version, that requires a new release with a higher version number. The old one is still available, and all standard package tooling will restrict itself to the package versions compatible with your Python version. And the ecosystem standard is to restrict yourself, for current releases, to features available in currently supported Python versions (which is why Simon is talking about 3.11 features and not 3.15 ones, or even 3.12 ones).
wtallis 1 day ago | parent
simonw 1 day ago | parent
My policy is that if the Python version isn't supported then I don't have to take steps to support it either.
If you're stuck with 3.10 that's fine, you'll just be stuck with the versions of my packages that I released prior to October 2026.
Thankfully Python packaging has metadata which means "pip install X" will continue to get you the most recent release which is compatible with your Python version.
Realizing this is the thing that gave me the freedom to finally stop worrying about all of those stale installations.
joshheitzman 1 day ago | parent
That said, its fair enough to drop support for a particular version whenever you want. I'm merely pointing out that there other providers of Python interpreters that are both widely used and support older versions longer. Other folks mentioned OS distributed doing the same already, but personally I don't use the system interpreter and just leave it alone for whatever the distro needs it for.
simonw 23 hours ago | parent
"Anaconda is ending support for Python 3.10 in October 2026."
The most notable holdouts are the various "enterprise" Linux distributions, see other comment: https://news.ycombinator.com/item?id=50021127#50023030
joshheitzman 23 hours ago | parent
ciupicri 23 hours ago | parent
Then why not just support Python >= 3.14 or whatever and that's it?
simonw 23 hours ago | parent
nvme0n1p1 1 day ago | parent
wtallis 17 hours ago | parent
If python interpreters masqueraded as versioned .so libraries, we probably wouldn't even be having this conversation, because having multiple versions of those lying around is ancient precedent.
zahlman 13 hours ago | parent
You can in fact get them in pretty much that form (of course they also include a ton of .py files for the standard library); see https://github.com/astral-sh/python-build-standalone .
CJefferson 1 day ago | parent
While you can give people guidance to install a more up-to-date python, everything is much, much harder than the default experience that gives them 3.9.6 (and also once you have them running a custom version with uv or something, may as well just get them to install 3.15!)
simonw 1 day ago | parent
em500 1 day ago | parent
They still haven't gotten around to actually removing them (probably don't want to deal with support/complains), but keeping versions pinned to ancient versions will naturally nudge developers to take care of their own runtime requirements. (They do the same with bash, perl, ruby.)
[1] https://developer.apple.com/documentation/macos-release-note...
msla 1 day ago | parent
> on Solaris, unlike elsewhere, the packaging system is intended only for system components (and Solaris defines this narrowly), not additional software.
Which points to this:
https://web.archive.org/web/20110411135805/http://holyhandgr...
mrpippy 18 hours ago | parent
Python 3.9 is still included in Xcode and the Command Line Tools, but not the OS itself. It’s only for running scripts (and for supporting LLDB I think), applications cannot link against it like they could with the old OS-bundled 2.7.
Python 3.9 is getting conspicuously old though, I was a bit surprised Apple didn’t update it in Xcode 27.
tcdent 1 day ago | parent
> may as well just get them to install 3.15
Exactly. If the project you're trying to run needs a certain version of Python, it's no concern of the system that you're running on, it's a concern of the environment you're running in.
C build environments and linked libraries don't do this, and it's one of the reasons why I am a fan of isolated Python environments. You can't get into dependency conflict resolution hell if the dependencies are defined by a single system.
HackerThemAll 1 day ago | parent
zahlman 14 hours ago | parent
esafak 1 day ago | parent
zzzoom 1 day ago | parent
- 3.14: Ubuntu 26.04
- 3.12: RHEL 10, Ubuntu 24.04
- 3.10: Ubuntu 22.04
- 3.9: RHEL 9
- 3.8: Ubuntu 20.04
- 3.6: RHEL 8 (EOL in 2029)throw0101a 1 day ago | parent
* https://docs.redhat.com/en/documentation/red_hat_enterprise_...
As does RHEL9:
* https://docs.redhat.com/en/documentation/red_hat_enterprise_...
zzzoom 1 day ago | parent
And "support" doesn't mean you get the same package selection as the original:
$ yum search 'python3' 2>&1 | grep '^python3-' | wc -l
1551
$ yum search 'python3' 2>&1 | egrep '^python3(8|9|\.)' | wc -l
279dralley 15 hours ago | parent
https://access.redhat.com/support/policy/updates/rhel-app-st...
The support lifecycles are divergent from the rest of the OS though. Only the base Python version gets full lifecycle support, the newer versions get refreshed occasionally and eventually fall out of support.
zahlman 14 hours ago | parent
The distro may keep applying security patches to old Python versions but there are definitely limits to what's feasible. If you try to build 3.6 or earlier from source today you'll run into issues with getting an old enough OpenSSL version to be compatible (and then you're stuck with the problems of that version). Some of my old-version builds also seem to segfault whenever you try to use `ctypes` (including indirectly, which can happen in very surprising ways) and I haven't fully diagnosed that.
But developers who want to "participate in the ecosystem" are not going to have a fun time regardless, because their dependencies are not going to keep supporting older Python in newer package versions. On the other hand, your old hack scripts will usually still work in even much newer Python versions, unless you tripped on a standard library deprecation landmine or something (which generally only happens with much older stuff than the 5-year support window; see https://peps.python.org/pep-0594/ and check out the "Added in" column in the table).
elevation 4 hours ago | parent
simonw 1 day ago | parent
uvx --python 3.15 whatsnewtameliaquining 18 hours ago | parent
zahlman 13 hours ago | parent
ameliaquining 10 hours ago | parent
OutOfHere 1 day ago | parent
This matters more for newer versions of Python which actually offer the constructs needed for it. Python 3.15 extends this with sentinel and enhancements to TypedDict.
nhumrich 16 hours ago | parent
My hunch: The LLM has already been trained on the library, already knows the types. The annotations are just wasted noise/tokens at this point. (Also, majority of python is untyped, so probably has better "training data")
zahlman 13 hours ago | parent
To be clear, you mean that the LLM performs better at working with un-annotated code?
(If you were talking about the runtime performance of the same code with and without annotations, then it's actually pretty obvious. The bytecode compiler doesn't use them to perform optimizations, because they can validly be complete garbage; and it adds overhead to have runtime `__annotate__` and `__annotations__` attributes, calls to do-nothing functions like `typing.cast`, etc.)
OutOfHere 13 hours ago | parent
Types improve clarity to humans. Types also prevent future bugs by disallowing incompatible modifications. If you're not religiously writing types in function signatures, you're not developing professional software, just throwaway janky unprofessional scripts. I suggest looking at the OpenAI package to see just how well typed it is.
kbumsik 1 day ago | parent
Yes lazy import! Finally!
frodowtf2 1 day ago | parent
xtreak29 1 day ago | parent
ris 20 hours ago | parent
zem 20 hours ago | parent
also let me plug my work project, an analyser which will scan your code and see where it can safely enable lazy imports (tagged alpha, but we did our best to get a usable release out before 3.15 landed): https://github.com/Facebook/lifeguard
greggoB 17 hours ago | parent
Also bonus points for the mascot :)
ngoldbaum 1 day ago | parent
I’m particularly proud that the cryptography project is already shipping a single abi3.abi3t wheel for each platform on Python 3.15 or newer. The GIL-enabled build and free-threaded build can both use the same wheel now, because PyObject is opaque.
If you want to learn more about this, I gave a talk at EuroPython this year on Python’s ABI and the road to building and releasing abi3t today. See https://youtu.be/An8lO29SxXE.
yablak 1 day ago | parent
haberman 1 day ago | parent
Just one question: any plans to promote APIs like PyUnstable_EnableTryIncRef() and PyUnstable_TryIncRef() into the limited API? So far we have found that these APIs are necessary to implement the weak-valued caches we've always used in the past: https://github.com/protocolbuffers/protobuf/blob/6559a9f9622...
ngoldbaum 23 hours ago | parent
I doubt PyUnstable APIs will get promoted directly to the limited API without at least a release or two in the regular version-specific API first.
That said, if you would be willing to start a thread on discourse describing your need and use-case, that is probably the first step to stabilizing the APIs you want. It may also turn out there’s an alternate way to get protobuf working.
Please do feel free to reach out privately. I’d love to be able to chat with people working on protobuf and grpcio, they come up reasonably often and it’s hard to get official updates from inside Google.
masklinn 1 day ago | parent
ngoldbaum 23 hours ago | parent
zshn 1 day ago | parent
ChrisArchitect 1 day ago | parent
How Fast is Python 3.15?
hncbw02z5a 1 day ago | parent
masklinn 1 day ago | parent
Because currently abi3t is only relevant for 3.15, its value is future-proofing artefacts for 3.16 and beyond, you need two free threaded wheels at least (3.14t and abi3t).
6gvONxR4sf7o 1 day ago | parent
> PEP 814: Add frozendict built-in type
About damned time. These are little quality of life changes that I've wanted roughly forever. Glad to see them arriving.
rirze 1 day ago | parent
alextremblay 1 day ago | parent
Take a look at https://github.com/Technologicat/mcpyrate for example
rirze 1 day ago | parent
I ended up writing a custom package that expands on the one "macro" (really a small DSL) that does it very quickly, and uses the `.pth` import so it automatically loads, via entrypoint especially, rather than being a constant import in the files that uses the DSL.
`mcpyrate` looks very cool.
PaulHoule 1 day ago | parent
hleszek 23 hours ago | parent
PaulHoule 22 hours ago | parent
zahlman 13 hours ago | parent
wg0 1 day ago | parent
1. Typescript + Javascript
2. Rust.
3. Python - because of data science and interactive apps.
Basically, everything that can be rewritten in Rust with or without AI will be rewritten in Rust with or without AI in coming decade.
Famous cases:
1. Some backends at 37 signals from Ruby to Rust.
2. Bun from Zig to Rust.
3. Git in transition.
4. Mold linker from C to Rust.
5. Biome
6. TailwindCSS CLI
And much much more. Even Python interpreter is in process of using Rust as the main language if I am not wrong.
[0]. https://github.com/kevincouton/awesome-rust-migrations#1
ciupicri 1 day ago | parent
jtwaleson 23 hours ago | parent
kreneskyp 23 hours ago | parent
ciupicri 4 hours ago | parent
wg0 23 hours ago | parent
Check the overall layered architecture. That's nowhere AI. That's pure human ingenuity coupled with machine's raw horsepower to build on top.
And such people do need to read the code.
ciupicri 4 hours ago | parent
Given the fact that sometimes the architectures is included in the specifications for a project, I can accept that humans created the one for PhotoCraft.
mikkelam 22 hours ago | parent
s-zeng 20 hours ago | parent
make3 15 hours ago | parent
jtwaleson 23 hours ago | parent
wg0 23 hours ago | parent
Rails was a convenient layer that made the time to market shorter. Now Basecamp as pretty much abandoned Rails. Don't think newer projects would be choosing Rails.
Same goes with React Native. Shopify abandoned it.
I see the same fate for Flutter. Many many frameworks and languages might get abandoned gradually. Add Qt to the list as well.
A lot would be erased and newer languages/frameworks won't gain any traction because AI wouldn't be proficient in them hence they are less liely to gain momentum.
That's the future, whether we like it or not.
satvikpendem 21 hours ago | parent
letrix 23 hours ago | parent
wildzzz 23 hours ago | parent
kodebach 17 hours ago | parent
fastily 19 hours ago | parent
Citation needed. Outside of 3rd party/unofficial (ai-driven) attempts, I haven’t seen any evidence that the core python team is definitively moving away using CPython/python
zahlman 13 hours ago | parent
zaik 17 hours ago | parent
zahlman 13 hours ago | parent
For that matter, the COBOL codebases are still out there.
> Even Python interpreter is in process of using Rust as the main language if I am not wrong.
They are beginning to take steps towards making it possible to include some Rust code. Nowhere near "using Rust as the main language". (Unless you're looking at alternate implementations, like the aptly named https://github.com/RustPython/RustPython .)
wg0 9 hours ago | parent
That's writing on the wall.
febed 12 hours ago | parent
tipsytoad 7 hours ago | parent
I’m glad this has finally been added, but I’ve been wondering since 3.6 why this wasn’t supported