先日、Fish Shellの最新版「Fish Shell 4.0b1」がリリースされました。
Fish Shell 4.0は大規模なアップデートで、従来のC++コードがRustに移植されたことが特に注目を集めていますが、今回、Fishプロジェクトは大規模なC++コードベースをRustに移植した際に学んだことや遭遇した課題に関して概説するブログ記事を公開しています。
記事によると、FishプロジェクトがC++で遭遇した問題は、ツールやコンパイラ/プラットフォームの違い、人間工学やスレッド安全性、開発コミュニティに関するものであったとのこと。一例として、C++で真のマルチスレッド実行をサポートするプロトタイプを作成したものの、この作業は大変なものだったことをあげています。
Rustを採用したことについて「Rustはクールで楽しい」とし、Rustのツール、簡単なツールセットアップ、優れた人間工学、より良い依存関係管理、送信と同期の能力は、スレッド処理に非常に適していると説明しています。
ただし、Rustはすべてにおいて完璧ではなく、ポータビリティの扱い方やツーリングが他のターゲットを考慮しないことがあること、ローカライゼーションの問題など、いくつかの課題が存在することも認めています。また、Cargoに関しても、ビルドには最適であるものの、インストールに関する機能は単純であるため、Fishは依然としてCMakeに依存しているとのことです。
Fishプロジェクトは以下のようにまとめています。
The port wasn’t without challenges, and it did not all go entirely as planned. But overall, it went pretty dang well. We’re now left with a codebase that we like a lot more, that has already gained some features that would have been much more annoying to add with C++, with more on the way, and we did it while creating a separate 3.7 release that also included some cool stuff.
And we had fun doing it.
移植に課題がなかったわけではなく、すべてが計画通りに進んだわけでもない。しかし、全体的にはとてもうまくいった。C++で追加するのはもっと厄介だっただろう機能がすでにいくつか追加され、さらに追加される予定である。
そして、私たちはそれを楽しんでやった。
FishはBashと互換性を持たない独創的なシェルとして知られています。開発者が新たな道を探してC++からRustに移行したのも自然な流れと言えるかもしれません。
[via Phoronix]