パッケージマネージャ
プログラミング言語を自前で創っていると,パッケージマネージャが欲しくなってくるものだ.既存パッケージマネージャやそのラッパーによる配布で事足りることも多いが,自前言語の要件とうまく合わなかったりして,真に自分で実装せねばならないこともある.そうした場合,パッケージマネージャをどんな設計にすべきだろうか? 言語固有の都合には触れずになるべく一般に考慮すべき事項を洗い出し,簡単な設計例も提示してみたい.
この導出するアルゴリズムを備えたソフトウェアのことを Dependency Resolver と呼びます。RubyGems は Resolver としてMolinillo、Bundler は PubGrubを用いています。なお、Molinillo は iOS 用のパッケージマネージャである CocoaPods でも使われている Resolver であり、PubGrub は Dart 言語のパッケージマネージャである Pub のために開発された PubGrub の Ruby 移植版です。