動的言語で大規模開発

■ このスレッドは過去ログ倉庫に格納されています
1uy
垢版 |
2012/07/24(火) 09:10:42.04
たててみた
2014/11/30(日) 17:25:33.97ID:tVFfE2xZ
まあ中規模くらいなら動的言語の気楽さ>静的言語の堅牢性だけど
大規模になって全体のコードを把握できなくなると気楽さ<堅牢性になるよね
2014/11/30(日) 17:37:33.47ID:7WEYW95R
>>552
動的と動的型付きは違うからね。

そもそもコードが「静的に型付きされているのと同様」に
特定の型じゃないと動かないように書かれているわけで。
2014/11/30(日) 17:40:58.65ID:7WEYW95R
>>552
その頃言われていた「遅延結合」っていうのは、
遅延ではない結合、つまり特定の型以外には結合しないという意味で
それを解決したのが、継承やインターフェースでしょう。

継承やインターフェースは、指定した型+その型を継承したもの
(もしくはインターフェースを持っているもの)に
動的に結合しているわけで、遅延結合になっている。
2014/11/30(日) 17:41:53.12ID:guVElZZq
静的言語だとテスト工数が減るとか、動的言語だとテスト工数が増えるとかあるの?
2014/11/30(日) 17:47:36.29ID:7WEYW95R
>>556
コンパイルエラーをミスと考えるかバグと考えるかで話が違う。

テストはバグを見つけるもの。
だから普通はコンパイルエラーによるミスは
テストで見つけるものではない。

だから本当の意味でのテストの量は同じだが、問題はミス。

静的型付け言語ならミスは、ミスとしてテストの前段階で弾くことができるが、
動的型付け言語だと、テストの段階で弾くことになる。
(しかも静的型付け言語ならミスは修正箇所をコンピュータが示すから素早く解決できるが、
動的型付け言語だとバグを探すのと同じ作業をしないといけなくなる)

そういう点で、動的型付け言語ではテストでやるべきことが
増えるのでテスト工数が増えることになる。
2014/11/30(日) 18:12:40.43ID:c9Q+Jt/4
>>536
制約だな。
2014/11/30(日) 18:24:06.55ID:7WEYW95R
>>558
それを言うなら、契約って言ったほうがかっこいいな。

契約プログラミングといえば、EiffelとD言語ぐらいだけど、
型っていうのもある意味契約だからね。

この引数は、○型であるという事前条件
この関数は、○型を返すという事後条件
2014/11/30(日) 18:24:17.69ID:uRzHHhxu
なんだ
このスレの静的厨は静的型が制約だということも理解せずに喚いてたのか
初心者としても筋が悪いな
2014/11/30(日) 18:25:23.77ID:tHR3Cg3X
ここの人たちにとってC++のテンプレートを引数に取る関数ってどういうふうに捉えられてるの?
template<typename T> void f(T func)
みたいないわゆるダックタイピング
2014/11/30(日) 18:26:57.46ID:mFsly3WX
>>534
Static Typing vs. Dynamic Typing という対比はよく見かける
しかし structural subtyping vs. duck typing という対比は知らないね
もし「いくらでも目にする」のなら、ソース(学術的文献)を示せばいい
簡単な事だろ?

ましてや
> 「構造的部分型付けは公称的部分型付けとダックタイピングの間に位置する」あるいは
>「構造的部分型付けは公称的部分型付けとダックタイピングとのハイブリッドである」
なんて奇妙な主張は聞いたことが無い

blog記事を批判するつもりはないが、そんな個人メモを元にして
「動的型言語の補完がどうあるべきかの指標になる(>>533)」と主張するのは
馬鹿だってこと
2014/11/30(日) 18:31:27.03ID:7WEYW95R
>>561
> ここの人たちにとってC++のテンプレートを引数に取る関数ってどういうふうに捉えられてるの?

┃ template<typename T>┃ void f(T func)
↑ ここからここまでが、型 ↑

HOGE_T void f(T func)

置き換えるならこんなふうに捉えてる。

> みたいないわゆるダックタイピング

それをダックタイピングとは言わない。
2014/11/30(日) 18:36:30.75ID:uRzHHhxu
そもそもduck typing自体まともな定義はない
2014/11/30(日) 18:44:16.77ID:/BRxH/wW
function foo(a) {
    a.bar()
}

bar() を呼び出せるなら何でも foo の引数に入れられるのが
ダックタイピングというのはどうだろうか
このスレだけでも
2014/11/30(日) 19:22:49.09ID:7WEYW95R
> bar() を呼び出せるなら何でも foo の引数に入れられるのが

それってさfoo関数の引数 aはbarメソッドを
持った型ではなければならないってことだよね?

コードに書くならば

function foo(/* fooメソッドを持った型 */ a) {
a.bar()
}
2014/11/30(日) 19:26:23.25ID:7WEYW95R
間違えたw

function foo(/* barメソッドを持った型 */ a) {
a.bar()
}

そして、大概は一つのメソッドだけ使うことはないから、

function foo(/* barとbazメソッドを持った型 */ a) {
a.bar()
a.baz()
}

あぁ!もう面倒くさい。

// Hogeインターフェース = barとbazメソッドを持っていること

function foo(Hoge a) {
a.bar()
a.baz()
}

わかりやすい。Hogeってみるだけで barとbazを持っていることがわかるし
もし持っていないものをaに入れるコードを書いたらコンパイルエラーが出る
2014/11/30(日) 19:32:01.35ID:/BRxH/wW
>>566
ただし、継承関係や共通のインターフェースを持たなくても
bar() を呼び出せるなら foo に入れられなくてはならない
2014/11/30(日) 19:47:43.07ID:7WEYW95R
http.connectを呼び出す関数に、
db.connectというメソッドを持ったオブジェクトを
入れても期待通りに動くことはまず無い。

二つの無関係なオブジェクトが同名のメソッドを持っていて
呼び出せるからといって、それはバグにしかならない。

メソッドに名前空間がないような形で使う動的型付け言語では
このような問題が起きる。

静的型付け言語ではインターフェースという型を定義することで、
同名であっても本質的に違うものは、違うものとして扱うことが出来る
2014/11/30(日) 19:53:09.38ID:VpMFGcKd
どんな御託を並べても
インターフェースがduck typingは無いわw
2014/11/30(日) 19:56:23.78ID:7WEYW95R
インターフェースがduck typingなどとは
ひとことも言ってない。

duck typingは不要。ガアガアと鳴いたからたから
といって人間はアヒルでしか無い。
アヒルだ、空を飛べ。人間は飛べません。はいバグです。

実際には鳴くメソッドがあればアヒルである
ということになって更に意味がわからない。

もちろん、アヒルである条件をインターフェースとして定義しているならば
そのインターフェースを備えているものは、アヒルでいいですがね。

メソッド一つが有るか無いかきめんなよ。
2014/11/30(日) 19:57:27.20ID:7WEYW95R
訂正

duck typingは不要。ガアガアと鳴いたからたから
といって人間はアヒルにはならない
2014/11/30(日) 19:59:03.44ID:360iudbJ
>>562
ググるとかしたことないのかね。
2014/11/30(日) 20:01:50.38ID:7WEYW95R
したことある人が、リンクを見つけてきて
ここに書けばいいと思いますが、

それを要求することは酷なことですね。
だってググっても見つからないのだから。
2014/11/30(日) 20:04:43.51ID:7WEYW95R
ダックタイピングの説明として
「アヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである」
という言葉があるが、

それを、
アヒルのように歩くとアヒルのように鳴くという
アヒルインターフェースを実装しているものはアヒルである。
というふうに読み替えると

これは実は静的型付け言語の説明だなとわかるはずである。
2014/11/30(日) 20:09:27.69ID:VpMFGcKd
>>569
mysql.connect と postgresql.connect は置き換え可能だけど?
2014/11/30(日) 20:11:34.14ID:VpMFGcKd
>>575
>>570
2014/11/30(日) 20:15:01.73ID:7WEYW95R
>>576
両方が同じデータベースインターフェースを
サポートしているならばそうだろうね。

現実的な話をするならば、mysql.connect を
使うコードは、実際にはmysql.connect だけを
使うことはなく、複数のメソッドを使う。

だから、その複数のメソッドというものを
定義しないといけない。

そしてその定義したものがインターフェースであり
そのインターフェースを使いますよと宣言するのが
型宣言なのである。

そうすればある型がデータベースインターフェースを
定義していることを保証する型宣言だけあれば、
全てのメソッドを安心して使うことが出来る。

このオブジェクトはconnectメソッドは持ってるけど、
disconnectメソッドを持っていないかもしれない
なんてことはなくなるのである。
2014/11/30(日) 20:16:45.31ID:nRiDRl39
足し算と掛け算のある型なら複素数でも行列でも良いとかいうパターンは有るな
2014/11/30(日) 20:21:32.59ID:7WEYW95R
足し算をaddメソッドだとして、
addメソッドさえあればなんでも使えるかというと

(addメソッドでググって一番目にでてきた)
> Addメソッドとはエクセルのシートに表とグラフを同時に表示するメソッドです。

に対してもうまく動くことはおそらくないだろう。

つまり名前が一緒でも、正しく動くとは限らんのさ。
だから名前と意味が一緒であることを保証するために
名前をつけたものが型なのである。
2014/11/30(日) 20:24:10.20ID:T2KLr1TM
>>575
アヒルのインスタンスを実行時にその振る舞いから分類するところがポイントなのであって
アヒルというクラスに対してコンパイル時に分類するのはダックタイピングじゃないよ

というわけでダックタイピングはインターフェースや構造的部分型とは全く別
2014/11/30(日) 20:25:36.35ID:VpMFGcKd
>>580
Excelのaddメソッドは戻り値の型が違うだろ
2014/11/30(日) 20:25:53.73ID:T2KLr1TM
>>580
だから同じ「意味」に対して名前を揃えるのが動的言語でのメソッド名のつけ方だ
2014/11/30(日) 20:26:04.76ID:7WEYW95R
アヒルのインスタンスを実行時にその振る舞いから分類というけれど、
コード自体は、実行時に分類してないんだよ。

コードは、アヒルであること、を前提として書いてる。
実行前にコードで分類しているのに、
なぜ実行時に分類しないといけないのか。

型は動的に変わるが、コードは静的なのである。
2014/11/30(日) 20:28:54.03ID:7WEYW95R
>>583
> だから同じ「意味」に対して名前を揃えるのが動的言語でのメソッド名のつけ方だ

だから大規模では無理なんだよ。

大規模=大多数の人間が係る。場合によっては全く知らない人が作った
ライブラリを使うこともあるしな。


そんなんで、すべて意味を揃えるなんてことは不可能
いくつもの意味を持つ英単語なんてざらにある

単語の意味を揃えるのは不可能。というのが大前提
2014/11/30(日) 20:29:37.63ID:T2KLr1TM
>>584
コードも動的だから「動的」なんだよ
それとも、単なる動的型付けの話をしている?
2014/11/30(日) 20:30:01.03ID:/BRxH/wW
>>581
Interfaceも構造的部分型も実行時に動的に分岐する
そうでなければポリモーフィズムとは言わない

さらに言えば、構造的部分型は「アヒルというクラス」に対して分類してるわけでもない
2014/11/30(日) 20:31:08.34ID:T2KLr1TM
>>585
とはいえ
Objectクラスだけで500近いメソッド数をもっているにもかかわらず
不特定多数の開発者からのコードを集めたSmalltalkシステムは
ちゃんと動いているわけだが
2014/11/30(日) 20:33:46.05ID:SVLUkCya
>>588
SmalltalkでObjectに500もメソッドなんてねーよw

あったとしたら、アンチパターン ゴッドクラス
(設計の一部分(クラス)に、過剰に機能を集中させること)に
適合してしまうわw
2014/11/30(日) 20:34:01.13ID:T2KLr1TM
>>587
分岐(メソッド探索)の話などしていない

どの式がどのインターフェースを実装しているのかを実行時に検査してるのか?
どの式がどの型の部分型かを実行時に検査しているのか?
へー、それ、なんていう言語だい?
2014/11/30(日) 20:36:14.22ID:TE77vkUw
>>589
わかりやすい静的脳だな
Smalltalkでは色々なパッケージがObjectクラスにメソッドを追加していくんだよw
2014/11/30(日) 20:36:20.46ID:VpMFGcKd
>>585
大規模なシステムは作者が異なる様々なライブラリを使うが、違うライブラリ間で
同じ意味の機能に同じインターフェースを持たせるのは不可能

インターフェース方式は、ある数値計算ライブラリと別の行列演算ライブラリを混ぜて使う場合などで問題になる
2014/11/30(日) 20:40:02.67ID:/BRxH/wW
>>590
実行時にvalidationするのがダックタイピングというなら
構造的部分型は確かに違うな


"If it walks like a duck and quacks like a duck, it must be a duck"

という文章からそのような意味を読み取るのは無理だが
2014/11/30(日) 20:40:22.76ID:SVLUkCya
>>591
> Smalltalkでは色々なパッケージがObjectクラスにメソッドを追加していくんだよw

最悪だな。JavaScriptでprototypejsっていうのがあったけど、
名前が標準のメソッドとobjectに追加したメソッド名が
被って大変な目にあっていた。

それ移行Objectにメソッドを追加するのは
ダメなやり方だって広く知られるようになったね。
2014/11/30(日) 20:40:39.28ID:360iudbJ
>>570
いや。duck typing とは言わないけれど、Smalltalk の動的型と
同様の柔軟性を持たせつつ型安全を目指したのがインターフェイス。
(Eiffel流のクラスの継承をサブタイプに使うと型安全でないという流れで)
http://www.cs.utexas.edu/~wcook/papers/InheritanceSubtyping90/CookPOPL90.pdf
2014/11/30(日) 20:43:21.18ID:/BRxH/wW
>>592
Haskellの型クラス、Rustのトレイト等が
それらの問題点を解決している
2014/11/30(日) 20:45:52.98ID:TE77vkUw
>>593
If it walks like a duckというのは、実際のitの振る舞いのことを指しているのだから実行時のことだと考えるのが自然だと思うが?
If it will walk like a duckならばコンパイルだろうけどな。
2014/11/30(日) 20:47:16.39ID:TE77vkUw
>>594
>名前が標準のメソッドとobjectに追加したメソッド名が
>被って大変な目にあっていた。

初心者だな
当分補助輪をつけることをお勧めするw
2014/11/30(日) 20:48:14.19ID:360iudbJ
>>589
Squeak Smalltlk(Squeak4.5)で調べたけど
いろんな意味で残念ながら^^; 500近くはあるな。Object allSelectors size "=> 486 "
2014/11/30(日) 20:51:13.03ID:TE77vkUw
>>592
>大規模なシステムは作者が異なる様々なライブラリを使うが、違うライブラリ間で
>同じ意味の機能に同じインターフェースを持たせるのは不可能

そういう初心者は補助輪(静的型)を使えばいいよw

ちなみに動的言語の環境では
様々なライブラリでどういうメソッド名がつけられているか検索する仕組みと
指定したメソッド名のメソッドを検索する仕組みが
遥か80年代から用意されていたりするけどなw
2014/11/30(日) 20:53:54.80ID:TE77vkUw
>>599
動的言語では全オブジェクト共通の語彙が重要だから当然そうなる
2014/11/30(日) 20:56:59.55ID:360iudbJ
>>555
とりあえず、アラン・ケイが書いていることを読もうや。
そもそも「その頃は」って思い込み激しすぎるだろう。
これ書かれたの1999年〜2000年頃だし。
2014/11/30(日) 21:05:38.46ID:/BRxH/wW
>>597
静的型でも振る舞うのは実行時だろ
チェック自体はコンパイル時だが

で、どこに実行時にチェックすると書いてある?
2014/11/30(日) 21:09:31.70ID:360iudbJ
>>601
とはいえ、Squeak のカオス化に嫌気してフォークされた Pharo は
だいぶ減らして 374 だし(3.0調べ)、VisualWorks はもとより 303(7.10調べ)だけどね。
2014/11/30(日) 21:10:47.94ID:VpMFGcKd
>>601
補完がうんこ過ぎるからそんなカオスになってんだろ
クラスの名前空間としての機能が死んでる
2014/11/30(日) 21:13:30.42ID:VpMFGcKd
>>600
静的型(ていうかJava)のインターフェースの話だよ
動的なら名前合わせときゃ良いんだから問題ならん
2014/11/30(日) 21:15:20.91ID:guVElZZq
>>599
Pharo 3.0 は、374
2014/11/30(日) 21:17:02.28ID:guVElZZq
>604 で既出だった orz
2014/11/30(日) 21:30:34.30ID:360iudbJ
>>608
乙^^

ちなみにファンお手製で変わり種のGNU Smalltalkだとわずか123。
http://ideone.com/D9lo8c
2014/11/30(日) 21:50:46.91ID: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
2014/11/30(日) 22:04:51.19ID:SVLUkCya
オブジェクト指向プログラミングをするのが目的ではない。
巨大なシステムをより早くより安全に開発するのが目的なのだ。
2014/11/30(日) 22:11:54.90ID:rR9TrKjV
オブジェクト指向上の欠陥とやらが何か知らんが、
そのお陰で実用レベルの型推論(補完や型検査)が出来てるなら面白いな
2014/11/30(日) 22:22:44.40ID:SVLUkCya
人間が間違わずに全てのコードを脳に記憶して
タイプミスすらしないことを前提にするならば、
コードにわざわざ記憶の断片(つまり型情報)を書く必要はないよ。

それができないから、型情報を書いたほうが
わずかの手間だけで、そのあとずっと楽ができるわけで。
2014/11/30(日) 22:32:19.86ID:360iudbJ
>>570
すまん。こっちだった。
Interfaces for Strongly-Typed Object-Oriented Programming
http://www.cs.utexas.edu/~wcook/papers/OOPSLA89/interfaces.pdf
2014/11/30(日) 22:48:40.83ID:mFsly3WX
>>612
>オブジェクト指向上の欠陥とやらが何か知らんが、

有名な Python のself地獄だよ
キーワード「python self地獄」で検索すればGoogle先生が教えてくれる
Python しか知らなければself地獄が気にならないかもしれないけど、
Smalltalk や Ruby を知っている人からすれば、無知は幸せだなぁと見る
これの基礎が「継承の意味論における差異」になる

なお単に意味論の違いだから、self地獄と引き換えに
実用的な型推論(補完や型検査)が手に入るわけではない
両者の間に直接的な関連性は無い(言い換えるとスレチな話題)
2014/11/30(日) 22:53:53.26ID:rR9TrKjV
>>615
self地獄はGuidoが変人なだけで意味論なんて高尚な理由じゃねーだろ
self省略できるようにパーサ弄れない意味論的理由は何だよ
それこそ関係ねーよ
2014/11/30(日) 22:55:23.26ID:360iudbJ
>>610
> Ruby では(Smalltalk と同様な)疑似変数 self と super を持つ

Ruby の super は Smalltalk とは違うよ?
2014/11/30(日) 22:55:36.39ID:/BRxH/wW
>>615
> 両者の間に直接的な関連性は無い(言い換えるとスレチな話題)

スレの主題に沿っているのは補完や型チェックの方だけど
2014/11/30(日) 22:57:41.96ID:mFsly3WX
>>614
この論文内では duck typing という用語は一度も使われていないし、
タイトルに Strongly-Typed と書かれているように静的型付け言語に関する内容だ

で、いったいどこから duck typing を連想したの?
2014/11/30(日) 23:00:20.47ID:360iudbJ
典型的なアスペか。
2014/11/30(日) 23:01:15.62ID:mFsly3WX
>>618
>スレの主題に沿っているのは補完や型チェックの方だけど

まったくそのとおり
だから >>610 では

> まったく無関係な論文を引用して、いったい何を言いたいのか意味不明だね

と書いた
2014/11/30(日) 23:09:04.67ID:rR9TrKjV
>>619
1989年の論文にduck typingと言う用語が出てきたらそっちの方が驚くわ
abstract斜め読みしただけだがSmalltalkには言及されてんぞ
2014/11/30(日) 23:09:46.51ID:tHR3Cg3X
あれ?int型の+とstring型の+に対するオーバーロードみたいな話になってる?
無知なら口だすなと言われそうなので黙っておきます…
2014/11/30(日) 23:22:20.73ID:/BRxH/wW
>>621
そうか。じゃあスレ違いの話は止めないと荒らしになってしまうな
2014/11/30(日) 23:27:42.56ID:mFsly3WX
>>616
Python のオブジェクト指向は Modula-3 を参考にしているけど、
Modula-3 のオブジェクト指向は Simula を参考にしている
そして疑似変数 self の概念は Simula には存在せず、
Simula を参考にした Smalltalk で生まれた
だから、Modula-3 や Python に疑似変数 self は存在せず、
これを模倣するにはメソッド引数で明示的に __self__ を
渡さなければならない訳

あと疑似変数 self の値は実行時に決まるから、
もし Python で __self__ を省略できるようにするためには、
構文論(syntax)の変更すなわちパーザの改造だけではダメで、
意味論(semantics)も変更しなければならない

こうした背景も知らずに「変人だから」という理由で決めつけるのは、
Guido氏に失礼だと思うよ
2014/11/30(日) 23:31:44.94ID:guVElZZq
もう、超優秀なIDEがあって動的構造取り入れた c# 最強って事で良いんじゃないの?
2014/11/30(日) 23:42:47.38ID:UnYKruMf
>>626
MSが他の処理系を駆逐する勢いでLinux版頑張ったら近い将来にそうなるかも。
種だけ蒔いて後知らねっていう可能性も高いけど。
2014/11/30(日) 23:43:33.56ID:mFsly3WX
>>622
> 1989年の論文にduck typingと言う用語が出てきたらそっちの方が驚くわ

そうだろ、だから驚いて >>619 では

>>で、いったいどこから duck typing を連想したの?

と書いた

論文を引用するのはいいけど、この論文をどう解釈して duck typing に結びつけたのか、
説明が無ければ意味が分からんという話だよ


>abstract斜め読みしただけだがSmalltalkには言及されてんぞ

Smalltalk の柔軟な継承を強い型付け(=静的型付け)なOO言語に取り込むために
インターフェイスを用いる、という文脈でね
動的型付けを濫用するというニュアンスを持つ duck typing とは何の関係も無い

この論文、型システムと言語設計に興味がある人にはとても有益だから、
斜め読みと言わずじっくり読んでみたほうがいいと思うな
2014/11/30(日) 23:44:44.78ID:/BRxH/wW
>>616
http://neopythonic.blogspot.jp/2008/10/why-explicit-self-has-to-stay.html

・ただの関数を、後からクラスにメソッドとして後付けできること(そのとき暗黙のselfの扱い)
・decoratorがあるから(動的にstatic methodやclass methodに変更できる)

というのが理由だそうだ
2014/11/30(日) 23:49:11.15ID:guVElZZq
>>627
Roslyn凄そうだが、どんだけのヤツが付いていけるんだろ。
2014/11/30(日) 23:50:00.23ID:nRiDRl39
>>626
動的構造ってなんだっけ
実行時型情報ならC++にもあるけど
むしろ実行時型情報がない言語の方が良いんだろ
ほぼ全部関数型言語だけど
2014/11/30(日) 23:52:00.50ID:mFsly3WX
>>629
Smalltalk や Ruby なら、暗黙のselfがあっても
後からクラスにメソッドを後付けできるのにね....
2014/11/30(日) 23:53:34.74ID:/BRxH/wW
言語だけでいうならRustに期待しているんだが……
2014/11/30(日) 23:57:11.19ID:SVLUkCya
>>682
> 後からクラスにメソッドを後付けできるのにね....

それは静的型付け言語のメリットをなくしてまで
やるべき重要な事なのか?
2014/11/30(日) 23:58:47.30ID:mFsly3WX
>>634
おいおい、Python は動的型付け言語だよ
2014/11/30(日) 23:59:07.80ID:rR9TrKjV
>>632
その代わりに関数が無くてProcオブジェクトとかいう
キモい代用品を使わされるゴミでしょRubyって
2014/11/30(日) 23:59:36.82ID:UnYKruMf
>>633
そこでまた振り出しに戻るのだが、ちょこちょこって遊ぶならどの言語でも
いいのだが、ガッツリ使おうとするとツールもしっかりしてないとねというのに
戻るわけです。
2014/11/30(日) 23:59:39.73ID:guVElZZq
>>631
dynamic型
2014/12/01(月) 00:02:55.46ID:v1/AC0CB
>>635
実用レベルで型推論出来る言語と
出来ないゴミを一緒にすんなよ
PythonはSoft typingが実用化されてんの
2014/12/01(月) 00:04:29.77ID:JhMfQ7kZ
>>636
いや、Procオブジェクトを明示的にコーディングするのは稀だ
クロージャの無い Python とは違って、
Ruby だと普通は do |x| ... end や { |x| .... } で書ける
2014/12/01(月) 00:08:40.28ID:v1/AC0CB
>>640
お前クロージャスレでフルボッコにされた奴か
ここでもフルボッコじゃねーかw
2014/12/01(月) 00:11:50.96ID:WHPunuUw
>>637
スレタイでいうところの大規模開発なら特にそうだな
残念ながら言語の優先順位は低いと言わざるを得ない
2014/12/01(月) 00:13:16.83ID:2BTgZC4D
結局は、静的言語が動的言語の要素を取り入れて進化し、両方の境界が曖昧になるんだよ。
2014/12/01(月) 00:15:06.71ID:JhMfQ7kZ
>>641
逆だろw
クロージャを使えば簡潔に書けるのに、結局 Python ではコードが書けずに終わった
で、しまいに火病を発症してわめきちらしただけ、それがフルボッコなのか?www

今からでもいいから Python でコード書いてみな
2014/12/01(月) 00:18:09.70ID:v1/AC0CB
>>643
そしてObjectに500個もメソッドを突っ込んで悦に入ってるゴミは
サーベルタイガーのように進化から取り残される、と
2014/12/01(月) 00:20:09.36ID:JhMfQ7kZ
>>640
ほう、Python で Soft Typing が実用化されたとは初耳だ
ググってみると2003年に提案はあったものの、
その後に実装されたという情報は見つけられなかった

本当に実用化されているの?
また嘘でも何でも議論に勝ちさえばいいという発想じゃないのかなあ....
2014/12/01(月) 00:21:49.35ID:v1/AC0CB
>>644
え?お前が勝手なクロージャの定義を持ち出して、
出展となる文献を出せと言われても出せず逃げただけじゃん

で、文献は?
2014/12/01(月) 00:28:35.48ID:v1/AC0CB
>>646
>>395
2014/12/01(月) 00:29:56.57ID:JhMfQ7kZ
>>674
クロージャの話題は完全にスレ違いだから、
続きを希望するなら当該スレへ移動してくれ
文献もそこで出すよ
2014/12/01(月) 00:36:07.76ID:2BTgZC4D
>>645
そのゴミから色々なものが生まれた。
50年後には、そのゴミから新しいOSが生まれるかもよ。
2014/12/01(月) 00:39:00.66ID:JhMfQ7kZ
>>648
外部にツールが存在することと、
ある言語が Soft Typing で設計されている話は関係ないよ
Python の言語処理系(インタプリタ)だけで
明示的な型宣言が無くとも実行前に型検査できるなら
話は別だけどね

というか、Soft Typing という用語の意味を
間違って理解しているんじゃね?
2014/12/01(月) 00:42:41.17ID:v1/AC0CB
>>651
ある言語がSoft typingで設計されてるかなんて開発においてどうでも良すぎる
型推論に基づく実用的なツールがあるかどうかが重要
■ このスレッドは過去ログ倉庫に格納されています