今日一日考えていたことを垂れ流してみる

  • 型(class/struct), interface, concept, template
  • オブジェクトに対する型、型に対するコンセプト
  • インターフェースはオブジェクトを別の型の値に遅延束縛するための仕組み?
  • Haskellの型システムいいよね
  • 仮想関数はHaskellではどう表現しているのだろう?
    • データコンストラクタで違う型を一緒くたにして、受け取るほうでパターンマッチして処理する
    • クラスを使う
  • そのへんをC++に持ち込めないだろうか?
  • ていうか考えれば考えるほどHaskellに納得してしてきた
  • Haskellに萌えてきた
  • あーでも継承とかってどうなるんか?
  • というかC++ or laterでいう継承ってのは、
    • 実装の再利用
    • あれ?でてこない
  • オブジェクト指向って結局何やねん、都市伝説か?
  • C++ or laterのclassは、Haskellでいう
    • 値の型
    • 型の型
  • の両方を司っている。ということは継承は、
    • 実装のこぴぺ
    • 型の型を基底型にする
  • をするための仕組みか?
  • でこの思考の向かう先はいったいどこなんだ?
  • 値に対しての型と型に対しての型の意味を厳密に区別しつつなんかこう、気持ちのいい書き方ができないだろうか?
  • うわやっぱりHaskellすげー
  • Haskell ccmz
  • んーでもなんか物足りない
  • Haskellの型をC++に導入すると、型クラスというのはtemplateなのかpolymorphicなのか
  • それで両方表現するならプログラマがそのうちどちらなのかを制御する手段を提供しなければならない
  • しかし例えばPointという、x軸, y軸を表したものはデータ型にするべきなのか、それとも型クラスにするべきなのか
  • あ、だからC++のクラスは両方を兼ねているのか
  • そもそもデータ型に名前は必要ないのではないか?
  • でもデータ型をそのまま引数に取りたい事もあるのではないか?
  • ならば型クラスにデフォルトの実装を用意すればいいのではないか?
  • あかん、うまくいかん