Congrats to the fish team! Great writeup with lots of interesting detail.<p>I wonder if this is the biggest project that has moved from C++ entirely to Rust (or maybe even C to Rust?) It probably has useful lessons for other projects.<p>If I'm reading this right, it looks like fish was not released as a hybrid C++ / Rust program, with the autocxx-generated bindings. There was a release during that time, but it says "fish 3.7 remains a C++ program" [1]<p>It sounds like they could have released if they wanted to, but there was a last stage of testing that didn't happen until the end.<p>Some people didn't quite get the motivation for adding C++ features to Rust [2], and vice versa, to enable inter-op. But perhaps this is a good case study.<p>It would be nice if you could just write new Rust code in a C++ codebase, without writing/generating bindings, and then throwing them away, which is mentioned in this post.<p>---<p>Also the #1 gripe with Rust seems to be that it supports version detection, not feature detection.<p>But feature detection is better for distros, web browsers, and compilers:<p><i>Feature Detection Is Better than Version Detection</i> - <a href="https://github.com/oils-for-unix/oils/wiki/Feature-Detection-Is-Better-than-Version-Detection">https://github.com/oils-for-unix/oils/wiki/Feature-Detection...</a><p>Version/name detection is why Chrome and IE pretend to be Mozilla, and why Clang pretends to be GCC. Feature detection (e.g. ./configure and eval() ) doesn't cause this problem!<p>[1] <a href="https://github.com/fish-shell/fish-shell/releases">https://github.com/fish-shell/fish-shell/releases</a><p>[2] e.g. <a href="https://news.ycombinator.com/from?site=safecpp.org">https://news.ycombinator.com/from?site=safecpp.org</a>