langsmith:232
From: Shugo Maeda <shugo ruby-lang.org>
Date: Wed, 25 May 2005 11:24:41 +0900
Subject: [langsmith:232] duck typing?
前田です。 Yukihiro Matsumoto wrote: > | (javaの)interfaceをもうちょっと融通聞くようにして, > | implementsしなくても定義が一致すれば通る程度の物はどうかなと > | 考えています. > | 例えば, > | interface ToString > | { > | string to_s(); > | } > | void print(ToString s) > | { > | ... > | } > | とあれば string to_s() というメソッドを実装していれば > | なんであれprintに渡せる, という様な. > | > | duck typing という言葉わからなかったのでgoogleさんに聞いてみたの > | ですけれどこういうことであっていますでしょうか. > > はい、そういうことです。私も一時はそういうのを考えていたので > すが、 > > * Rubyという既存の言語に追加するには大きすぎる変更 > * どこまでを「一致する」と見なすか定義するのが難しい(or 面 > 倒くさい) > * 効率の良い実装方法が思いつかない > > などの理由で断念しています。新しい言語を作るのであれば、最初 > の障害はないので、より現実味があるかもしれません。上記のよう > なduck typingの型システムを持つ広く知られた言語はないので、 > 非常に興味深い試みになると思います。 gccのC++拡張のsignatureみたいなものですよね。 http://www.emerson.emory.edu/services/gcc/html/CPP_Signatures.html (signatureといいつつ、デフォルトの実装を与えることができることに 今気付きました。) こういうのをduck typingと呼ぶのは一般的なのでしょうか。 structural conformanceと呼ぶ人もいるようですね。 structureかというと、微妙な気もしますけれど。 こういうのと、型推論を組み合わせたらどうかなあと妄想したことは ありましたが、どうなんでしょうね。 たとえば、 void print(s) { stdout.print(s.to_s()); } とメソッド定義した時に、void print(ToString s)とみなすとか、 さらにはToString相当の型が見つからなかったら自動的に作って しまう(メソッドのシグニチャの集合だけで型適合するなら型名は 何でもいい)とか。 -- 前田 修吾 -- ML: langsmith quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
228 2005-05-21 18:46 [hio hio.jp ] 参加希望します 229 2005-05-22 23:42 ┗[matz ruby-lang.org ] 230 2005-05-23 23:20 ┗[hio hio.jp ] 231 2005-05-24 01:12 ┗[matz ruby-lang.org ] -> 232 2005-05-25 11:24 ┗[shugo ruby-lang.org ] duck typing? 233 2005-05-25 17:30 ┗[hau51010 tree.odn.ne] 234 2005-05-25 18:24 ┣[shugo ruby-lang.org ] 238 2005-05-30 23:48 ┗[matz ruby-lang.org ]