301 points ngoldbaum 1 day ago 105 comments

alienbaby 1 day ago | parent

A large number of the links in the page appear broken for me :/

sfink 1 day ago | parent

Yeah I had to find a working one low down in the page and edit the PEP number: https://peps.python.org/pep-0790/

emmatyping 1 day ago | parent

I clicked through some random ones which all worked, can you describe the ones that didn't work for you and how they failed?

Neywiny 1 day ago | parent

Yeah Sentinel and lazy imports just took me to the bottom of the page. I had to find them the old fashioned way

zahlman 1 day ago | parent

The XZ-compressed source tarball is about half again as large as the one for 3.14. What happened?

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

> I would have much preferred SVG diagrams based around static screenshots.

Just take your time to contribute that to the project, it's a win-win.

bsoqk 1 day ago | parent

Inappropriate answer to someone saying that adding 10 MB worth of GIFs to a source code tarball is inadequate.

zahlman 14 hours ago | parent

I actually would be interested in doing it, if I'd been following along the 3.15 development cycle. As is, there are too many other things I could be doing.

eviks 1 day ago | parent

He has contributed by highlighting the waste!

lsofzz 1 day ago | parent

<3

droidjj 1 day ago | parent

> The experimental JIT compiler has been significantly upgraded, with 7-8% geometric mean performance improvement on x86-64 Linux over the standard interpreter, and 11-12% speedup on AArch64 macOS over the tail-calling interpreter.

Nice to see improvements here!

simonw 1 day ago | parent

As a maintainer of a whole bunch of open source Python libraries, my favorite thing about a new Python release is that it signifies the end of support for an older one. In this case that's Python 3.10... which means that my libraries that aim to support every current Python version can finally start embracing features from Python 3.11!

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

As long as 3.11 can be "embraced" without breaking on 3.10. As a user, I might still have 3.10 installed and be happy with it, or be stuck on a system that tops out at 3.10. Unpopular opinion on HN, but I really dislike "I can break users on X because Y is now out" policies :(. I guess I'm always free to just stick to an older version of the application that still supports X.

zahlman 1 day ago | parent

Older versions of Python packages don't stop being available, they just become unsupported. Nothing stops you from using those versions that still work fine on your older Python installation. It's unreasonable to expect free support indefinitely for open-source packages, especially since that would produce an O(n^2) maintenance burden with the emergence of new Python releases.

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

I suppose the word "support" has many meanings in software. When I say I wish more developers would keep support for old platforms, I don't mean "provide human technical support" to users on old platforms, or even "continue building features" for those old platforms. Just wish they wouldn't deliberately break them.

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

> Just wish they wouldn't deliberately break them.

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

> I don't mean "provide human technical support" to users on old platforms, or even "continue building features" for those old platforms. Just wish they wouldn't deliberately break them.

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

If you're writing or packaging software for a specific OS that bundles an old Python, then there's sometimes a reasonable argument for wanting to retain compatibility with that old Python. But now that uv has started bringing some sanity and relative ease to Python package management, it's not much hassle for end users to start running a Python newer than the one shipped by the OS when they want to use a tool or library that requires a newer Python or performs better on a newer Python.

simonw 1 day ago | parent

3.10 is EOL and no longer supported: https://devguide.python.org/versions/

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's only the interpreter released by the Python Software Foundation itself. I can't even remember how long its been since I installed their interpreter but probably at least a decade. In recent years its been Miniforge and before that was Anaconda (before they changed their licensing terms for orgs with 200+ people).

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 follow the PSF support cycle these days: https://www.anaconda.com/docs/reference/policies-practices/p...

"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

Good to know. Just one more reason to not use the Anaconda interpreters.

ciupicri 23 hours ago | parent

> 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.

Then why not just support Python >= 3.14 or whatever and that's it?

simonw 23 hours ago | parent

Because my software is better if people who are running a supported-but-not-most-recent Python can use it. I'm willing to inconvenience myself a little for their benefit.

nvme0n1p1 1 day ago | parent

You have to draw the line somewhere though. Python 3.10 is over 5 years old. Is upgrading your system once every 5 years too much to ask? Should webapps still support Internet Explorer 6?

wtallis 17 hours ago | parent

You don't even need to upgrade your system. You just need to be willing to install another newer Python alongside whatever versions you already have, as a dependency of whatever newer tool you want to run.

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

> If python interpreters masqueraded as versioned .so libraries

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

Irritatingly, even if you upgrade to the very latest Mac OS X and Xcode, you still get Python 3.9.6.

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

macOS bundling Python 3.9 is such a pain. That version hit EOL a full year ago. https://devguide.python.org/versions/

em500 1 day ago | parent

This is very deliberate: included scripting runtimes for Python, Ruby are only for compatibility with legacy software, not for any new development. This goes back as far as macOS 10.15 from 2019 [1].

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

https://utcc.utoronto.ca/~cks/space/blog/solaris/BadSolarisP...

> 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

No, this is not true. macOS 10.15 included Python 2.7 as part of the OS, and it was removed in macOS 12.2 IIRC.

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

I know Python versions and dependency management is always awkward for people who don't use it every day, but you should almost never use the bundled version of Python on the system, and instead pin a dedicated version for whatever you're developing. And use a virtual environment. uv solves all of this.

> 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

So on one hand you're lagging 4 years (and 4 versions) behind, but on the other hand it's just 4 years and 4 versions. I like your approach. Without it there'd be no progress. Google has similar policy in many places.

zahlman 14 hours ago | parent

It is the standard policy in the Python ecosystem, keeping in lock-step with the Python support schedule (see e.g. https://endoflife.date/python ). Although many packages chose to maintain support for Python 2.7 well into 2021.

esafak 1 day ago | parent

That's how we can have nice things. People need to just write tests and let renovate automatically update packages, whose safety will be determined by said tests.

zzzoom 1 day ago | parent

Enterprise distros support their python for 10 years anyway. The lack of Python LTS releases results in most versions having longer lifetimes in practice than intended:

  - 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

RHEL8 officially supports Py3.11 (since 8.8) and 3.12 (since 8.10):

* 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

Even 3.12 will be EOL half a year before RHEL 8's.

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
  279

dralley 15 hours ago | parent

Correct. e.g. RHEL 9 has Python 3.14 available

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

"LTS" isn't objectively defined. Python's per-version support is 5 years, which means they're worrying about 6 versions concurrently (annual release cadence + the development version).

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

Unsupported doesn’t mean out of use. Certain institutional customers cling to EL7 so we have apps that maintain python 3.5 compatibility.

simonw 1 day ago | parent

OK this is fun:

  uvx --python 3.15 whatsnewt

ameliaquining 18 hours ago | parent

Oddly, when I tried running this, it used version 3.15.0a2, which made some of the puzzles not work because the required new features hadn't been added yet.

zahlman 13 hours ago | parent

Even if you tried it before the standalone final 3.15 builds were rolled out, it should have had 3.15.0rc3 available. Maybe you need to clear out a cache somewhere?

ameliaquining 10 hours ago | parent

The problem turned out to be that I had a very outdated curl-bash installation of uv on my system that was shadowing the up-to-date package-manager one. This is why curl-bash installation is evil.

Filed https://gitlab.com/flufl/whatsnewt/-/work_items/11.

OutOfHere 1 day ago | parent

Whether you use 3.15 or not, if your project already passes a modern type checker, one thing that you can do easily using AI is to significantly tighten (narrow) the type annotations of your functions. Run this two or three times until the annotations are sufficiently but not excessively narrowed. This prevents a whole lot of bugs, and increases clarity of the code for AI.

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

I've been running a bunch of benchmarks comparing typed python to untyped python, and untyped python actually performs better now. I don't think it's the case anymore that types improve clarity to the LLM.

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

>and untyped python actually performs better now.

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

Huh. Your comment makes no sense, since types are ignored at runtime. Your performance benchmarks seems all noise. If it's about LLM speed, that's an atrocious thing to even compare. Writing code carelessly is fast, but it's also fast at adding bugs.

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

> PEP 810: Explicit lazy imports for faster startup times

Yes lazy import! Finally!

frodowtf2 1 day ago | parent

Is there any reason to not enable it globally?

ris 20 hours ago | parent

Completely nondeterministic import order affected by code execution patterns?

zem 20 hours ago | parent

the main reason is import-time side effects, particularly intentional ones like the registry pattern.

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

Very cool for large existing projects! I'll definitely be taking it out for a test drive on a codebase which is luckily using quite a recent py version (so should be easy to upgrade).

Also bonus points for the mascot :)

fishgoesblub 1 day ago | parent

Been waiting for lazy imports for a long time now, glad to see them finally.

aitchnyu 1 day ago | parent

Whats your application? I'm curious.

ngoldbaum 1 day ago | parent

My headline feature is the new “abi3t” stable ABI for the free-threaded build. While Petr Viktorin did most of the CPython implementation, I’ve been trying to make sure ecosystem support is ready. It’s been a rewarding but quite challenging project to make sure everything is working. There were some late nights leading up to the beta1 release when we found a Windows-specific issue that needed a fix.

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

Came here to say this. A stable ABI will mean that libraries can make a single free-threaded build that'll last at least a couple of Python versions into the future.

haberman 1 day ago | parent

As a maintainer of a Python module that uses abi3 now, thank you!

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’m glad to see there’s ongoing work to get protobuf working!

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

Are you aware of specific issues remaining in pyo3’s abi3t support or is that good to go?

ngoldbaum 23 hours ago | parent

It should be good to go, but of course I don’t know what your codebase looks like and issues are always possible in any code, “good to go” or no. Please do give it a try and try testing on 3.15 and 3.15t.

zshn 1 day ago | parent

Quite a few nice features, need to play around a bit with them more though. Lazy imports seems nice mainly for my work at the moment.

ChrisArchitect 1 day ago | parent

Related:

How Fast is Python 3.15?

https://news.ycombinator.com/item?id=49984652

hncbw02z5a 1 day ago | parent

Shipping one abi3 wheel instead of per version builds cut our CI matrix from like 20 jobs to 4, that alone was worth it.

masklinn 1 day ago | parent

Do you mean way back when abi3 became useable?

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 798: Unpacking in comprehensions

> 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

Hmm I see https://peps.python.org/pep-0829/ is now merged in. I understand why it's necessary, but I was doing some cool things with codecs installing "macros" with `.pth` imports.

alextremblay 1 day ago | parent

modern macro systems hook into python's import machinery to handle / expand macros, instead of hooking codes or executing code inside .pth files

Take a look at https://github.com/Technologicat/mcpyrate for example

rirze 1 day ago | parent

makes sense (and I somehow missed `mcpyrate` when I scanned the ecosystem for macro packages).

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

I really thought UTF-8 was already the default.

PaulHoule 22 hours ago | parent

Depends on your build, system configuration, etc. I worked at a place where the data sci’s had a remarkable talent to build docker images based on python images they found in random places and you could wind up with charsets you wouldn’t expect. Managing the problem in code didn’t entirely work because if some third party lib print()ed something that had characters not in the charset it would crash.

stratos123 20 hours ago | parent

On Linux it was, but not on Windows.

masklinn 11 hours ago | parent

Even on Linux it was not. Python would use the locale’s encoding, which is not necessarily UTF8. The POSIX locale was special cased to enable UTF8 mode tho.

zahlman 13 hours ago | parent

It was the interpreter's default for reading Python source code files since 3.0 (https://peps.python.org/pep-3120/), but not the default for built-in and standard library functionality. But it may have been hard to notice on many systems.

wg0 1 day ago | parent

This might irk many but going forward, I see only following languages surviving:

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

Since you've mentioned AI why not go directly to machine code, i.e. assembly or even binary?

jtwaleson 23 hours ago | parent

That's just ridiculous. Not sure if you're serious, but if so, please make a serious attempt at this argument.

kreneskyp 23 hours ago | parent

Because it's still cheaper and safer to implement in Rust and allow a compiler to mechanically and deterministically transform it into machine code. The value of abstractions are not going away.

ciupicri 4 hours ago | parent

There used to be a Pascal to C compiler. CHICKEN is a compiler for Scheme that generated C files. TypeScript is compiled to JavaScript (because we didn't have WebAssembly back then). Other projects use the LLVM compiler infrastructure. If you're referring to this, then fine, but it's just intermediate stuff. The end result is still assembly / binary.

wg0 23 hours ago | parent

Because code still would be read by humans. Check the code for PhotoCraft[0] (clean room reimplementation of Adobe Photoshop) which is being actively written in Rust by AI agents almost 24x7.

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.

[0]. https://github.com/storytold/photocraft

mwpmaybe 23 hours ago | parent

I just wish Rust were slightly more readable...

wg0 23 hours ago | parent

The async terrain is absolutely bonkers and not just not very readable but also not very understandable either I suppose.

ciupicri 4 hours ago | parent

If the project is entirely made by AI agents, why read the code? Who reads the binary (or asm) files generated by their compiler except a few people in rare cases?

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

programming languages may just be a really good abstraction level to describe what you want.

s-zeng 20 hours ago | parent

Much like humans, language models have context limits. Abstractions exist for a reason, and good abstractions simultaneously make code easier to read for humans and easier to process for language models

make3 15 hours ago | parent

language models reason from human examples partly, and a lot of the abstractions are simply actual useful compressions of information that are useful for LLMs as well

jtwaleson 23 hours ago | parent

It would be great to have less languages and ecosystems rather than more. However, I think that none of these programming systems have hit a peak yet. There's a lot of innovation still to be done, and in that sense, id rather see more divergence and less consolidation.

wg0 23 hours ago | parent

Don't think so.

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

Flutter is interesting because it's still the best for UI if you want to support mobile, web, and desktop, as no other UI framework comes close. I actually use Rust as the main business logic language inside Flutter via flutter_rust_bridge as I can then share logic with my Rust serverside code too.

letrix 23 hours ago | parent

Those 3 are my favorites languages, so I agree.

wg0 23 hours ago | parent

I'd add Go to the mix but yes all three are amazing languages. You do not need Java/C#/PHP etc anymore.

satvikpendem 21 hours ago | parent

I don't see why Go needs to exist either when people are rewriting to Rust for anything backend related.

wildzzz 23 hours ago | parent

C will continue to be running on embedded processors until the end of time.

kodebach 17 hours ago | parent

And Apple platforms will use Swift until Apple invents a new language, Android still uses Kotlin, C++ will stick around for decades in automotive and aerospace where you need loads of expensive certifications and who knows if we'll ever be rid of COBOL (even with AI rewrites execs might not wanna risk the switch).

fastily 19 hours ago | parent

> Even Python interpreter is in process of using Rust

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

GP is mistaken. The closest it gets is efforts like https://discuss.python.org/t/pre-pep-rust-for-cpython/104906 .

zaik 17 hours ago | parent

I hope something comes along that has a much more powerful type system like Rocq. I also dream of tagging certificates to values such as "this string has passed SQL validation".

zahlman 13 hours ago | parent

Even if you envision everyone migrating from C to Rust on principle (despite the risks inherent to such a large project), I really can't fathom existing Java and C# codebases going anywhere.

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

If a sizeable codebase from Rails can be converted to Rust and from Zig to Rust then it is only a matter of time that momentum will catch up to existing codebases as well and they would be rewritten with AI assistant.

That's writing on the wall.

febed 12 hours ago | parent

The Tachyon sampling profile looks interesting. It can profile a running python Process which would be useful in production setups.

tipsytoad 7 hours ago | parent

> Unpacking in comprehensions

I’m glad this has finally been added, but I’ve been wondering since 3.6 why this wasn’t supported