Fish 4.0: The Fish Of Theseus

submited by
Style Pass
2024-12-28 22:30:07

Truth be told, we did not quite expect that to be as popular as it was. It was written as a bit of an in-joke for the fish developers first, and not really as a press release to be shared far and wide. We didn’t post it anywhere, but other people did, and we got a lot of reactions.

Fish is no stranger to language changes - it was ported from pure C to C++ earlier in its life, but this was a much bigger project, porting to a much more different language that didn’t even exist when fish was started in 2007.

Now that we’ve released the beta of fish 4.0, containing 0% C++ and almost 100% pure Rust, let’s look back to see what we’ve learned, what went well, what could have gone better and what we can do now.

We’re writing this so others can learn from our experience, but it is our experience and not an exhaustive study. We hope that you’ll be able to follow along even if you have never written any rust, but experience with a roughly C++-shaped language should help.

Frankly, the tooling around the language isn’t good, and we had to take on some additional pain in order to support our users. We want to provide up-to-date fish packages for systems that aren’t up-to-date, like LTS Linux and older macOS. But there is no ‘rustup’ for C++, no standard way to install recent C++ compilers on these operating systems. This means adopting recent C++ standards would complicate the lives of packagers and would-be contributors1. For example, we started using C++11 in 2016, and yet we still needed to upgrade the compilers on our build machines until 2020.

Leave a Comment