Approximately two years ago, the head maintainer @ridiculousfish opened a pull request to rewrite the fish shell in Rust, which gained unexpected popularity. The decision to switch from C++ to Rust was driven by issues with C++ tooling, ergonomics, and thread safety. The transition involved porting components one by one, while maintaining a working shell throughout the process. Rust’s attractive features include great tooling, better error messages, and the Send and Sync traits for thread safety. Despite some challenges with Rust’s portability and the need for manual system enumeration, the switch to Rust was successful, culminating in the release of fish 4.0.
https://fishshell.com/blog/rustport/