Soft Typingに対するMatzの誤解とDuck TypingとStructural Subtyping
@esumii @yukihiro_matz structural subtyping + type inferenceで実現されたものが従来duck typingといっていたものにかなり近い、とはいえると思います。その実現例の一つがOCamlになるのではないかと。
2016-09-09 02:29:44@yukihiro_matz 具体例: # let f x = x#to_i;; val f : < to_i : 'a; .. > -> 'a = <fun> これで、fはto_iというメソッドを持ったxのみを引数に取る関数、になります。それが*型推論*されます。
2016-09-09 02:32:09@kmizu 140文字では書ききれないでしょうが、この「型推論されます」は関数fの呼び出し側でということですよね。心情としては< to_i : 'a; .. >の部分を書きたくない(推論してほしい)のですが。
2016-09-09 02:37:09@yukihiro_matz val f: ... の部分はOCaml処理系が型推論した結果です。ユーザが書く必要のある部分は、 let f x = x#to_i ;; の部分のみです。
2016-09-09 02:43:57@yukihiro_matz 連投になって申し訳ないですが、利用するときは、 class o = object(self) method to_i = 100 end;; みたいにto_iを持つクラスを作ってやって、f(new o);; でOKです。
2016-09-09 02:45:38@kmizu @yukihiro_matz クラス作らなくてもf (object method to_i = 100 end)でも行けます。さきほどの記事 itpro.nikkeibp.co.jp/article/COLUMN… のとおりです。横からすみません。
2016-09-09 02:48:24@esumii @yukihiro_matz あ、そうですね。補足ありがとうございます(実はobject構文を忘れていて、構文エラーになったので仕方なくclass作ったのでした…)
2016-09-09 02:50:30静的言語のTypescript の Structural Subtyping は 静的にチェックできるダックタイピング と捉える事ができる。これで柔軟性は失われないのでは? by @tell_k on @Qiita qiita.com/tell-k/items/1…
2016-09-09 02:46:16いやー、ダックタイピングできなくなるって言うので、Structural Subtypingがかなり近いのに、Structural Subtypingが不満なのかな?Matzは....
2016-09-09 02:57:15別にダックタイピングは、そのStructural Subtypingが凄く近いと思うんだが、なにが違うんだろうかね?
2016-09-09 02:58:42ScalaやTypeScriptのStructural Subtypingは 静的にチェックできるダックタイピングと捉えると静的言語でダックタイピングができなくはなく、柔軟性が損なわれないのでは?#rubykaigi qiita.com/tacke_jp/items…
2016-09-09 03:01:42今調べていて知ったのですが、Haxeもstructural subtyping + type inferenceしてくれるのですね。 function foo(pt){ return pt.x; } foo({x: 100}) // OK foo{{y: 100}) // NG
2016-09-09 03:04:09OCamlのstructural subtypingは1997年に研究室配属されて最初のサーベイで取り上げたら「多相レコードはO堀先生とかRemyとか前からあるけど研究として何が新しいの?」と突っ込まれた(おそらく特に新しくない)
2016-09-09 08:29:20OCaml同様、型を(インターフェースも)全く書かなくてもオブジェクト(レコード)のduck typing的な型推論ができるSML# は1993年からある
2016-09-09 08:57:42昨日は色々書きましたが、自分としては、数十年前からある(研究/実用)の話がRubyの未来に役立つなら凄く良い話だと思うので、Matz氏がOCamlを勉強するなら凄く良いのではないかとは思う。一から同じようなのを再発明すると同じようなポイントでつまづくだけな気がするというか…。
2016-09-09 03:08:13コレクションに同一構造の型を突っ込もうとするとアップキャストが必要になる点など(住井先生の記事参照: itpro.nikkeibp.co.jp/article/COLUMN…) 全て同じとはいかないですが
2016-09-09 03:09:41型推論によってRubyサブセットをカバーして、残りを従来の動的型検査で処理するという考えなら(これは2014くらいの発表に対する話で昨日のとはずれがあるかもですが)、OCamlのようなシステムで推論される範囲を知っとくのは有意義だと思うのです。
2016-09-09 03:11:20自分はリアルタイムでダック・タイピング言い出された時代のこと覚えてるから言うけど、あれはLL(Scripting Language)サイドの人たちが、明示的な継承に基づくサブタイピング(nominal subtyping)との対比として使ってたのが初期の用法のはずなのですよ。
2016-09-09 04:07:55で、ダック・タイピング言い出した人たちがstructural subtypingの知識があったかというとたぶんなかったと思っている。
2016-09-09 04:08:18歴史的には、ちょうどスクリプト言語がはやり始めた時期、静的型システムとはJavaのように窮屈なものだとするような誤解がまかり通ってたということがあって、いやそれはJavaとかの問題であって静的型システム一般の問題では必ずしもないのだよという声はあまり届かなかったなあ…と
2016-09-09 04:10:11で、最近になって静的型システムも色々進歩してることが認められて、それに伴って復権してるという流れがあるのではないかと。
2016-09-09 04:10:46もちろん、その「進歩」は最近に起こったものではなく、もっと前からあったものではあるのだけど。
2016-09-09 04:11:12