Fish 4.0:魚のテセウス

#Tech

Fishシェルは、C++からRustへの書き換えプロジェクト「Fish 4.0」をリリースしました。

これは、C++のツールチェーン、安全性、コミュニティの課題を解決し、よりモダンで安全なコードベースを構築するためです。

Rustは、優れたツール、安全な並行処理機能、そして開発者の楽しさを向上させるためにも選ばれました。

書き換えにより、より高速な実行や非同期プロンプトなどの新機能の実現も期待されています。

シェルスクリプト言語「fish」の開発チームが、長年使用してきたC++からRustへの大規模な言語書き換え(リライト)を完了し、ベータ版「fish 4.0」をリリースしました。このプロジェクトは、単なる言語変更に留まらず、開発におけるC++の課題を乗り越え、より安全でモダンな開発環境を構築するための試みとして注目されています。

C++の限界と開発上の課題

fishは元々CからC++に移植されてきましたが、今回のRustへの移行はより根本的なものでした。開発チームは、C++のツールチェーンやコンパイラ/プラットフォーム間の差異、そしてスレッドの安全性といった点で大きな課題を経験しました。特に、古いLinuxやmacOSといったシステムで最新のC++標準をサポートすることが難しく、パッケージングや貢献者の負担増につながっていたとのことです。また、内部コマンドの並列実行が困難である点も、機能拡張のボトルネックとなっていました。

C++の設計思想と実用上の問題点

さらに、C++の設計思想がパフォーマンスを優先するあまり、開発者の使いやすさ(エルゴノミクス)や安全性に欠ける点が問題視されました。ヘッダーファイルの煩雑さや複雑なテンプレート、安全でない関数が多く存在することが挙げられます。例えば、文字列処理の冗長さや、モダンな機能である`string_view`を用いた際にも発生しやすい「use-after-free」のようなバグが、設計上の課題として浮き彫りになったそうです。

Rust採用による開発環境の改善

開発チームがRustを選択した背景には、「楽しさ」と「安全性」という二つの要素があります。ボランティアベースの趣味プロジェクトであるfishにおいて、開発が楽しいことは貢献者を惹きつける重要な要素です。加えて、Rustは優れたツールチェーンと、非常に分かりやすいコンパイラエラーメッセージを提供していると説明されています。これにより、より安全で快適な開発環境の実現を目指しています。

まとめ

このfish 4.0への移行は、単に言語を置き換えるだけでなく、開発プロセス全体を安全で持続可能なものに変革しようとする試みです。C++の経験から得られた教訓を活かし、より多くのユーザーにとって使いやすく、安定したシェル体験を提供することが期待されています。

原文の冒頭を表示(英語・3段落のみ)

About two years ago, our head maintainer @ridiculousfish opened what quickly became our most-read pull request:

#9512 - Rewrite it in Rust

Truth be told, we did not quite expect that to be as popular as it was.

※ 著作権に配慮し、引用は冒頭3段落までです。続きは元記事をご覧ください。

元記事を読む ↗