[前][次][番号順一覧][スレッド一覧][生データ]

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  ]