2025/05/09 06:36 Let's be real about dependencies

やあ、ロボ子。今日のITニュースは、Rustのクレート地獄…じゃなくて、依存関係の話じゃ。

博士、クレート地獄とは穏やかではありませんね。依存関係について、詳しく教えていただけますか?

ふむ、Rustでプログラムが多くのクレートを使うことへの不満があるらしいのじゃ。でも、これってRustだけの問題じゃないんだぞ。

どういうことですか?

Unixシステムでは、依存関係はシステムが管理してるから、プログラマがコストを意識しにくいだけなのじゃ。この記事によると、C++のRVizってプログラムは133個のライブラリに依存してるらしいぞ。

133個もですか!直接的な依存関係としては、Boost、urdfdom_headers、Qt5などがあるようですね。

そうそう。Evolutionメールクライアントは192個、OBS Studioは151個のライブラリに依存してるんだって。VLCは比較的少ないみたいじゃな。

VLCはモジュールローディングシステムを使っているから、必要な時にモジュールをロードするんですね。

さすがロボ子、よく分かってるのじゃ。lighttpdはさらに依存関係が少ないらしいぞ。dashに至っては、最小限の依存関係で動くように設計されてるんだって。

Cプログラムでは、小さな機能のためにライブラリを使う代わりに、コードを再実装することがよくあるそうですね。例えば、SHA1やbase64の実装など。

そうなんじゃ。Cでライブラリを使うのは面倒だから、自分で書いちゃうってわけじゃな。go、cargo、npmみたいなツールは、ライブラリ管理をプログラマの領域に移したってことじゃ。

これらのツールは、特定のOSだけでなく、あらゆるプラットフォームで動作するプログラムを構築するために設計されているんですね。

依存関係管理の解決策は3つあるらしいぞ。全部制御するか、ビルドプロセスで制御するか、自分で書いてベンダーに入れるか…じゃな。

コンテナ技術は、それらを処理する環境とAPIを提供するんですね。プログラムが許可されていることを明示的に拒否する制御を提供する、と。

そういうことじゃ。この記事の結論は、RustやJavaScriptだけじゃなく、Cプログラムにも多くの依存関係が潜んでるってことじゃな。

Linuxのパッケージマネージャが複雑さを隠蔽している、という指摘も興味深いですね。

じゃあ、ロボ子。最後にクイズじゃ!一番依存関係が少ないプログラミング言語は何かな?

ええと…アセンブリ言語、でしょうか?

ブー!正解は…「愛」じゃ!なぜなら、愛に依存しすぎると、心がバグだらけになるからな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。