Fish 4.0: The Fish of Theseus
Overall reception
- Many commenters are enthusiastic long‑time fish users; several report switching from bash/zsh and never looking back.
- Common theme: “just works out of the box” with minimal config, compared to zsh+plugin stacks.
- Some are impressed the full Rust port was completed in ~2 years and consider that fast for 50k+ LOC.
Fish vs. bash/zsh and other shells
- Pros of fish:
- Strong interactive UX: autosuggestions, syntax highlighting, rich completions, history search, multiline editing, good built‑ins (
string,math,argparse), Docker/Git‑aware completions. - Beginner‑friendly and low‑config; web-based config and simple function/prompt model.
- Some see advantages from being a clean non‑POSIX design (avoids legacy shell oddities and vulnerabilities).
- Strong interactive UX: autosuggestions, syntax highlighting, rich completions, history search, multiline editing, good built‑ins (
- Cons / reasons to stay with bash/zsh:
- Non‑POSIX syntax: can’t directly source
.bashrc, bash snippets sometimes break; here‑docs/<<<missing;set -esemantics absent. - Fish scripting seen as mainly for extending fish; for “serious” scripts many prefer bash or another language.
- Several use fish interactively but keep scripts in bash via shebangs.
- Some prefer zsh’s flexibility and larger completion/plugin ecosystem.
- Non‑POSIX syntax: can’t directly source
Rust rewrite, portability, and tooling
- Rust seen as improving maintainability, safety, and cross‑compilation experience (especially with custom feature‑detection crate).
- Port did not ship a C++/Rust hybrid; transitional bindings were kept off releases to avoid distro pain.
- Loss of Cygwin support due to missing Rust target is widely noted; some find it “sad” given reliance on Cygwin in corporate Windows environments.
- Debate over portability:
- One side: C++ (via GCC) clearly supports more obscure platforms.
- Other side: Rust offers better tooling (rustup, cross‑platform crates) and higher ROI for mainstream targets.
Build, packaging, and Cargo limitations
- Fish still uses CMake for installation because Cargo’s install model is binary‑centric and weak on data/docs layout.
- Discussion around whether Cargo should grow richer install hooks vs. delegating that to higher‑level tools.
- Distro packagers report it’s workable when upstream cooperates; fish maintainers say they design with packager requirements in mind.
Language behavior & configuration probing
- Discussion of feature detection vs version detection; several argue feature detection is better but traditional autoconf‑style probing is fragile.
- Rust’s
cfg!vs#[cfg]trade‑offs are discussed in terms of catching misconfigurations across build variants.
Miscellaneous
- Some worry about LOC increase (56k C++ → 75k Rust); maintainers attribute most of this to rustfmt’s more vertical style, not more “significant” code.