- 動的言語で大規模開発
522 :デフォルトの名無しさん[sage]:2014/11/30(日) 00:47:09.72 ID:mFsly3WX - >>517
>これがわかると、動的型言語の補完がどうあるべきかの指標になるんでは。 なぜ構造的部分型が補完の指標になりえるのか、 その理由というか関連性が説明してごらん 単なる思いつきじゃねえの? 少なくとも >>517 のリンク先blog記事では 「構造的部分型付けは公称的部分型付けとダックタイピングの間に位置する」あるいは 「構造的部分型付けは公称的部分型付けとダックタイピングとのハイブリッドである」 と主張しているけど、こんな奇妙な話は聞いたことが無い しかも記事のネタになったソース(学術的文献)が書かれていないし、 英語版 Wikipedia の Subtyping のページでも duck tying との関連性に対する文章に対して "citation needed" と指摘されている おまけに記者は構造的部分型付けをサポートする言語(OCaml)を使った事が 一度も無いと正直に告白している このblog記事はあくまで記者が型システムを勉強する過程で書き残したノートであって、 この記事を引用して >>517 が何を言いたいのか、自分には意味不明だね なお、動的型付け言語に(形式的な型推論を基礎とした)静的型付けを導入した概念は Soft Typing と呼ばれている 動的型付け言語の補完を検討する指標となる可能性があるのは、 どちらかといえば Soft Typing ではないかと思うね
|
- 動的言語で大規模開発
523 :522[sage]:2014/11/30(日) 00:49:19.68 ID:mFsly3WX - 細かいけど訂正
X: その理由というか関連性が説明してごらん O: その理由というか関連性を説明してごらん
|
- 動的言語で大規模開発
562 :デフォルトの名無しさん[sage]:2014/11/30(日) 18:26:57.46 ID:mFsly3WX - >>534
Static Typing vs. Dynamic Typing という対比はよく見かける しかし structural subtyping vs. duck typing という対比は知らないね もし「いくらでも目にする」のなら、ソース(学術的文献)を示せばいい 簡単な事だろ? ましてや > 「構造的部分型付けは公称的部分型付けとダックタイピングの間に位置する」あるいは >「構造的部分型付けは公称的部分型付けとダックタイピングとのハイブリッドである」 なんて奇妙な主張は聞いたことが無い blog記事を批判するつもりはないが、そんな個人メモを元にして 「動的型言語の補完がどうあるべきかの指標になる(>>533)」と主張するのは 馬鹿だってこと
|
- 推薦図書/必読書のためのスレッド 74
857 :デフォルトの名無しさん[sage]:2014/11/30(日) 18:51:10.37 ID:mFsly3WX - >>840
パクリどころか Ruby と JavaScript は、これらの作者自身が Lisp を基礎として言語を設計したと語っている ・Lisp から Ruby への設計ステップ http://yohshiy.blog.fc2.com/blog-entry-250.html ・JavaScript: The World's Most Misunderstood Programming Language http://www.crockford.com/javascript/javascript.html (邦訳版「JavaScriptの勉強:世界で最も誤解されたプログラミング言語」へのリンクは閉鎖) だから関数型プログラミングという土俵の上で Ruby や JavaScript に 手続き型言語の Python がいくら挑戦しても勝てずに負け続けているのは、 しごく当然な結果なわけ
|
- 推薦図書/必読書のためのスレッド 74
860 :デフォルトの名無しさん[sage]:2014/11/30(日) 20:41:21.23 ID:mFsly3WX - >>859
そのとおり 手続き型言語の Python に慣れてしまうと、 関数型プログラミングが変態に見えてしまう > 70 名前: デフォルトの名無しさん Mail: sage 投稿日: 2012/08/20(月) 21:57:51.18 > Pythonは、あまり過度な関数型プログラミングは推奨してないよ。 > > 71 名前: デフォルトの名無しさん Mail: 投稿日: 2012/08/20(月) 22:11:34.11 > 「できる」のに推奨しないのと、「できない」から推奨しないとの間には大きな隔たりがある > 楽々「できる」のと、苦労すれば「できないこともない」との間にも大きな隔たりがある 手続き型言語の Python で関数型プログラミングすれば、 変態的プログラミングになってしまうのも無理からぬ話
|
- 動的言語で大規模開発
610 :デフォルトの名無しさん[sage]:2014/11/30(日) 21:50:46.91 ID:mFsly3WX - >>595
>いや。duck typing とは言わないけれど、 引用した論文は静的型付け言語における継承の意味論モデルに関する内容であり、 duck typing や interface とは直接的に関係してない Smalltalk における継承の意味について、Effel は Smalltalk と同じように柔軟だけど型安全ではなく、 Modula-3 や C++ は型安全だけど Smalltalk とは意味が異なる この論文では、Smalltalk と同じ継承の意味を持ちかつ安全な新しい意味論モデルを提案している まったく無関係な論文を引用して、いったい何を言いたいのか意味不明だね なお、ここで言う「継承の意味」とは、具体的には Smalltalk の疑似変数 self や super のこと たとえば Smalltalk と同じ意味論を持つ Ruby では(Smalltalk と同様な)疑似変数 self と super を持つ それに対して、Smalltalk とは異なる意味論の Modula-3 を参考にして継承が設計された Python では self や super に相当する疑似変数は存在せず、わざわざメソッドの引数で __self__ を明示しなければならない 結果として Python は動的型付け言語であるにもかかわらず、Smalltalk や Ruby と同等レベルの柔軟な オブジェクト指向プログラミングができないという言語設計上の欠陥を抱えている この意味論モデルは、以下の論文で詳細に解説されている http://www.cs.utexas.edu/~wcook/papers/thesis/cook89.pdf
|
- 集合論に基づいた言語を作りたい
729 :デフォルトの名無しさん[sage]:2014/11/30(日) 22:28:37.23 ID:mFsly3WX - Prolog で書くと「コード量10分の一」となる例には、他にも型推論があるね
以下のblog記事では、単純な型推論をPrologで記述している ・Prolog で型チェック:Rainy Day Codings:So-net blog http://rainyday.blog.so-net.ne.jp/2008-06-16 自分の知る範囲では、世界で最も簡潔な型推論の実装コードだね これも、もし(型システムという)形式的なルールが定義されていれば、 それを直接的に表現できるという Prolog の特徴が活かされている Haskell でもこんな芸当はできない
|
- 動的言語で大規模開発
615 :デフォルトの名無しさん[sage]:2014/11/30(日) 22:48:40.83 ID:mFsly3WX - >>612
>オブジェクト指向上の欠陥とやらが何か知らんが、 有名な Python のself地獄だよ キーワード「python self地獄」で検索すればGoogle先生が教えてくれる Python しか知らなければself地獄が気にならないかもしれないけど、 Smalltalk や Ruby を知っている人からすれば、無知は幸せだなぁと見る これの基礎が「継承の意味論における差異」になる なお単に意味論の違いだから、self地獄と引き換えに 実用的な型推論(補完や型検査)が手に入るわけではない 両者の間に直接的な関連性は無い(言い換えるとスレチな話題)
|
- 動的言語で大規模開発
619 :デフォルトの名無しさん[sage]:2014/11/30(日) 22:57:41.96 ID:mFsly3WX - >>614
この論文内では duck typing という用語は一度も使われていないし、 タイトルに Strongly-Typed と書かれているように静的型付け言語に関する内容だ で、いったいどこから duck typing を連想したの?
|
- 動的言語で大規模開発
621 :デフォルトの名無しさん[sage]:2014/11/30(日) 23:01:15.62 ID:mFsly3WX - >>618
>スレの主題に沿っているのは補完や型チェックの方だけど まったくそのとおり だから >>610 では > まったく無関係な論文を引用して、いったい何を言いたいのか意味不明だね と書いた
|
- 動的言語で大規模開発
625 :デフォルトの名無しさん[sage]:2014/11/30(日) 23:27:42.56 ID:mFsly3WX - >>616
Python のオブジェクト指向は Modula-3 を参考にしているけど、 Modula-3 のオブジェクト指向は Simula を参考にしている そして疑似変数 self の概念は Simula には存在せず、 Simula を参考にした Smalltalk で生まれた だから、Modula-3 や Python に疑似変数 self は存在せず、 これを模倣するにはメソッド引数で明示的に __self__ を 渡さなければならない訳 あと疑似変数 self の値は実行時に決まるから、 もし Python で __self__ を省略できるようにするためには、 構文論(syntax)の変更すなわちパーザの改造だけではダメで、 意味論(semantics)も変更しなければならない こうした背景も知らずに「変人だから」という理由で決めつけるのは、 Guido氏に失礼だと思うよ
|
- 動的言語で大規模開発
628 :デフォルトの名無しさん[sage]:2014/11/30(日) 23:43:33.56 ID:mFsly3WX - >>622
> 1989年の論文にduck typingと言う用語が出てきたらそっちの方が驚くわ そうだろ、だから驚いて >>619 では >>で、いったいどこから duck typing を連想したの? と書いた 論文を引用するのはいいけど、この論文をどう解釈して duck typing に結びつけたのか、 説明が無ければ意味が分からんという話だよ >abstract斜め読みしただけだがSmalltalkには言及されてんぞ Smalltalk の柔軟な継承を強い型付け(=静的型付け)なOO言語に取り込むために インターフェイスを用いる、という文脈でね 動的型付けを濫用するというニュアンスを持つ duck typing とは何の関係も無い この論文、型システムと言語設計に興味がある人にはとても有益だから、 斜め読みと言わずじっくり読んでみたほうがいいと思うな
|
- 動的言語で大規模開発
632 :デフォルトの名無しさん[sage]:2014/11/30(日) 23:52:00.50 ID:mFsly3WX - >>629
Smalltalk や Ruby なら、暗黙のselfがあっても 後からクラスにメソッドを後付けできるのにね....
|
- 動的言語で大規模開発
635 :デフォルトの名無しさん[sage]:2014/11/30(日) 23:58:47.30 ID:mFsly3WX - >>634
おいおい、Python は動的型付け言語だよ
|