モジュールとオブジェクト

の機能が「かぶっている」という件が(一部で)盛り上がっていたようなので超遅れて反応。OCamlのオリジナルの論文*1Moby関係などでも議論はありますが、Advanced Module Systems: A Guide for the Perplexedの33〜38ページあたりが参考になるかも。要するに、オブジェクトでは

  • 複数抽象データ型を同時に定義できない。(単数ならオブジェクトでも良い。多相バリアントだと「抽象」型にはならない。)
  • (インターフェースで)特定の形の操作しか表せない。たとえばbinary methodは扱えない。

ということみたいです。逆に「動的な差し替え」はMoscow MLみたいなfirst-class moduleがないと、モジュールではできませんが…

ところで、あけましておめでとうございます。