オブジェクトはレコード型か?

http://www15.ocn.ne.jp/~rodinia/Blog/MyJournal.html

僕が思ったのは,

オブジェクトと言うのはレコード型の値とは意味的に異なる存在であるが,これまでの議論ではオブジェクトの型をレコード型として取り扱うことが多かった

のは,なんか不満だ.ということなのです.*1

まあ,これはこれとして.

{n : <x : 'a, y : 'b>; m = this.n.x}

というオブジェクトのnにの型の値を代入する,という操作は,オブジェクト指向の文脈で有効でしょうか?オブジェクト指向では,オブジェクトに対する操作は「常にメッセージの送信」であり,これは「関数・メソッド・サブルーチンの起動」として表現されることが多い(と思います).たとえば,Rubyではメンバに対する代入は,

class Foo
  def foo=(x)
    @foo=x
  end
end

Foo.new().foo = 123

などとして,「メンバ名+"="」というメソッドの呼び出しとして実装されています.

そうすると,

<n : <x : 'a, y : 'b>; m = 'a>

という型はありえなくって,考えられるのは

<n : <x : 'a, y:'b> -> unit; m = unit -> 'a>

という型になる.これなら,

<n : <y: 'b> -> unit; m : unit -> 'a>

のサブタイプとはならないので,nにの型を持つ値の代入をしてしまってエラーになることはない.こっちの解釈の方が,よりオブジェクト指向の概念とうまくあうと思うのですが.


自己参照について何も考えてなかったのは,うっかりしてました.でも,レコード型としてオブジェクトの型を考えたとしても,メンバ関数を暗黙のselfを受け取る関数として表現すれば,なんか変な感じはしますが自己参照も表現できていると思います.


trubyは・・・どうなるのでしょう・・・(弱気)

*1:っていうか,本当にそうなのか,すごく不安になってきた.違うかも.