やっぱり動的型付け言語は大規模開発で効率が悪い 4
スレタイで興味持った新規さん向けの要約
> 163 :デフォルトの名無しさん:2011/11/12(土) 00:37:41.74
> つーか日本の標準的な組織でどうかって話じゃないと意味なくね?
> ファウラーの環境を引用してどうすんの?
> 君らファウラーに匹敵するスキルを持っていて、周りもそういうレベルの奴に囲まれた環境で仕事してんのか?
>
> 165 :デフォルトの名無しさん:2011/11/12(土) 00:42:56.66
>
>>163 > つまり日本の底辺ドカタに動的型は使いこなせるか?を議論すればいいのか
> じゃあスレタイも「動的型付け言語ではドカタは大規模開発できない」に変更しなきゃな
仕事で活用できないとあんま意味ないよ派
仕事でプログラミング学んだので他は知らね派
家でも趣味やOSSでプログラミングしてるよ派
仕事なんてしてませんが何か派
ファイッ
PHPの動的型付け嫌だけどね $a = "100"; これが文字列ではなく整数とみなされたりね
4 :
デフォルトの名無しさん :2011/11/21(月) 14:55:03.00
整数でいいと思うけど。
だからPHPは「HTMLを構築して出力する」という特化目的に於いて許容される仕様(とどう煮ても焼いても許されざる仕様)が山ほどあると何度 PHPは汎用プログラミング言語ではない
"100" + 1 とか 1 + "100" が エラーにならない言語はウンコ
7 :
デフォルトの名無しさん :2011/11/21(月) 15:27:01.74
あのさ、俺思うんだ。 PHPは知能を持っている。 「10:12」こんなメモを渡されたとする。 これなんだろう? 10対12?10時12分? これ人間だったら状況に応じて意味をくみ取るわけ。 たとえばさ、秘書に「10:12に集合するよう徹底してください」こんなメモ 渡すでしょ。 ここで秘書が「10対12ってなんですか?ちゃんとわかるように書いてください」 とか言い出したら、この娘アホの子なのか?って思うよね。 結局、JavaとかCってアホの子なんだよね。 っていうか無能なの、知能がないの。 まああたりまえだけど。 でもね、PHPにはこれができる。 やっぱりPHPには知能があるんだよ。
$a = "百"; と書けばいいだけ
perlとかDみたいに文字列連結と足し算を区別してないのが問題だな
awkをdisってんのか?
JavaとJavascriptも?
個々の言語仕様ごとに意味が違うのに表層しか見えない
>>9 の脳みそが問題
awkは数の加算と文字列結合は分かれてる 1 1と並べて書けば文字列結合と解釈されて11になるし、1 + 1は2だ
というか、どの言語もきちんと区別はしている(じゃないと処理できない) 人間が判断する見た目または他の言語と乖離していることがあるというだけに過ぎない
エラーにもならず、人間が判断する見た目でも区別が付き難かったら ミスに気付かず意図しないデータ型で動かしてしまう可能性が高まる 処理系が区別してるなんて話はそもそもしてない(んなもん当たり前)
ポリモーフィズム全否定来ましたw ハードディスクを交換したらファイル操作のコマンドが全部別のものになるのが正義なんだそうですw
ポリモーフィズムじゃなくて、オーバーロードや暗黙の型変換の話ですが
同じ見た目でも、対象によって異なった動作をする、ということが気にくわないのでしょ?
"1" + "1" => "11" で 1 + 1 => 2 のときに "1" + 1 => ? をどうするかという問題だから "1" + 1 => 11 なら数値が文字列に、 "1" + 1 => 2 なら文字列が数値に型変換されてる こういう暗黙の型変換は分かり難い "1" + "1" や 1 + 1 は否定してないので、 ポリモーフィズム全否定ではない
>>18 同じ見た目なら常に同じ動作だ
1+"1"が文脈やランダム性によって2になったり11になったりすることはない
…まあ、あれだ、 x + 1 が x の「型」によって結果が違う、みたいな話にしないと リテラルで話をしていても微妙に埒があかない
なんでいつもの人が反論してるんだろう...と思ったら Javaも批判の対象だからかwww
だれがいつもの人なんだろう
>>17 じゃあ暗黙の型パラメータとか型クラスのメソッドの名前解決とかも全否定ですね。
あ、それは全否定でいいや 両方持ってるScalaはRuby並みにキタネーし
>>9 Perlは文字列の連結と足し算を演算子で区別すると思うが…
型がないと型ごとに演算子が増えるよね。 + 数値足し算 . 文字連結 == 数値比較 eq 文字比較 みたいに。
変数に型がある/ない 値に型がある/ない まずこれを区別するところからはじめようか
その程度も区別できないからこそ ドカタなわけですよ
数値の足し算と文字列連結の両方+にしたいと言ってる人は 足し算を意図している所で連結が起こる可能性を無視したバグプログラマと 文字列連結にされたくないってときに必ず Number(a) + Number(b) とか書くような作業が大好きな人だけだろ
記号が増え過ぎる、って主張も解らんでもない Haskell で ++ とか初めて見た時は「…それ、なんか無理してね?」と思ったし
・内部形式が数値か文字列かによって、足し算か連結か変わるのは良くない ・文字列の内容が数値かによって、足し算か連結か変わるのは良くない ・記号が増えすぎるのは良くない ・既存の記号に違う意味を与えるのは良くない だれかこの堂堂巡をどうにかしてくれ
静的型付なら問題にならないでしょ
暗黙の変換がやたらあるのはよくない 静的なものではC、動的なものではJavaScriptの==演算子
ていうか、Goを触ってみろ。 Cを作った奴等の次の次の言語、だけあって、Cのいいところを残して、 ダメな所がよく潰されている。
>>34 静的型で暗黙コアージョンしまくりな言語がいいのか?
38 :
デフォルトの名無しさん :2011/11/24(木) 18:05:37.98
>>36 Dartもそんな感じがするな。JavaScriptのスコープとトホホな点とかは
きっちり潰している。
stやrubyみたいな規則だとわかりやすい phpが場当たりなだけ jsの==はある意味必然だろ
goいいよね スクリプト的にも書けるし ちょい面倒なとこもあるけどさ
もう結論出てるだろ 大規模開発ドカタは静的型付け言語すらちゃんと使えない 動的型付け云々を言う前に せめてcaseの網羅性を静的検査可能な形で記述できるようになれ
パターンマッチの網羅性を検査できる言語はあるが、 だからと言って仕様で定められた分岐を網羅してるか否かまでは検査出来ないぞ そこは分かって書いてるの?
仕様で定められた分岐が、可能な状態を網羅しているかどうか検証すればいいだろ
テストで?
>>41 大規模開発ドカタ限定で答えだすなw
静的型付け言語をちゃんと使えるプログラマ前提の話、
(お前はもちろん使えるんだよな?w)
そういう前提だと、静的型付け言語が優れてるってのは
言うまでもない話だ。
ま、静的言語と静的型付け言語をごっちゃにしているお前の
いうことなんか誰も耳をかさないだろうけどなw
変数の型と、値の型とを区別出来ない言語を使っていた時は.動的型付けの意味が判っていなかった。 尤も、世間の9割以上は単純な事務処理だから、区別出来なくても当面困る事は無いだろう。
それはアセンブラでも頑張れば出来る理論だなw
単純な事務処理なんてドカタ&Javaで十分 ぬるぽはうざいけど、ドカタはJavaくらいしか書けねーしな
またドカタが口癖にお前かw
>>33 よし、数値といってもintとかfloatとかがあるから、それぞれの足し算の記号を別のものに……。
>>46 > ま、静的言語と静的型付け言語をごっちゃにしているお前の
> いうことなんか誰も耳をかさないだろうけどなw
理解できていないのはお前だろw
>>41 は「静的型付け言語」「caseの網羅性を静的検査」に言及しているが
静的言語なんて言及してねえぞw
で、caseの網羅性を静的検査する場合、
静的型付けとの関係が深いことは言うまでもないことだよな?な?
>>52 なんかさ、すべての問題を解決してくれないなら
意味が無いと思ってないか?
ユニットテストは仕様上のバグを解決してくれないから
意味が無いみたいな。
caseだって網羅性とか完璧に解決してくれないなら意味が無いと
言おうとしてるんだろうけど、caseと静的型付けはほとんど関係ないから。
まあ、caseっていうかswitchの引数に指定できない型を検出してくれるという意味で
少しは意味があるけどね。
C#かJavaか知らないけど、言語によっては、 switchにenum型変数を入れてcaseではそのenum型の 値でしかチェックできないってのもあったはず。
網羅性の静的検査があると嬉しいのは事実 直和型のパターンマッチとかでは、型さえ仕様と合ってれば 仕様で定められた分岐の網羅性を検査できるわけだし
>>55 それって動的型付け言語じゃできないものなのかな?
この変数に入る値は○○ですって
あらかじめ定義しておけば、
動的型付け言語でも可能だと思うんだけど。
>>56 直和型について言えば、定義した型を
実行時に変更できないようにすれば可能かもしれない
>>57 > 定義した型を実行時に変更できないようにすれば
それって静的型付け言語って言うんじゃ…
実行時に変更できない時点で動的型付け言語じゃなくなってるけどなw やっぱり静的に型付けできないと、静的にチェックは難しくなるね。 もし静的型付け言語にコンパイルフェーズってのがあって その時にコードでいろいろ変更できるようにすれば 動的型付け言語を完全に超えられると思う。
でもさ、動的型付け言語で優れたIDEが作れる、と言っても 実例としてはSmalltalkにしか存在しないように、 静的型付け言語なら分岐の網羅性を静的検査できる、と言っても 実例としては一部の関数型言語しか存在しないじゃん このスレにいる静的型付け言語派の人はみな関数型言語使いなの?
またわけのわからんのが来たよ
>>59 コンパイル後の変更に対応できないから動的型付け言語を超えられない。
前スレで分かったこと - 大規模開発にはドカタ動員が必須 - ドカタは静的型チェックやIDEの補完の助けなしではFizzBuzzも書けない。 - 逆にコンパイラとIDEの助けを借りれば、なんとか動くコードは書ける。 - 動的言語には現状まともなIDEがない(Smalltalkerはこっちくるな。Emacs?笑えんな) - よって大規模開発で動的言語を使うと炎上する
>>64 > - 逆にコンパイラとIDEの助けを借りれば、なんとか動くコードは書ける。
だうと
>>62 > コンパイル後の変更に対応できないから動的型付け言語を超えられない。
コンパイル時に変更できれば、あらかたの問題は解決するでしょ?
どうしてもコンパイル時にやらないといけないことってなに?
>>67 それは言葉を言い換え得ただけ。
どうしても実行時拡張をしないといけないことってなに?
たいていの問題はコンパイル時拡張が出来れば 実行時拡張を使う必要がない。 俺が作ろうと思っている言語は静的型付け言語だが、 コンパイル時拡張を備えている。
むしろ実行時拡張しなくてもいいアプリのほうがよほどドカタ・・・
だから、どんなときに実行時拡張が必須なのか 言えってw
言えないから、ドカタって煽って逃げてるんだろ・・・ 察しろよ!
あ、なるw あなるww
Smalltalkは原則として実行時の拡張しかできない。
実行時拡張というのは、万能関数 eval を使ったメタプログラミングのことだろ? (他にはリフレクティブプログラミングと呼ぶ事もある) LISP系言語やRubyでは必須というか、煽るまでもなくごく当たり前に使われているな
使われてるかどうかじゃなくて、 どういう時に使うのかって話なんだけどなw
コンパイル時拡張があれば、動的拡張はいらないって話なんで そこんところを勘違いしないように。
>>74 Smalltalkの場合、クラスブラウザ上でクラスを新規定義すると、
ブラウザの中の人がClassインスタンスを生成して
それをシステム辞書に登録するんだったよね
Smalltalkなんかはそうなってるってだけで、 どうしても実行時に拡張しなければいけないことなんてないでしょ。 特にコンパイル時に拡張できればほとんどの問題が解決する。 で残りの問題はあると思うから「ほとんど」と書いたが、俺は思いつかない。 どうしても実行時に拡張しなければならないことなんてあるの?
>>76 たとえばActiveRecorrdというRubyで書かれたORM(Object-Rerational Mapper)では、
データベースに接続した時にデータベースのスキーマ情報から各テーブルに対応する
クラスが動的に定義される。この時、テーブル内の各フィールドはクラスに所属する
インスタンスメソッドとしてこれまた動的に定義される
JavaやC++のような実行時拡張の欠落した言語には、こんな芸当ができるかな?
>>80 要約すると、コンパイル時拡張では最初からやり直しになりがちだしデータも作り直しになるから
例えばSmalltalkみたいに30年間動き続けるとか長期運用に耐えるソフトウエアは作れない。
最初からやり直しになるとかデータも作り直しとか どこの世界の話だよ
>>81 でもさ、それって obj.setField(F1, 'abc') こう書くのとなにも変わらないよね?
>>81 データベースに接続した時点でのクラスが作られるってことは言い換えると、
コードに書いてあるクラスとは違うオブジェクトができてしまうこともあるってことで、
データベース定義が変わってしまうと、コードが動かなくなってしまうってことじゃないの?
それよりか、データベース定義からコンパイル時にクラスを作ってくれたほうがいいんだが。
> それよりか、データベース定義からコンパイル時にクラスを作ってくれたほうがいいんだが。 ようするに、その言語のクラスの定義の仕方は、 class HOGE { public foo() } みたいなのだけど、 yamlで書いたテーブル定義からも クラスを定義できるってこと? yamlからSQL文も生成できるようにしておけば、 単一の定義からクラスとcreate table文が出来るわけか。 一種のジェネレータみたいだけど、実際にコードを生成しなくても別の定義ファイルから コンパイル時に直接クラスを作れるわけか、それってかなり良くない?
コンパイル時拡張が出来れば、コンパイル時に データベースに接続して、クラス生成なんてことも可能だろうね。 これだと、しっかり型チェックができるから 更に優れているのではないか。
これからはやるだろうな。コンパイル時拡張。
>>84 Rubyだと、obj.f1 = 'abc' あるいは obj.f1! abc と書けるよ
JavaよりもRubyのほうが簡潔なコードが書けることは一目瞭然じゃないのかな?
データベースのフィールドなんか、コード補完できないところだけど、 コンパイル時拡張があれば、コード補完できるようになるかもしれないな。
>>89 でも、シンタックスシュガーでしかないでしょ?
ちょっと書き方が変わった程度。
C#ならプロパティがあるから、
obj.fields(f1) = 'abc'なんてかけるしね。
もしそれでデータベース定義に従って
コンパイルエラーが出るなら、まだ意味があるけど無理でしょ?
もしコンパイル時拡張があれば、obj.f1 = 'abc'って書いてコンパイルしたら
データベースにそのようなフィールドはありません。ってエラーを出せるようになるかもね。
>>91 >でも、シンタックスシュガーでしかないでしょ?
>ちょっと書き方が変わった程度。
いや、単なる構文糖とは全然違うよ
JavaやC#じゃ obj.set_f1('abc') あるいは obj.f1 = 'abc' と書けないだろ?
>>85 >データベース定義が変わってしまうと、コードが動かなくなってしまうってことじゃないの?
それはJavaでも同じだろ?ActiveRecord固有の問題じゃないよ
>>85 ,86
>それよりか、データベース定義からコンパイル時にクラスを作ってくれたほうがいいんだが。
そういったクラスジェネレータは、ActiveRecordの登場以前にもいくつか存在していた。
その代表例が、AppleのWebObjectsというWebフレームワークの一部である
EnterpriseObjectと呼ばれる技術。WebObjectsでは、Modelerというツールを
利用する事でデータベースのスキーマ情報からクラス定義を自動生成できる。
さらにはModelerは、IDEであるProjectBuilder(今のXCode)と統合されている。
一言で言えば「過去に通った道」だね
ドメインモデル貧血症を地でいく展開だね☆
むしろRubyの場合、IDE側がRubyそのものを動かせば案外上手く行くんじゃ? あの言語、実行途中でクラス作成や追加や修正できて インスタンスも同じく作成追加修正できるし あるオブジェクトが現在持っているメソッドの一覧とかも出せるんじゃん
実行時拡張の議論でわかったことは、 ORマッパーやダイナミックローダを使うだけのドカタは、 それらの機構を実現する基礎となっている実行時拡張を不要と言い切る。 天に唾するとは、このことだなw
だからドカタに動的言語を使わせるのは自殺行為だと何度言えば
>>95 ドメインモデル貧血症 = トランザクションスクリプトで
特に日本でよく使われる、優れた方法の一つなんだが・・・
>>97 結局、コンパイル時拡張があれば
実行時拡張は必要ないって結論になってるんだが、
だって過去に通った道というだけで反論は一つもない。
>>98 またお前か。Javaは動的言語だって。
動的型付け言語と動的言語をごっちゃ混ぜにしているお前は
馬鹿としか見られてないぞw
>>97 まあ、静的型付け言語でもソフトウェアアーキテクチャとかフレームワーク設計に
関わっていれば常識なんだけど、それをドカタに想像(イメージ)させようとすること
そのものに無理があったんじゃないかと思われ....
まあさ、コンパイル時拡張があれば 実行時拡張が不要って結論は出てるからね。
えと、結局どういう時に実行時拡張がいるんだっけ?
あ、全部それコンパイル時拡張でできることじゃん。
実行時拡張で何が出来るのかといえば、 結局シンタックスシューレベルの事しか出なかったね。
実行時拡張の例がハッシュのキーの 代わりってんだから笑うしかないだろ。
>>101 お前ぜんぜん分かってねーな。真の動的言語はSmalltalkだけ!
もはや、どうやってドカタが想像可能なレベルまで落とし込んだ 具体例を出せるかってゲームになりつあるな。
>>103 日本語お上手ですね。何日前から習い始めましたか?
>>108 逆だよん
・LISP/Smalltalk/Rubyといった実行時拡張の可能な言語
・ テーブルの各フィールドをメソッドとして「直感的」かつ「簡潔」に書ける
・もちろんハッシュとしてアクセスすることも可能
例:obj.f1 = 'abc' あるいは obj.f1! 'abc'
・Java/C#のような実行時拡張の欠落した言語
--> テーブルの各フィールドはハッシュへ与えるキーとして
「間接的」かつ「冗長」にしか書けない
例:obj.fields('f1', 'abc') あるいは obj.fields('f1') = 'abc'
ここまで手取り足取り説明しないと分からんものかね?
もうドカタの相手は疲れたよ.... >>パトラッシュ
--> テーブルの各フィールドはハッシュへ与えるキーとして 「間接的」かつ「冗長」に書ける なにも問題ないんじゃね?
ほらね。冗長かどうかって話に持っていっちゃうから、 シンタックスシュガーだねっで終わっちゃう。
冗長かどうか気にする感性があったら Javaドカタやってないって話だよ
>>116 バランスの問題だよ。
冗長だとなにが悪い? コードを書くのが面倒?
でもな冗長である代わりに、逆にコードを書くのが楽になってる面もある。
>>114 Java/C#で、プログラマがハッシュキーを('f1'ではなく)誤って'fq' と
書いてしまったケースを想像してごらん
Java/C#では、アクセス結果として(おそらく)Nullが返るから、
その誤った行(コード)を素通りして、予測の付かない箇所で「実行時に例外が発生」する
もしもJava/C#で obj.set_fq('abc') あるいは obj.fq = 'abc' と書くことが可能であったなら、
未定義メソッドエラーとして「コンパイル時に検査」できるんだよ
それに対してRubyであれば、同じ誤りの検出が(実行時ではあるけれど)
その誤りを含む行(コード)に対する具体的な method missing 例外として誤りを検出できる
分かるかい?
このケースでは、静的型付け論者が主張する「コンパイル時に型検査ができる」という
利点が失われているばかりか、実行時検査でもRubyにすら劣った結果になっているんだ
これは大きな矛盾ではないのかな?
>>115 これでいいかな?
>>115 個別のメソッドとして実装することと
共通メソッドにハッシュキーを渡してアクセスすることが
単なるシンタックスシュガーに見えるのか・・・
ドカタって、どうやってプログラム書いてるの?
>>118 > Java/C#で、プログラマがハッシュキーを('f1'ではなく)誤って'fq' と
> 書いてしまったケースを想像してごらん
>
> Java/C#では、アクセス結果として(おそらく)Nullが返るから、
> その誤った行(コード)を素通りして、予測の付かない箇所で「実行時に例外が発生」する
お前は馬鹿なのか? 大笑いするほどの馬鹿だぞ。
間違っているのなら、その場で例外を出せばいい。
fqというキーがなければ、例外を出せばいいだけじゃないか。
素通りするしてしまう? それは動的型付け言語で
ハッシュのキーが無かった場合に起こる問題だね。
ああそうか、お前は動的型付け言語の問題の話をしちゃってるんだ。
>>118 > その誤った行(コード)を素通りして、予測の付かない箇所で「実行時に例外が発生」する
そう見えるとしたら、それはお前がJavaのコードすら満足に書けないからだよ
そもそも「実行時に検出できるからいい」って言う奴は、大規模開発したことない奴だろ。
>>120 ,121
そういった実行時検査もプログラマがコードとして実装すれば可能だね
ただRubyのような動的型付け言語では単なる method missing だから、そんな手間は不要だけど...
まあ「手間」という言葉を持ち出してもドカタ発想では無問題らしいから、
この点については取り下げよう
では、
>>118 で挙げた本題の矛盾についてはどう考えているのかな?繰り返すと、
Java/C#のような実行時拡張の欠落した静的型付け言語では、
データベースへアクセスするコードの誤りをコンパイル時に(静的に)検査できない
という矛盾だ
>>123 > プログラマがコードとして実装すれば可能だね
実装の必要ないから。
動的型付けスレでJava詳しくなくても不思議はないが、
大上段に構えたいならAPIを100回位読み直してきた方がいいぞ。見てて恥ずかしい
>>118 は設計思想の違いだろ。静的型付け言語で
> 「コンパイル時に型検査ができる」という利点が失われ
るよーな書き方を態々する必要がない。当然誰もそんな変態コードを書かん。
インターフェイス切るなりするだけだ。
安全性と引き換えに記述量が増えてるだけ。それを面倒と感じお前が好まないのは分かるが、世の中おまえと同じ考えだけで出来てるわけじゃない。
所詮道具だから適材適所すればいいだけ。
>>124 単に実行時検査付きのハッシュクラスを選ぶだけの事で、
自慢できるような話じゃないし...
キーに一致する項目が無ければNullを返してもらいたいケースも存在する訳で....
>>126 だから理解不足を露呈してくだけだから脊髄反射を一旦とめて、読み直して来い。
インターフェイスのAPIを、ね。
本当に実行時に変えたいって要望は殆ど無いからね。 ほとんどの問題は最初から変わっていれば問題ないはず。 ソースコードを修正することで解決出来る問題ばかり。 ただ実際のファイルを修正するのははばかられる。 そういったときに実行時に変更するしかできないから 妥協してそうしているだけ。 本当に欲しいものは、動的型付けではなく、 オリジナルのファイルを書き換えることなく、コンパイル時に メモリ上でファイル(正確にはパースした結果のオブジェクト)を変更して そこからコンパイルを行う、コンパイル時拡張だということに 人々が気づくのはいつだろうね。
>>126 > キーに一致する項目が無ければNullを返してもらいたいケースも存在する訳で....
そういうケースの時に、 method missing が出てもらったら困るんですけどwww
>>129 Rubyではそうゆうケースの時は method missing は起きないけど何か?
それともJavaではそうゆうケースの時にも method missing が起きるのか?
not exist みたいな具体的な(適切な)例外が発生するんじゃないのか?
動的型付け言語の機能は、冗長にはなるが 本質的には静的型付け言語でできないことはない。 だが、逆に静的型付け言語でできる、静的検査は 動的型付け言語ではどうしてもできない事がある。
>>130 RubyではNullが返ってきて関係ない所でエラーになるんだよなw
>>128 そういった仮説を前提にした主張は、実験的でもいいから
具体的な言語処理系が登場しない限り、誰も耳を貸さないだろうな
未来を語るだけなら、三歳児のようなお子ちゃまにもできる訳で....
もしも
>>128 が三歳児なら、「ヨシヨシ、イーコチャンデスネー」って
頭をナデナデしてあげるよw
>>125 おお、ついにドカタが開き直ったかw
都合のいい時だけ静的型付け言語のコンパイル時型検査という利点を主張して、
都合が悪くなれば、それを「設計思想の違い」という言葉で濁すのか?
それを矛盾であると突いているんだけどな....
まるで国会答弁の政治家だし、それでもそれがドカタの生き方ならしかたないよね
>>135 意味がわからん。
動的にしかわかりようがないものは、
動的にやるってだけだろ。
両方できるんだよ。静的型付け言語は。
選択肢が複数あって優れた方を使う。
どうしても出来なければ、もう一つの方を使う。
これでなにも失っているものはない。
>>132 標準のHashクラスであれば、そうだね
Javaの標準Hashクラスを設計した奴は頭オカシイ nullを値として突っ込めるのにキーに対応する値が無いときもnull返すとか 気が狂ってるとしか思えん。何のメリットがあるんだよ
F#3.0のType Providerってまったく知らんけど今このスレで語られてるような機能なんじゃね?
>>137 だから何度も繰り返すけど、もしもJavaやC#でも obj.set_f1('abc') あるいは obj.f1 = 'abc'
のようなコードが書ければ、静的なコンパイル時型検査ができる訳だ
そして、もしそうなら「やっぱり静的型付け言語のほうがイイネ!!」という
誰もが納得する結論になるんだよ
>>139 それで、あんたはどの言語のハッシュが理想だと言ってるの?
>>141 だから、それをやりたければ、コンパイル時拡張があればできるよね。
って話になったんだろ。
別に例外を投げるのでも良いし、option型でも良いし Maybeモナドでも良いんじゃない? でもnull返すのはねーよ
>>141 > そして、もしそうなら「やっぱり静的型付け言語のほうがイイネ!!」という
> 誰もが納得する結論になるんだよ
やっぱり自覚はしてるんだ。
静的なコンパイル時検査ができたほうが優れていると。
いかなる場合でも、できない言語と比べて、
出来る言語のほうが優れてるよね。
>>144 だから、”標準のハッシュ” がnullを返さない言語はなにか聞いてるんだけど。
>>142 まずは自分がどのハッシュで満足してるか言えよw
>>147 いう相手が間違ってるw
そういうことは満足してないやつに聞けよ。
>>146 Java以外は大抵例外が発生するか、デフォルト値を指定できるか、Maybe的なやつを使うだろ。
むしろJava以外でnullが言語を知りたいわw
>>148 Javaで満足しているという返事と解釈した。w
>>143 だから、コンパイル時拡張は「絵に書いた餅ダネ」って話になったんだろ
>>153 だから、デフォルト値を設定できるならいいだろwww
null返すのはjavaとjsとperlか。ドカタ三種の神器w
>>155 デフォルト値を返すハッシュを作るのは簡単だよ。
tryしてみてね。
やっぱJavaにはドカチンを惹きつける何かがあるんだなw ちなみに、Javaでnull以外を返す連想配列を実装するのは簡単だが、 Mapインターフェイスをジェネリクスで使っているかぎり 結局は同じ問題に突き当たるという罠w
デフォルト値を設定できれば問題ない理屈がわかんね 有用な場合もあるけど無理なパターンもあるだろ
ジェネリクスはどこから出てきたんだ?
> Mapインターフェイスをジェネリクスで使っているかぎり > 結局は同じ問題に突き当たるという罠w ならないんだが?
162 :
デフォルトの名無しさん :2011/11/27(日) 23:11:08.76
apache commons collections使えば良いだけのような。
ガチで速度の必要な下から中位のトコは静的な言語 中から高位の層は動的な言語 使い捨てプログラムなんかも動的な言語
そういやRubyが遅いという理由で TwitterはScalaに変更したらしいね。 JVM上で動く静的型付け言語
>>131 動的型付き言語に静的型チェックを入れれば出来ることを
「どうしてもできない事」とはこれいかに。
動的型付きを狭義にして限定するなら分かるけど
それは静的型付きを狭義に限定する、つまり実行時型チェックを一切認めない
というのと同じくらいナンセンスなので却下。
とすれば、静的型付きっていうのは動的型付きに制約を設けたものに過ぎなくて、
プロトタイプベースに対するクラスベースみたいなもの。
制約を付けない物にできることが制約のある物にできないことはあっても、逆はない。
>>164 だからRubyがクソ遅いのは
実装者が二人揃ってタコだからで動的型付けだからじゃないと何度言えば。
> 動的型付き言語に静的型チェックを入れれば出来ることを > 「どうしてもできない事」とはこれいかに。 それやってしまったら、静的型付け言語になるんだよ。
つまりあれか、ここでは型付けの静的、動的ではなくて、 静的(コンパイル時)型チェック機構の有無だけを問うているのか?
オプショナルな静的型チェック機構を持つObjective-CとかStrongtalkとかDartとかは どっちに入るの? これらは静的型付きか動的型付きかって言ったら後者なんだけれども。
>>168 実行時に型情報を無視するといえばC++がそうだ。
RTTIを有効にしなければ、型情報そのものが存在しないからな。
それでも静的型付け言語だろう。
>>145 >やっぱり自覚はしてるんだ。
>静的なコンパイル時検査ができたほうが優れていると。
もちろん、そうだよ
だから、今回の件と以前に議論になったcaseの網羅性も含めて、
Java/C#というのは「静的型付け言語としてはダメダメ言語である」と見なしている
まっとうな静的型付け言語であれば、動的結合時の型検査やcaseの網羅性検査は、
コンパイル時に(静的に)実行されるのが当たり前
もしもそういった当たり前の静的型付け言語が存在するのであれば、
(動的型付け言語の柔軟性という利点を引き換えにしても、)賞賛に値すると考える
残念ながらお前等の自慢するJava/C#はそうじゃない、欠陥言語だ
また、そういった欠点/問題点を率直に認めることから、正しい解決方法への道が開ける
だから
>>125 のような開き直った態度は、他人様から与えられた物に
何ら疑問を持てない思考停止状態であると見なす
そして、そんな技術的向上心を持たず知的好奇心の無いお前等をドカタと呼ぶ
OOPを自慢する若手ジャバラが古参コボラを揶揄するのと同じ構図
そんなジャバラやコボラもドングリの背比べ、同じドカタ同士の低次元な争い
動的型付け言語の柔軟性の利点なんて 動的型付けのデメリットから比べれば ミジンコみたいなもんだから
> まっとうな静的型付け言語であれば、動的結合時の型検査やcaseの網羅性検査は、 > コンパイル時に(静的に)実行されるのが当たり前 まっとうな静的型付け言語の例をあげてください。
静的型チェックを導入することで諦めなければならないことが無い問題領域なら 静的型チェック機構があれば便利なのは自明じゃないの?
>>174 既存の静的型チェック機構は大なり小なりなんらかの問題を抱えているもんなんじゃないの?
ML系の型チェックはJavaなんかよりはマシだよね。そのぶん制約も増えるけど。
JavaでもEnum値で分岐するswitch文は網羅性を検証できるよ。 言語仕様としてEnum値を網羅していない場合をエラーとしていないだけであって (網羅していないswitch文を書いたっていいじゃん)、検証自体は文法的に、静的に 出来るし、そういうツールだって書ける。実際Eclipseでオプション一つ変更すれば Enum値を網羅していない場合をコンパイル時にエラーとしてはじけるわけで。 じゃあ何故Enumを使った場合は自動的に網羅性を検証するよう言語仕様そのもの を変えないのかと問われれば、これは歴史的な経緯としか言えん。 もともとJavaのEnumは後付けでswitchは整数型で分岐するものだったから網羅性 のチェックといってもコンパイルの手間を考えるとdefaultの有無を確認する程度 しか現実的な解は無かった。 その後Enumでも分岐できるようになったものの、整数型の場合の動作と揃えて 網羅していない場合もエラーにならない、そういう判断になっただけの話。
まとめ - 大事なのは、静的型付きであることより静的型チェック機構の有無。 - ドカタに任せられるレベルのコードでは動的型付きのメリットは皆無。というか変に使われると逆に困る - したがって、静的型チェック機構による制約も気にならないしメリットのほうがはるかに大きい。 - 制約を増やせばより確実な型チェックが可能になるが、その分ルールや出来ない事や場合によっては記述も増える。 - 出来ない事や記述の増加は問題ないが、ルールが増えてしまうと当然ドカタは使えなくなるから本末転倒。 - だからドカタ向けにはJavaやC#程度の型チェックでおk。
>>178 せっかくenum使ったswitchの網羅性をチェックしても、
enum型変数の値をnullにするだけで
ぬるぽ発生してどの分岐も通らないJavaは素晴らしい
そりゃ非nullを静的に検証する問題だから直交した話だわな。
>>180 nullケースも必須にすればいいだけ。
>>161 ああドカタ君にはまだ解らないか…
難しいこと言って、ゴメンね♪
>>181 非nullを静的に検証することができるの?
出来ないが。だから何を言いたいんだ?
>>51 VB6は引数にかかわらず、浮動小数割り算が/で整数割り算が%だったなw
>>178 >JavaでもEnum値で分岐するswitch文は網羅性を検証できるよ。
ほー、Javaでも静的に検査できるんだぁ....と思わせておいて、
>その後Enumでも分岐できるようになったものの、整数型の場合の動作と揃えて
>網羅していない場合もエラーにならない、そういう判断になっただけの話
これが結論か?できるのか/できないのか、どっちかはっきりしろよwww
まるで、こんな天気予報と同じだぞ
明日は晴れでしょう。しかし曇ることもあります。地域によっては雨かもしれません。
>>184 静的型付けではMap<K,V>のV型の値しかデフォルト値として与えられないから
マップを引けたかどうかを返り値のみから確定させる一般的方法がない。
動的型付け言語ならば、他から参照されない軽量なインスタンスを新しく生成して
それをデフォルト値に指定するだけ。Object型とか。
静的型付け言語では、V型が新インスタンス生成可能とは限らないし、
インスタンス生成が重いと使えない。
だからJavaでは返り値のみで判定するなと警告されている。
書かれた動的型付けの解決策にしても全然「一般的方法」ではないのだが。 軽いクラスのインスタンスとしてデフォルト値を用意する方法にしても、 それはそう実装できるというだけの話であって、APIで強制できる一般的方法 ではない。このmapはkeyが無い場合はこの値を返しますよ。単なるダミーの 値ですから信用して使ったりしないで下さいね云々と個別に規約を文書化する 必要がある。規約を知らないと判別出来ない。知らずにデフォルト値をいじる バカも出る。これのどこが「一般的」? 良いところ「個別の解決策」止まりだし、似たような方法は別にJavaのMap でもMap<K, Object>とでもすれば出来る。ただvalueについて静的型付けの 恩恵を受けられなくなるから、普通はやらない。 一般的な方法というのは言語の組み込み定数としてnullとは別にundefinedを 持っているとか、keyを与えるとkeyとvalueのペアを返す関数が用意されて いるとか、keyが無いと例外を投げるとか、どういうmapであっても常に返値 だけで判別出来る方法。 「返り値のみから確定させる一般的方法」の有無というのは要するにこう いった定数や関数が用意されているか否かの問題であって、型付けが動的 静的云々は全く関係が無い。 Javaだったらgetが例外を投げるようにするとかキーバリューのエントリー を引っ張って返すようなメソッドを用意するとかすれば良いし、そういう デコレーターを書くのも簡単。 でもJava Collections Frameworkはこれらを持っていない。書こうとすれば 書けるものを何故用意しなかったか理由は知らないけれども、単に需要が 薄いと判断された事は大いに想像できる。他の言語でも持っていない例は 多いところから見ても、需要は薄そうだ。
>>190 一般というのは、任意の型Vについて適用可能な手法だということ。
広く用いられているという意味ではない。
>>190 > 似たような方法は別にJavaのMap
> でもMap<K, Object>とでもすれば出来る。
すまんが、正直、馬鹿すぎて笑えた。
・Java Collections FrameworkというAPI自体は任意のVについて返り値のみ
からkeyの有無を確定させる「一般的方法」を持たない。
持たない理由の推測は
>>190 に書いたとおり。
・ただそれを言えば動的型付けの言語だってAPIとして「一般的方法」を持た
ない言語は多い。そういう場合は手作りをする必要がある。
・Javaの場合は「APIを拡張」することで任意のVについて「一般的方法」を
導入できる。どんなアプローチがあるのかも
>>190 に書いたとおり。
・動的言語の場合は加えて「Vの値域を拡張」することで「一般的方法」を
導入することも出来る。具体的にはデフォルト値の導入。
・APIを拡張せずに「一般的方法」を導入出来る点は確かに動的型付け言語
のメリットかもしれない。ただAPIはそのままの代償として規約を新たに
導入する必要がある。バカ避けとしては、どうなんだろうね?
・Map<K,Object>は馬鹿で結構。馬鹿だから普通はやらない。
JavaもC++みたいにmap<K,V>の総称型Vのデフォルトコンストラクタを使って インスタンス生成してデフォルト値として返せたら良かったね
>>192 ジェネリクス導入前のJavaみたいなコードになりそうだな
その頃から使ってるから書けるけども、静的型には程遠かったなあ…
>>194 Apache Commons Collectionsで出来る話とは違う話かな?
デフォルト値の指定自体はDefaultedMapで、デフォルト値を生成する
コンストラクタの指定はLazyMapで出来る。
>>196 new V()が出来ればfactoryオブジェクトを用意する手間が要らなくて
良かったねってこと
そういうのは、自作ユーティリティライブラリを 作ればいいだけだから、すごく小さな問題でしかないな。
さすが冗長言語Javaのドカタやってるだけあるなw 良く訓練されてやがるww
>>197 う〜ん、確かにそれは出来ないなぁ。
替わりの策としてはファクトリを用意せずにClass<V>を渡すバージョンは
作ることが出来そうだけれども、デフォルトコンストラクタの存在確認が
実行時になってしまうのがいやんなかんじ。
せめてlambdaがあれば……
Scala対する動的型付け言語の有利な点って何かあるの?
> Javaが次のリリースでモジュールとラムダを導入しようと、 > そしてそのリリースがさらに1年遅れようと、Scalaが安定するよりも早く > 多くのJava開発者に関数型プログラミングをもたらすだろう。 > Javaに追い抜かれる前にScalaが体勢を立て直すのはもう遅すぎるかもしれない。
nilポ
>>188 出来る。Eclipseなどの外部ツールを使えば出来る。
明日の天気は雨ですが内陸部では晴れるでしょう。そんな感じ。
言語としてJavaはswitch文でのenumの網羅性は要求していない。
しかしコーディングの規約として網羅性を強制したいのであれば、それをツールで
支援することは何も妨げられないということ。
Cでもgccはswitch文でのenumの網羅性を検証するオプションがある。
switch文の網羅性をチェックしたところで、 ドカタは空のdefault枝を書いて /* おまじない */とかコメントつけるだけ。
>>208 そういうプログラマ個人に依存した話は却下します。
どんな言語を使おうが、その人がやるなら同じ事ですから。
しかし水は低きに流れる 土カッチにもマトモなのもいれば 果てしなく杜撰とか低レベルなのも
>>208 >ドカタは空のdefault枝を書いて /* おまじない */とかコメントつけるだけ。
それこそツールではじけばいいだけやん。
悪貨は良貨を駆逐する。
今のお金は、悪貨だとでもいうのか? 実際は悪貨のほうが駆逐されてるだろ。 現実見ろよ。
>>212 本当にデフォルトは処理無しな場合とどう区別する?
>>214 金貨銀貨は既に過去のもの
つまり駆逐済み
いやそんなのは分かってる上だろ、どう見ても。
理論が飛躍して言葉遊びの域に達してるだけで。
>>214 は新言語が旧言語の悪いところを潰していってるのではないかと言い、
>>216 は正直良く分からんが、
これまでの通貨の歴史を紐解けば今の言語が悪貨であることが示唆されると言ってるんじゃないのか。
まあ含みの多い言葉だしな dos/windows,x86,真性ドカタと本物グラマ、 php等例には事欠かない 逆は真ではないけど
>>218 概ねそのとおり。
悪貨は良貨を駆逐するなんてのはただのことわざで、根拠はない。
逆に良貨が悪貨を駆逐することもある。
ことわざってのは定理なんかではなく、そういうこともあるよね〜レベル。
逆の意味を持ったことわざだってある。絶対正しいことを言っているわけじゃない。
だから、「悪貨は良貨を駆逐する。」なんてことをいう人は、
正しいか間違ってるかを考えずに、思考停止しているだけの馬鹿と俺は判断する。
思考停止というよりか、悔しさが含まれてるように見えるな。 勝利したものに対して「勝ったほうが負けなんだ!」って言ってるみたいな感じw
そもそもJavaは良貨だよ ドカタの脳みそに入る言語の中では
また、勝った方が負けなんだって言ってるように聞こえたw
動的も静的も違わないだろ。 なぜならば機械的に動的 ⇒ 静的の変換が可能だからだ。 型が無限にあれば静的にできない可能性があるが、実用上ではありえない。
まあ、ドカタという言葉を使ってる時点で 勝ち組に対する僻みだからねw
問題があるとしたら自動で型を推定、識別する部分だが、そしたら明示的に型を教えられる仕組みを組み込んでおけばいい。
型を教えられる仕組み ・関数の引数に型が明記されている。 ・変数に型が明記されている。 ・オブジェクトの生成から、型をチェックしたい箇所のコードすべてで型が明記されている。 この3つがないと、型チェックはできないからね。 コードのどこかで型情報がなくなったりしたら 意味なくなっちゃうし。 結局、プロジェクトの全部の箇所にちゃんと型を明記しないといけなくなるんだけど。
頭悪くてよく分からん。 動的な型付けでしかできないメリットをコードで見せて。
ここにはきっと、スパゲッティー屋さんがいる。
232 :
デフォルトの名無しさん :2011/12/01(木) 02:07:05.00
自分はタコス屋さんだけど、何か?
"1" + 1 は "2" でないと違和感がある。 "11" や 2 だとおかしい。
動的な言語のスパゲティは 静的な言語よりキツいのは確か
>>228 > この3つがないと、型チェックはできないからね。
できます。
まあ、
>>228 は型推論を知らない、知りたくない、
見ない、見たくない、聞こえない、聞きたくない.... ヤシなんだろw
ドカタの脳みそに入る言語のリストに型推論のある言語は入ってない
>>118 ハッシュキーに 'f1' と文字列を書くことはない。
最低限定数として定義するし Java なら列挙型を使う。
>>139 キーに対する値に生の null を使う設計が脆弱。null object pattern を使う。
>>189 軽量なデフォルトコンストラクタを持たない V をリファクタリングするには
(1) V からインタフェース I を抽出する
(2) V の利用を I に置き換える
(3) I を実装するデフォルト値用のクラス N を実装する
>>238 静的型付きでなければ(キリッ
ていうからなにかと思えば、Javaのことだった、ってのが
お約束パターン過ぎてあきれるよね。
>>240 次の二つの階級の話が混じってるから同じパターンのループになってしまう。
無差別級:全ての言語で比較
ドカタ級:ドカタが使える言語で比較
だからドカタでも使える言語を明らかにした方が良い。
Javaは鉄板として、あと何があるのか。
COBOL
.netより前のVB
ドカタの定義はどこだよ。 今の流れだと「使える」のレベルによってドカタかそうでないかが分類されるってより、 言語自体とドカタを結びつけようとしていて危険だろ。
ドカタってのは、技術に投資せず今日の収入のためだけにプログラマやってる奴のことだろ 求人市場に案件のある言語は全部ドカタ言語だよ
ああ、だから今マイナーな言語でも流行って使われるようになればドカタ言語になる 技術の問題じゃない。金の問題。
ドカタの自覚症状がある人達が 自分の使える言語を書いていけば良いんじゃないの?
一方、研究者は人と同じことやってたら食えないから 常に新しいパラダイムを提唱してくる。使える使えないは二の次。 使える使えないが真の意味で実証されるのはドカタが使うようになった時で、 その時には当の研究者はとっくにトンズラして新しい研究を始めてる。 これのループ。
Javaドカタ「今マイナーな言語も流行ればドカタ言語になる(キリッ」
まあOakはドカタ言語じゃなかったし
同じことができる代わりがいくらでもいるような人達の事じゃないの? 仮にその人がいなくなっても、代わりはすぐに補充できる。 でも、代わりが利かない人ってヘッドハンティングなどで抜けたら、 代わりの補充が利かないよね。 年齢以外の要素で違いが見いだせない人がJavaには多そうってことなんだろ?
ここの人にBig-Oって何って聞いたらなんて返ってくるだろう?
空気読めてないって答えが返ってくると思う。
がんばって検索したらビッグオー記法とかいうのがでてきたよ 最初に思いついたのはショータイム
>>234 evalは目的じゃなくて手段でしょ?
なんのためにevalを使うの?
Perlで例外をトラップするために使うは答えになってないよ。
>>241 > だからドカタでも使える言語を明らかにした方が良い。
> Javaは鉄板として、あと何があるのか。
意味がわからん。
動的型付け言語と静的型付け言語の話だろ?
Java以外というのは静的型付け言語を言えばいいのか?
よく使われてる言語だと、C、C++、C#、VB.NET、Scala、 Objective-Cあたりだね。
動的型付け言語はよく使われてるといえるのは、Ruby、Perl、PHP、JavaScript、Pythonぐらいか?
ScalaやC#やC++11には(OCaml程ではなくても)型推論があるから
それらを知ってれば
>>228 のようなことは書かないと思うけど。
>>228 が特別に無知だったでFA?
>>258 お前型推論を誤解してないか?
型推論ってのは、型書くのを省略出来るだけで、
型を書いてるのと全く一緒なんだが。
型を推論できるのは、 どこかに型の情報があるから。
省略できるんだから明記しなくても良いってことだろ それとも明記って日本語を理解してないのか? > ・関数の引数に型が明記されている。 > ・変数に型が明記されている。 > ・オブジェクトの生成から、型をチェックしたい箇所のコードすべてで型が明記されている。 全部間違い
>>261 > 省略できるんだから明記しなくても良いってことだろ
よく見ると省略されてない。
一見省略されているように見えるが、遠くで明記されている。
それを見て推論しているだけ。
どこにも明記されていなければ、絶対にわかりません。
まあ、Javaには以下のようなゴミみたいな型推論しかないからねぇ。 知らないのも無理は無いよ。 Map<String, List<String>> anagrams = new HashMap<>(); // 右のダイヤモンドオペレータ内を省略可
反論するなら、どこでも明記されてない状態でも 推論する方法があるとか言うべきだろ。 反論の仕方がおかしい。
MLのHindley/Milner型推論では、一切の型注釈無しに、完全かつ健全に、 関数の「もっとも一般的な型」を推論できる事が保証されている
それは型が自由に作れない言語だから・・・
全ての関数や変数に型を明記する必要がある → プログラムのどこかで型を明記する必要がある → どこにも明記してなくても明記してるのと同じ ← いまここ
> どこにも明記してなくても明記してるのと同じ だれがそんな事言ったんだ?
>>266 MLは型は自由に作れる
MLで厳格な型推論が可能なのは、演算子多重定義やメインストリームのOO言語における
ポリモーフィズムやディスパッチの類が存在しないからだろ
端的に言うと+がintにしか定義されていないので
x + yという式を見たらMLのコンパイラはxとyがintだと推論できる
>>269 一応OCamlにはクラスやオブジェクトもあって、オブジェクトを引数に取る関数が書けるけど、
構造的部分型を採用してるから型注釈は必須じゃない(列多相が型推論される)
型推論ってのは、型を書かなくてもいいってことじゃなくて、 型の中にパラメトリックな多相があっても、 矛盾のないように型パラメータを具体化して 型の整合性を検証できるということ。 型宣言がめんどくさいから使うんじゃなくて、 より抽象度が高いコードを書くために使うんだよ。 やっぱドカタに静的型付けを使わせるのは壮大なムダでしかないなw
いつから、めんどくさいから使うって流れに勘違いしてた?
ずっと型注釈無しで型推論が可能かどうかを議論してたのにね 無知を晒したから話を変えようとしてるのかな?
>>271 ×)ドカタに静的型付けを使わせるのは壮大なムダ
○)ドカタにJava以外を使わせるのは壮大なムダ
とまあ、またつまらないドカタ罵倒の流れにするしか脳がないわけだ。
本当だよな
多少は真面目な流れだったのにドカタとか言い出した
>>271 は反省しろ
>>272-273 だーかーらー、
省略じゃなくて抽象なんだって指摘されてることに気付けよw
ほんとドカチンは頭が悪いな
型推論をする目的はひとまず置いといて、 とりあえず型推論するのに変数や関数の型宣言は必要無いってことでFAでいいな?
>>279 リテラルやコンストラクタやコンスタントの型付けは自明である、という前提ならYES
型クラスがあるか無いかで違うかな
明日はドカタは無意味なオープンソースカンファレンスなんかにいって 一日無駄に過ごすんだろうなw
え?Javaとオープンソースカンファレンスに何の関係が?
>>282 自身が、自分の住んでる世界以外を全く把握できない、という典型的なドカタ病である件
動的型付け言語は、evalや実行時型拡張を制限して
型推論を付ければ静的型付け言語にできる。
もちろん制限付きであってもJavaよりずっと簡潔なコードになる。
一方Javaには
>>263 みたいな型推論しか無いんだから、
Javaのドカタが型推論を憎む気持ちは分かるよ。
すっぱい葡萄ってやつだね。
まあ、動的型付け言語プログラマはテストを書けば 安全なプログラムを作れるのを知ってるので、 そういう制限付きの言語処理系に対する需要は少ないけどな
eval される文字列内部のカバレッジって測定できるの?
>>286 動的にし型がわからないという大きな問題が
解決できない限り、動的型付け言語に未来はないよ。
実行前から型を決めてしまうという大きな問題が 解決できない限り、静的型付け言語に未来はないよ。
静的型言語にも動的型言語にも未来はあるよ 得手不得手があるからね Javaには未来はないけど
Java以上に現在がある言語もそう無いと思うけど。
>>289 今回はJava関連の特別なイベントがあるのかと思った
いくら暇でもそんな下らないセッション聴きに福岡まで行かないだろ
まあ行くならJavaOne Tokyo 2012だよな。 日時は2012年の4月4日(水)〜4月5(木)の2日間だ やっぱりなにげにJavaが一番堅牢な気がするよ。 動的型付け言語とか、Javaに比べてコミュニティが小さいから 適当な意思決定によって機能が決まってる気がする。 Javaの場合はコミュニティがでかい。機能を決める際も 過去との互換性などを十分に考慮して決められる。 で言語仕様だけではなく周辺技術(ライブラリ・フレームワークなど)も 巻き込んで大プロジェクトって感じ。 動的型付け言語はね。大きいといってもやっぱり個人レベルの話。
いまだにJavaにしがみつくドカタか… 可哀想だが、自己責任だよな…
>>295 認識が甘いよ。
他の動的型付け言語で、
デスクトップアプリ作れますか?
3Dバリバリのアプリ作れますか?
組み込みアプリ作れますか?
API仕様は決まっていますか?(規格がありますか?)
そのAPI仕様に従った実装がいくつもありますか?(競争がありますか?)
ライブラリは個人が作って放置されてるようなものではなく、ちゃんと大きな所でメンテナンスされてますか?
glassfishってなに?
Rubyとか一発屋で終わったしな。
ではじめの伸びが高かっただけで
現実はこんなもんよ。
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Position
Nov 2011 Position
Nov 2010 Delta in Position Programming Language Ratings
Nov 2011 Delta
Nov 2010 Status
1 1 Java 17.874% -0.63% A
2 2 C 17.322% +0.61% A
3 3 C++ 8.084% -1.41% A
4 5 C# 7.319% +1.61% A
5 4 PHP 6.096% -1.72% A
6 8 Objective-C 5.983% +2.79% A
7 7 (Visual) Basic 5.041% -0.43% A
8 6 Python 3.617% -2.06% A
9 11 JavaScript 2.565% +0.90% A
10 9 Perl 2.078% -0.39% A
11 10 Ruby 1.502% -0.40% A
12 20 PL/SQL 1.438% +0.78% A
13 13 Lisp 1.182% +0.09% A
14 15 Pascal 0.991% +0.21% A
15 21 MATLAB 0.955% +0.32% A--
16 12 Delphi/Object Pascal 0.872% -0.77% A
17 23 ABAP 0.847% +0.25% A--
18 22 Lua 0.635% +0.02% A-
19 16 Ada 0.622% -0.07% B
20 19 RPG (OS/400) 0.620% -0.04% B
>>300 えと、頑張れば出来ますって話をしたいのかな?
tiobeって、コピペドカタランキングだろw
>301 ここってなんでいつも C と C++ を分けて集計してるんだろうね
>>304 C/C++なものを両方にカウントするためだろ?
えっ?
>>298 >デスクトップアプリ作れますか?
>3Dバリバリのアプリ作れますか?
>組み込みアプリ作れますか?
>API仕様は決まっていますか?(規格がありますか?)
>そのAPI仕様に従った実装がいくつもありますか?(競争がありますか?)
>ライブラリは個人が作って放置されてるようなものではなく、ちゃんと大きな所でメンテナンスされてますか?
という質問よりも「1ヶ月でリリースできますか?」という質問に重きがおかれる時代だということでは。
もちろん用途によるわけだが、「何よりも開発期間の短さ」が求められる仕事の割合は高まっていると感じる。
>>301 そこに静的型付け言語と、動的型付け言語のシェアのグラフがでてるけど、
静的型付け言語の方が、2倍以上使われてるのは当たり前として、
railsが登場した2004年に一気に動的型付け言語が普及したけど、
2008年ぐらいを境に静的型付け言語に戻ってきてるんだよな。
その理由は動的型付け言語が素晴らしかったのではなく、
フレームワークがシンプルだったのと、冗長ではない書き方ができただけで
それらが、静的型付け言語にも搭載されるようになったから
なんだ、静的型付け言語でいいんじゃねと見直されるようになったからだろう。
あと動的型付け言語がやっぱりそこまでのメリットがないよねって
気付き始めたんだろう。
検索ベースのランキングだから、「C/C++について」と書いてあるページはCとC++の両方にカウントされるだろうな。
>>307 railsならブログが10分でできます。
ただし、3分クッキングよろしく
予め用意されたものを、なんども練習して
できます。
え? オリジナルのもの?
そんなものが10分なんかで出来るわけがないじゃないですかw
動的型付け言語を使ったって、短期間でリリースできることはないんだよ。
そこのグラフ、JavaとC++に統計的に有為なレベルで下降トレンドがあって笑えない
TIOBEが言語の将来性をあらわすなんていう馬鹿な解釈している阿呆なんて この世に存在しているのか!?
>>311 動的型付け言語のエース
PHPのおかげですね。
>>312 現在のデータを出してるだけなのに、
なんで将来の予測だと思っちゃったの?w
データはデータとして ちゃんと受け止めなきゃあかんよ
Objective-CはC互換の部分は静的型付けだけど、 オブジェクトシステムは動的型付けですよ
>>317 C# は Windows アプリ開発という一定のパイの中で移行しているだけ。
Objective-C は iphone アプリ開発のため。
そのケースはどちらも、ターゲットによって開発言語がほぼ決まってしまう例。
言語の長所短所は二の次だと思う。
> そのケースはどちらも、ターゲットによって開発言語がほぼ決まってしまう例。 > 言語の長所短所は二の次だと思う。 その理屈で言えばJavaScriptも同じかな。 動的型付け言語げ唯一伸びてる言語
なるほど。モバイルとウェブの普及により 使える言語が限定されて、その結果他の言語のシャアが下がっただけで、 やっぱりJavaは安定していると見なせるな。 極端に下がったものは、下がったと判断するべきだろうけど。 Rubyとかw
その理屈ならCも下がってないとおかしい
>>322 C言語は組み込みに強いからモバイルとかにも搭載されてるよ。
Oracleが買収で手に入れたプロダクト = オワコン
OpenJDKはオープンソース。 OpenJDKはOracleが買ってない。 OracleはJava SE 7をOpenJDKをベースに切り替えた ここらへんは常識なんで知っといてね。
>>316 Railsバブルがあって
やっとそれがはじけて
元の状態に落ち着いた感じ屋根
ORACLEの新しいCMのコピー思いついた オラクルおわってる
OpenOfficeとLibreOfficeの一件はマジ終わってるとオモタ 何がしたいのかと
OpenOffice → LiberaOfficeにフォーク Java → OpenJDKメインに変更 MySQL → ? VirtualBox → ? GlassFish → ? NetBeans → ?
>>322 C言語は動的型付け言語でライブラリを作ったが遅いから、
C言語で書きなおすかって用途に使われてるんだよw
まあ C で書いて各言語のバインディングを提供するというのは定石ですね。
>>329 こうしてみるとオラクルが片っ端からOSS敵対買収しまくってるのがわかるな
ドカタにとって動的言語=ルビーwってのはよくわかった
×動的言語 ○動的型付け言語 なんで、馬鹿は 間違えるんだろうな? 動的型付け言語と言えばPHPなのかな。 あれも馬鹿用言語らしいが。
こいつが一番間違えてるな
ほほうそれで?
>>334 動的言語しらないの?
動的型付き言語とは別の概念だよ?
>>337 今あるほとんどの言語(例 Java)は
動的言語だよ。
で?動的言語と動的型の関係も解らないかほどのドカチンなのか?
まさか、リフレクションがあれば動的言語だと思ってる? ぷ…
>>341 は? インターフェースとかの話だろ。
インターフェースを使っていると
どの具象クラスのメソッドが呼び出されるかは、
実行時にならないと決まらない。
その理屈だとC言語すら動的言語だwww 関数へのポインタがあるからな
>>344 そのとおりだけど?
静的言語っていうのはFortranやBASICやCOBOLみたいなもの。
クスクス…
まさかBASICに動的性がないと思ってる素人がいるとは...
このあなりで多義語ないしはコンテキスト依存だと気づけるよね それに気づかず議論したがる奴はバカなの?死ぬの?
どんな言語にも静的性はあるし どんな言語にも動的性もある その上でその言語が何を指向しているかが問題だろうに Cを動的言語だとか、なんだよその中二病はw
動的言語と動的型付け言語の違いは何ですか?
あれでしょ・・・・ 俺が動的言語と決めれば 動的なのだ 俺が静的言語と決めれば、静的なのだ という井の中の蛙君くらいしかここにいないってことなんだろ?
>>354 まるで鏡に映した自分を見るようだと。納得。
これがリフレクションか(失敬)。
そんなことはどうでもいい。 動的言語と動的型付け言語の違いが分かってれば。
動的言語がどんなもんかもわからんといってるのに、違いがわかるって...。 論理的思考力のない人なのか?
動的言語がどんなもんかもわからんのは誰?
君がわかっているというなら、説明してくれ。
360 :
デフォルトの名無しさん :2011/12/04(日) 19:52:05.21
monoってかなりLinuxで使われてるよな。 ソニーもゲーム機にC#使うし。
国語審議会の議事録見ると動的言語の範疇にVBA、VBSは入るのにVB.NETは 入っていないんだよね。 ってことは言語の特性だけで決まらないってことじゃないかな。
国語審議会の議事録でVBAとか出たらしいぜwwww 頭大丈夫か?
動的言語かはおいといて、VBSには型がないから 動的型付け言語っていうのは正しいな。
どこの国の話ともわからないのに 人格攻撃にもっていくのはイクナイ
そりゃ書いてないのだからわからないわなw じゃあ書けと。
>>364 アナタハニホンゴノフジユウナハントウシュッシンシャデスカ?
>>363 変数にゃ型ないけど、値にはあるよ
まあ本当の意味で型がない言語って汗(とマシン語)くらいのものだとは思うけど
>>367 > 変数にゃ型ないけど、値にはあるよ
それを動的型付け言語っていうんだが。
動的に型が決まるんだよ。値によって。
|....,,__ |_::;; ~"'ヽ | //^''ヽ,,) | i⌒" | ∀`) < 誰もいない きのこるならいまのうち |⊂ | ノ _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" |( ´∀`) < きのこ のこーのこ げんきのこ ♪ |(ノ |つ | | ⊂ _ ノ ""U _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" (´∀` )| < エリンギ まいたけ ブナシメジ ♪ ⊂| (ノ | | | ヽ _ ⊃ .U"" | | ミ | ミ サッ! | ミ |
昔は自己書き換えで動く アセンブラプログラムや BASICもあったからな 不正にシステムすら書き換え可能なwinは 超動的システムだ
>>367 アセンブリ言語にも型はあるぞ。
レジスタも直値もアドレッシングも間接アドレッシングも型だらけだ。
本当の型なしなんて、 素朴集合論とか型なしラムダ計算とかチューリングマシンみたいに 抽象度が高いものだろうな。 抽象度が低いものほど型が必要になる。
リストで違いを示すと: 静的型付け言語: リスト内には事前に決めた型のものだけしか扱えない。 動的型付け言語: リスト内にはどんな型のものでも扱える。 [1,"22",3 ...] というのは、動的ならエラーもでないが、静的はデータ型が Unionで数字と文字を扱う型を指定してない限りエラーがでる。 リストの扱いも違って来る。 動的の場合は、 define foo list : if isList(list,String) == True : ... else isList(list,Integer) == True : ... みたいな分け方だけど、事前に決まってるから、関数での型チェックを必要と しない。(ただし、ユニオンで型を決めたときは動的と同じ事をするはめにな る。) 簡単に言えば、型チェックは静的の場合コンパイル時のエラーで任せられるけ ど、動的は型チェックを行う場所(関数)を熟考して決めていく必要がある。 (すべての関数で型チェックをする必要も無いので。)当然、最適化も手動に なってくるから、こちらも静的よりは頭を使う。(頭を使う箇所が違うと言ったほ うが適切かも。) 大規模で使えないとしたら、ある一定の頭が必要になってくるということからかも
型チェックが関数で行うから面倒だ感じるかもしれないけど、 奇数と偶数を分けて考える程度の面倒さだからさほど問題はない。 型チェックもデータの奇数偶数も データの仕分けという意味では同じなので。
>>374 訂正
事前に決まってるから→静的は事前に決まってるから
>>374 下手くそが書く動的型付け言語のコードは酷い、
と言うことだな。
つうかお前さ、動的型付け言語まともに使ったことないだろ…
型で分岐せずに済ませるのが動的型付けのコードだよ。
>>377 そうかなあ
(define (tree-map f tree)
(cond ((null? tree) tree)
((not (pair? tree)) (f tree))
(else (cons (tree-map f (car tree)) (tree-map f (cdr tree))))))
こんな感じで分岐させるのが普通なイメージだけど
Pythonの標準ライブラリのディレクトリでgrep -r isinstaceしてごらんよ
Haskellあたりだとパターンマッチだから同じ分岐でもcondよりは綺麗
多分
>>377 はダックタイピングだとかメタプログラミング的に書くのが云々と
エヘン顔で言いたかったのではないかと予想。
>>380 え?してるでしょ
pair? が何だと思ってるの
>>378 isinstanceで分岐するコードよりも
多態なメソッド叩いてるコードのほうが
圧倒的多数だなあ♪
現実には型で分岐するコードも*大量に*ある以上
>>377 は勇み足
>>381 nullチェックと変わらんな
おまえ、nullチェックを型で分岐とか呼ぶのか?
「多態なメソッド」という言い方からして、たぶんOOP言語しか知らないのだろう
動的言語で型で分岐がたくさんあるって言うとjQueryのコードが思い浮かぶなー
つーか、どんな型のものでも入れられるリストとか実際何に使うんだよ
>>384 リストかどうかという型チェックをnullチェックと変わらんな、ですか
Scheme読めないんならそう言えばいいのに
>>387 Lispではtreeのようなものをconsで表現するケースは非常にありがち
その場合、当然複数の型が混在することになる
stringかnumかならともかく、listとpairとnilは同類だよ おまえpythonどころかschemeも書けねーのか?
いや、複数の型というのは分かる。直和型はよく使う でも「何でも」となると用途があんまり無くね? あと、静的型でも型消去を使えば どんな型でもリストにぶち込むことは出来る
多態メソッドよりisinstance使え とか書いてあるpythonのテキストがあったら 是非とも晒してみろw
それらは用途が違うので、そう書いてあったらその本はバカだろうな 用途が違うのに、常に多態メソッドを用いるべきだという主張もバカだが (ついでにOOPLのことしか考えていない点で視野狭窄)
>>391 意味が分からん……よく読めよ
「pairかそうでないか」のテストをしているだろ
pairとpairでないもの(atom)は同類じゃない
atomとlistを同一視しているバカがいるな
>>377 >型で分岐せずに済ませるのが動的型付けのコードだよ。
とりあえずこのサンプルを出してみて比較すると良いんじゃないのかな。
一応言っておくが、 pair?はconsや、consからなるlistのようなものに対しては真を返し、 atomに対しては偽を返すテストね
>>378 雑多なものを入れるようなリストって
jsonとかもそうだろ?あんな感じをイメージすればいいよ。
>>377 残念だけど、動的中心にやってるよ。lispも含めてね。
>>380 型に分けてるけど、SICPやlisp経験がないとわかりにくいかも。
Python の教科書ってwithを余り使いたがらない本が多いという印象があるけど、なんでなんだろうね?あれほど便利なのはないのに、dive into python(3)
はwithをfile openの時に使うように書いてるのは見たけどlutzなんてwith知
らんみたいだし。最新版はwithの使い方扱ってるかどうかしらんけど。
common lispにあるwith-file-openみたいなwith系マクロを意識したものなのにね。
unionしたデータを扱う静的言語ならHaskellは綺麗にやってるよね。 condやifを書かなくても多態性を使えるからなんだろうけど。 lisp系でもClojureなら、そうゆうやり方もできるけど。
>>401 Pythonのwith構文は機能的にはより狭く制限された
Rubyのブロックつきメソッドという感じだね
用途がRubyのブロックつきメソッドより限定される(ほぼRAII専用という感じで
iteratorみたいなものは作れない)のと、単純に後発なのでRubyのものほど
多用されてない感じ
(Pythonのwithは2.5以降で使えるけど2.5だと__future__からimportしないといけない)
でも便利は便利なので、わりと普通に使われてもいると思う
>>404 flatこそ多態で処理すべき典型例だろ
ちなみに静的型関数型言語は12年前から使ってるw
静的脳の恐怖だな わっはっは
>>407 そうだろ?普通は代数データ型へのパターンマッチングとして処理するし、
実際、
>>378 は代数データ型に直訳できるようなコードだ。
単にパターンマッチングではなく条件分岐しているというだけの違いでしかない。
それを
>>374 のように「型で分岐する必要がある」とか言い出す馬鹿がいるから
そこを笑われてるんじゃねーの?
動的型付言語を使っているなら、isinstanceのように型を決め打ちするコードは
できるだけ排除する習慣が身に付いているはずだ。
それすらできていない
>>377 が動的言語やってるとか言っても、何の説得力もない。
はっきり言ってJavaドカタが動的型付言語を習って2日目に書いてみたコードに見える。
isinstanceの羅列とか、書いてて恥ずかしくなかったのか?
>>401
おいおい パターンマッチが良くて型で分岐するのはダメって意味不明 直和型のパターンマッチなんてまさに型を決め打ちするコードじゃねーか 自分で何言ってるのかわかってんのか?
>>410 はあ?型を決め打ちしない上でUnitTestするのが当然だろ?おまえ馬鹿か?
>>411 ああ、おまえ、直和型の代数データ型がまるでわかってないな。
静的型付関数型もわかってないし動的型付言語もシロート丸出し。
おまえ、何ができるの?
まさかinstanceof乱発して「これが動的型言語だッ!」とか言ってる香具師がいるのか? instanceofはジャバでもパイソンでもバッドプラクティスだろJK
415 :
デフォルトの名無しさん :2011/12/07(水) 04:09:49.69
というかライブラリを書くときとかinstanceof使わないでどうやってバカよけするの?
それがわからないなら動的型言語でライブラリ公開しないほうがいい マジで
isinstanceを使わない378と404のPythonコードはまだですか?
>>416 静的型付け言語しか使っていない自分も興味がある。
問題はこっちだよな。
>与えられたオブジェクトが「整数とリストだけでできている」かどうかをチェックしてTrueかFalseを返す関数を作れ。
「任意の型 (Java なら Object 型) の値を受け取って、それが特定の型を持つか否かを判定する」関数を作る
というのが問題の本質だと思われ。
静的型付け言語は、まさにこの部分をコンパイラが保証するから instanceof が不要になる。
静的型のない言語で instanceof を使わずにどう書くのか興味がある。
訂正。これはちょっと誤解を与えそうだ。 >静的型付け言語は、まさにこの部分をコンパイラが保証するから instanceof が不要になる。 静的型付け言語は、最初からこんな設計にしないということ。 >任意の型 (Java なら Object 型) の値を受け取って 期待される型の値しか受け取らないようにメソッドを設計し、 そのメソッドに期待される型の値が渡されていることはコンパイラが保証する。
>>413 厳密には代数データ型でのパターンマッチの場合
「型」としては一つで、値やコンストラクタによって分岐するので、
確かに「型で分岐する」のと同じではない
しかし、それを代数データ型の無いLispで同等のコードを翻訳すると
まさに「型で分岐する」
>>378 のようなコードになるわけで、
>>378 を認めて
>>374 を認めないというのなら、
>>408 の主張は全く意味不明
>>378 とisinstanceの一体何が違うんだ?
C++やJavaには関数型のパターンマッチとまったく同じものはないけど オーバーロードという静的ディスパッチはあるわな(C++にはテンプレートもある) 多くの動的型言語には同じ機構はない(そもそも同名の関数を多重定義できない)ので 似たことをやりたければ自分で手動でディスパッチすることになるんじゃないのか? それこそ実行時型や引数の個数によって
Smalltalkならflat関数なんて Object>>flatDo: flatDo: aBlock aBlock value: self Collection>>flatDo: flatDo: aBlock self do:[:elem|elem flatDo: aBlock] だな。 (elem isKindOf: Collection) ifTrue: [...]なんて馬鹿なコード書いたら 世界中のSmalltalkerに大笑いされるw
374だが、読解力と論理展開に呆れてるから今後スルーするよ。でも不愉快だよね。 374に注意書きで: 動的は型チェックを行う場所(関数)を熟考して決めていく必要がある。 (すべての関数で型チェックをする必要も無いので。)当然、最適化も手動に なってくるから、こちらも静的よりは頭を使う。 -- と書いてるのにな。静的は静的で頭を使うから 静的よりか〜というのは撤回 しておくよ。HaskellとLispは熟考が必要な言語だし。
>>424 他人にとやかく言う前にヘッポコなコード書いた自分を責めろよ
>>426 へっぽこと思うならどうぞご自由に。口だけの人の意見なんてどうでもいいですから。
では失礼。
SICPの例も出てるけどLispのコードでは当たり前に出てくるパターンだわな なんか一人がんばってる人いるみたいだけど
>>374 isinstanceの是非は横に置いといて、
あなたのコードが突っ込み所満載なのは事実だよ。
宣言部とか==Trueとか。
SICP読んだなら、せめてtype discriminationとpattern matchingとconditional executionの区別ぐらいはつくようになれよw
>>430 確かによくわからんコードだ
defineで関数を定義する動的型付け言語で一番メジャーなのってSchemeか?
でもどう見てもSchemeのコードではないしな
まあただの例ということなんだろうけど
>>430 擬似コードをかいてるだけだから。突っ込みどころがあるなら、
貴方が良いと思うコードを示すといいんですよ。じゃあ見せておくれ。
>>429 も触れてるけど、あのコードはListの中に、いろんな型をいれる
のが普通のLispのものからだよ。
もし、Listの中に1つの型しかないようなデータならばあのような
形にはしないだろうが、いろんな物が入ってる場合は、柔軟に対処する
方法かな。
ここではオブジェクト指向や多態性のことは擬似コードでは想定してないよ。
>>431 単に言語のレベルで直和型やパターンマッチを提供しないLispでそれと同じことを
やろうと思ったら実行時の条件分岐になるって話じゃねーのか?
ADTを使った次の静的型のコードは良くて、 hasattrで分岐してる動的型のコードがダメな理由は何? (* OCaml *) type 'a t = Leaf of 'a | Node of 'a t list let rec flatten x xs = match x with Leaf x -> x :: xs | Node x -> List.fold_right flatten x xs let flatten x = flatten x [] # Python def flatten(x): if hasattr(x, '__iter__'): return reduce(lambda a,b: a + flatten(b), x, []) else: return [x]
Javaでinstanceofが悪なのは依存が発生するからであって、 ダウンキャストと同じで必要なら使うよ。 つか普通に使えよ。なんで問題を難しくするんだよ。
まあjavaコードなんてどのみち依存性ガチガチのクラス直接参照決め打ちコードだらけだからな、 ちっとぐらいisinstance減らしても意味ないね
多態による分岐が難しいって人は 素直にinstanceofを使えばいいよ
hasattrでの分岐禁止なんてアホがいるのか?
RubyとPythonやってるけど、確かにisinstance()やis_a?()は滅多に使わんね 静的で型で縛りを入れてるコードは 動的では全くアプローチの違うコードになる気がする 何か書き換えてみたいなあ、静的での例ある?
どうして使わないかという以前に、Lisp的なデータの中に雑多なものを いれるというものを他では余りやらないからだろう? RもPも一つのリストの中にいろんな型のデータは含めることはできるがね。 sympyみたいな数式処理関連のライブラリなら"isほにゃらら"は使っている ね。isinstanceも当然含む。 細かな表現力が要求されない限り、雑多な型のデータを入れるリストって 最適化にも悪いからやらんもんな。
R とか P とかで関数の引数が int か int のリストかで処理が別れるのってあるよね あれはやっぱり関数の中で引数を isinstance で調べてるんだよね
朝日新聞は一時期300人のネット工作員をかかえ、工作していた。
捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。
>>866 14時以降に何が起きたんだ
>>866 Domain Information: [ドメイン情報]
a. [ドメイン名] ASAHI-NP.CO.JP
e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ
f. [組織名] 株式会社 朝日新聞社
これが規制されたからじゃねw
−「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」−
これはおそらく週刊誌さえ書けない。
「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ
(defun flatten (lst) (if (atom lst) (list lst) (mapcan #'flatten lst))) (defun number-or-list-p (object) (or (numberp object) (null object) (and (listp object) (not (member-if-not #'number-or-list-p object))))) (defun number-or-list-p2 (object) (not (member-if-not #'numberp (flatten object))))
Twitterの中の人は、Rubyで書いてるコードは大きくなるうちにkind_ofだらけになってやってられないから、Scalaに移行したって言ってたな。
Lispはまあ別として、動的型付けOOPでisinstanceやis_a?使うのは ダックタイピングの良さを消してる気がするわ hasattrやrespond_to?を使って構造的部分型で分岐するのは良いけど
447 :
デフォルトの名無しさん :2011/12/08(木) 09:48:01.64
つまり、Twitterみたいな大規模システムじゃ動的な型付けの言語は不向きってことなんだろうな。
ドカチン集めたらkind_ofだらけだろうな それを動的型付けの欠点と言うのはアサッテだが
twitterは技術力がある方の会社だと思ってたんだがちゃうの? もっとも動的言語はMT車みたいなもんだからな。
>>450 技術力の問題ってより、大規模開発の特性ってことじゃないの
amazonのコードベースも糞の山みたいに言われてたと思う
現実に世界規模のサービスを動かしている人たちの言うことだから、少なくとも
2chの名無しの言うことよりは説得力がある
Amazonのコードベースが糞の山と言ったSteve Yeggeは JavaもScalaもこき下ろしてたけどな
どこぞの会社が何々したとか、誰かが言ってたとか そういう話は嬉々として語るのな。 技術力無い奴にありがちだけど。
あるある()
>>450 うんそれはわかってるよ。
このスレのタイトルの真偽がわかりつつあるね。
amazonのC++のゴミコードの山ってはなしあったな。
オブジェクト指向だけはなぁ。。。。 スパゲティー屋さん多いからな。
関数型のコードのほうが好きっ☆(てへ)
という事で、 動的→カタ・クラスチェックの山 OOP→スパゲティ 残ったのは、OcamlやF#みたいなの?となりそうに思うけど、これらが 大規模で使われてるときかない理由はいかに?
大規模では使いづらいから
いいものが流行るとは限らないから
Haskellが使われないのはわからなくはないけどな。あれは純血主義だし Scalaも仕様について糞っかすに言われるのもわからなくもない。 日本語でも英語でもScala批判は炎上を招くらしくブログでは余り触れたがらない人が多いかも。
カルトつーか、あのやたら攻撃的で排外的な雰囲気がダメ 関わり合いになりたくない ScalaからJavaに戻した途端のあの叩きようを見てマジ引いたわ
という事で、ドカタに書かせるなら 動的→カタ・クラスチェックの山 OOP→スパゲティ 残ったのは、OcamlやF#みたいなの?となりそうに思うけど、これらが 大規模で使われてるときかない理由はいかに?
でも連中、 関数型は子供にも簡単に書けるようになる 難しく思えるのは命令型に洗脳されているだけ とか言ってるぞw
>>465 ドカタとは何かという問題だよ。
OCaml などをわざわざ勉強するような向上心?のあるやつはドカタではないとか、
F# を使えるやつはドカタではないとか。
何人のプログラマをプロジェクトに従事させるか知らないけれど、
経験者が集まらないか集めても高いとかじゃないかと。
>>462 英語のメーリングリストとか、フォーラムは別にそんな感じは無くて、どっちかと言うと「事実が勝つ」って感じだけどな。
排外的って例えばどこ?
>>466 ただ向上心という問題だけだろうか?名古屋みたいな土地なら岡村は
増えそうだが。周りにおらんだろ?
関数型の知識なんて木構造に対するmapとfilterが書けるくらいで十分
YO! YO! キミがYO!
472 :
デフォルトの名無しさん :2011/12/09(金) 00:20:40.43
C#でDynamicJSONを使ってみて、動的も静的も偏りすぎ、大事なのはバランス感覚だと悟った
でも動的型付け言語だと、バランスを取ること つまり静的と動的を両方使うことができないんだよな。
>>422 呼ぶメソッド名を変更すりゃいいだけの話
動的型なら組んでる時は常に型を意識する羽目になるから、 「ミスするやつはドカタ(キリ」とか思ってる馬鹿でもなきゃ、 堅牢性が必要な部分の界面では素直にis、has使うと思うんだけど。
Cだって静的型付けだけど ポインタにぬるぽが来たら問題起こすだろ そのためにポインタを引数にとる関数の全部に ぬるぽチェック入れてたらオーバーヘッドだらけになるからやらない 動的型付けで引数チェックいちいちしないのもそれと同じ
>>477 「全部」には入れないまでも、堅牢性が必要な場面の界面ではやる必要がある、
ということで、
>>476 の言っていることと別に矛盾はしないのでは
はやい話がユーザプログラムが変なポインタ渡したぐらいでkernelが
パニクったら困るみたいな
普通に考えれば界面が限定されていればチェックが必要なコードも
限定されるはずだけれども
twitterで型チェックだらけ、とかいうのは、要は界面の面積がものすごく大きいって
ことだろう
kernelの例でいうと本来の意味での界面はシステムコールになるけれども
多数の開発者で分担して作っている大規模システムでは、他の開発者がある意味で
信用できずに、システム内部で他の奴が作ってる部分との間にも
(バグと戦うために)結局界面というものが必要になってくる
twitterの話というのは、そういうことかと思った
>>475 オーバーロードってメソッド名を変更する手間を省くくらいの意味しか無い機能だと思ってるが違うのか
Cでnullチェックしないことが多いのは、JavaやC#みたいな言語と違って そんなことをやる意味がほとんどないからだろう ポインタは32bitなり64bitなりのメモリ空間全体を指し得るから ランダムに適当なポインタを与えられた場合、それは読み込みや書き込み 不能なページにあるかもしれないし、できたとしてもスタックのリターンアドレスを 書き換えたりヒープの管理情報をブチ壊したりしてしまうような位置かもしれない なので、Cで引数として与えられたポインタが単にぬるぽかどうか確認するだけでは 屁の役にもたたず、何の意味もない
481 :
477 :2011/12/09(金) 03:30:21.67
>>478 別に矛盾するとは言ってないし
全部にチェック入れないとも言ってないのに
482 :
デフォルトの名無しさん :2011/12/09(金) 03:30:30.22
>>478 なのでinstanceofの類を使わずに動的型付けの言語でどうやってバカよけをする
のかを以前ここで尋ねるも返答がなかった件。
>>478 >twitterで型チェックだらけ、とかいうのは、要は界面の面積がものすごく大きいって
>ことだろう
>kernelの例でいうと本来の意味での界面はシステムコールになるけれども
>多数の開発者で分担して作っている大規模システムでは、他の開発者がある意味で
>信用できずに、システム内部で他の奴が作ってる部分との間にも
>(バグと戦うために)結局界面というものが必要になってくる
>twitterの話というのは、そういうことかと思った
要するにtwitterの設計思想がまずいって話だな
Rubyだからそうなったのか
それに気付いてScalaにしたのかどうかとは別次元の話
>>482 おまえの質問が馬鹿避けに引っ掛かったことに気付け馬鹿
>>473 両方を満たせないのは静的型付け言語でしょ。
動的型付け言語は型注釈でコンパイル時検査も実行時検査も出来る。
でも静的型付け言語ではヘテロなオブジェクトを作れない。
488 :
デフォルトの名無しさん :2011/12/09(金) 06:29:10.94
〜もできる、〜もできる、と並べたてても、たった一つの「しないこともできる」が すべてを台無しにするパターンじゃないのかな。 まあたった一つじゃないんだけども。
ドカタに自由などいらない
動的型付けの言語はプログラマ性善説に頭からどっぷり漬かって安穏としている。 静的型付けの言語はプログラマ性悪説に凝り固まって奪える限りの自由を奪う。 規模が大きくなって色々な人が仕事に関与するようになると確かに性悪説に立った 方が無難。
>>469 FizzBuzzすら満足に書けない土方が多いのに……
関数型が普及しないわけだ
自分たちの技術が受けられない理由を世の中のせいにするのはどんな凡庸な 人間にも出来ること。 それを自らの問題ととらえて打開策を模索するのがより生産的な姿勢。 今の関数型言語が普及しない事を嘆いているヒマがあれば土方でも使える 関数型言語の設計でも考えれば良いのにね。 動的型は土方には使えないとか宣っている連中も似たようなものだ。
>>480 0/1 でしか考えられない、典型的な馬鹿乙。
それは精神的バックトラックが継続を襲ってるんだよ。
>>487 型注釈でもいいし、多態で分岐してもいいし、例外捕まえてもいいし、、、
むしろ1つも思い付かないほうが不思議だ
>>491 思い込みで話してませんか? ほんとにいるんだろうか?
現場でFizzBuzz書けない奴って。
馬鹿はいる もちろん全員じゃない
動的型付けの弱点はインテリセンス等の開発サポートツールの作成のしようが無い所だろうな。 性悪とか性善とか正直どうでもいいし気にしないけれど 重機あるのにノミとトンカチでトンネル掘るような作業をするのには正直耐えられない。
引数の省略もインテリセンスにはきついんじゃないのか C++は性的暴行
開発サポートツールの作成のしようが無い あるいは物凄く困難になって実質存在しないか不完全な言語も嫌い 動的型付けも嫌いだけれどincludeやC言語系defineなんかは最悪だから全滅して欲しい
>>499 きついだろうけど、引数の省略ってあまり使わないから。
ちなみに、
>>498 は単なる IDE 依存症の馬鹿。
>>499 引数省略は障害にならないようです、C#は見事に問題なし。
インテリセンス以外にも、リファクタリングツールやテストツールも型無しは地獄だね。
いまさらIDE等を使わないで作る奴は頭弱過ぎとしか思えないけどな 3秒で済む事一週間かけてやっているに違いない
IDE 依存症と書かれたら、脊髄反射で IDE 使ってないとか、 こういうアホテリセンスは一生直らないんだろうな。(w
多すぎるんだよ、IDE使わない俺カッコイー系の爺さん、仕事の邪魔だから会社やめてくれ お前の所で何時もスケジュールが滞っているんだよ
で、IDEの機能の多くは動的型付け言語が発祥だね、 っていつもの話にループするわけだ。 ドカチンは進歩しねえなw
組み込み用のIDEとか糞すぎて禿丸使わないといけないんだぜ
筋肉モリモリ鉱夫の蒸気機関掘削機に負けない自慢だな バカバカしい自慢話だ
510 :
デフォルトの名無しさん :2011/12/09(金) 13:02:49.88
COBOLやFlex/as3プログラマーが定時退社で月給150万円もらってるという事実すら知らず、 Flashはオワコン、Webサイコー、Javaサイコー、Rubyサイコー、動的だ、静的だ、 とか言ってるアホが多い まあアホだからこそ中卒土方以下の月収40万円無保障使い捨てでもこき使えるんだが そんなことに頭つかってるからドカタなんだよw
____ ┌──────────┐ //´ __,,>、 | ::::::::::| /::/ / ̄:::::::::::::::\ └┬────────┬┘ /::::l/::::::::::::::::::::::::::::::::l. | -‐-レノ ノ_ ::::| l:::::::::::/l/lノノ/_イ:::::l | イ゚テ .ピト` ::| l:::::::::/ rtテ、 .ィtq l::::::| | '" .,j '" ::| |::lヘ!j ´ ,j !;:::/ | r‐-, ::::| レリー 、 ,...., lノ/ |  ̄ :::::| `ヽ、lヽ 、  ̄ / ┤ ::::::├ヽ , -‐-、_r┴─'ー‐チト この人 土管です /| ::::::| ´`ヽ / ヽ ̄`ー-‐'´`''''⌒ヽ / | ::::::| \ _r‐、-、-、r, 、 ', | ::::::| ,. -‐ゝ/// 〉 〉 〉 〉 〉 ! ', | ::::::| / 人〈〈〈〈 ' ' ' /っ l l | ::::::|/ / ```´-ァ‐'''" / l \_| ::::::├ヘ l // / _ ィノ ┤ ::::::| `ーヽ、_ノ´l、______/lニ二」 _/| ::::::| |_ ( ( ) )_〕| l
動的型付けでも型注釈のある言語はそれを大事なところで大いに使ってもらえば 良いと思うのだけれども、それでも型消去されたリストやmapしか持っていない ようであれば片手落ちだと思う。
>>514 人権団体によって使用禁止にされた表現を含んでいます。
>>507 IDE自体が現在でも、動的機能の塊として動いてるからなあ。
>>495 >型注釈でもいいし
その注釈を静的にコード検証するために使うのか実行時に型チェックするために
使うのかどちらか知らないけど、後者だったら結局内部的にはinstanceofの類を
使って判定されるじゃん。表に見えないだけで単なるシンタックスシュガー。
>多態で分岐してもいいし
そりゃ想定内のクラスのインスタンスだけがやってくるという仮定の上でのみ
通用する話。バカよけになってない。
>例外捕まえてもいいし、、、
例外発生する処理が破壊的な処理だったらどうするんだ。
カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。
これですむのであればとっとと使って次の作業に進んだ方が良い。
バカよけも糞よけもどうでもいいが、あまりにも程度が落ちたら、 多くの人が引いてROMるだけのこと。要は相手をするのが時間の無駄ってこと。
520 :
デフォルトの名無しさん :2011/12/09(金) 16:11:40.64
>>518 またまたw
答えを持ち合わせていないからってROMらないでくださいよw
>>517 馬鹿だなあ。
通常のif文とinstanceofで判定したら、それこそIDEの支援が出来ないだろ。
特別な構文やキーワードを使うから、
自動的に削除や回復が出来るんじゃないか。
IDEの設定に応じてコンパイル時のエラーレベルや
実行時の検査やログを変更出来るんじゃないか。
シンタックスシュガーを笑うものはシンタックスに泣くんだよw
>>517 多態では想定した型しか対処出来ない?
お前は馬鹿か?
objectで多態すればいいだけだろ。
>>517 > 例外発生する処理が破壊的な処理だったらどうするんだ。
>
> カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。
破壊的な処理が前提なら、破壊的な処理の途中で得られた値へのinstanceofでま同じだろ馬鹿。
馬鹿避けなんて簡単だ、お前を配員しなければいい。
518でどれだけ釣れるかと思ったが二人か。この二人って 図星だったんだろうな。気の毒。 ということで程度が低いと思った"イデ"の話は別の所でやってくれ。
>>521 だから「後者なら」と限定をつけているのにその辺りは読まないんだね。
前者の話なら異存はないよ。型注釈を利用してIDEが的確にコードを理解して
色々と支援してくれるんだね。それは便利だよね。
静的型付けの言語ではごく普通に享受していたこのメリットが動的型付けの
言語でも取り入れられるようになったという事で大変めでたい。
いや実にめでたい。
負けたら「釣りだったんだよ!」でOK。 ここ試験に出るからなっ!
>>522 多態が出来るのと多態がバカ避けになるのかは別問題。
動的型付けの言語での多態の利用がバカ避けになるのであればその例を書いてよ。
多態だけで想定していない型の入力をちゃんとはじいてくれる様を実演してみて。
>>523 破壊的な処理ならその処理を呼び出す前に値の検証をするのが当然。
で、その検証はどうやるのさ。
規約で特定の型を要求しているようなAPIを呼び出す場合とか。
ここを見ていればバカ避けいっている奴が低能である事は明白だけどな
>>528 すべてがそうかわからないけど、一部は明らかに視野が狭い人が言ってるよね。
3日ぶり位にここを覗くと、今の議論の発端が何なのか分からんな。 動的言語はinstanceofを使わないとダメだよね →instanceofで判定なんて泥臭くてアホだろ。普通○○でやる →それは型の判定自体を行っているという点でinstanceofと同じ。 さぁ型の判定をしないで、予期せぬ型が渡ってくることをどう防ぐんだよオラオラ って流れなのか?
>>527 は「破壊的な処理の途中で得られた値への」って書いてあるのが読めないようだ。
コードの読解力も推して知るべしだな...
>>531 そう。
彼は多態による分類とクラス階層による分類の違いが解らないからしい。
,.r.:::;;;;:ュ、 fイ´__ __ヾ {:六;;;;:ハ:;;;:カ (_ ' _^_ヽリ なんだ AKBって整形した反日朝鮮人だったのかァ ,人 l⌒l、 ブームの捏造手法が寒流と同じだけはあるな / \,ゝヽr' \ / |:| ヽ l l /´堰@ l ! |___l ノ ,イ !__,}
>532
そもそも
>>523 は誤記で意味不明になっているんだよ。これで読解力を問われても困る。
反論書くなら正しい日本語で書き直してからよろしく。
で、破壊的な処理に入る前の事前検証はどうやって行うの?
>>517 =
>>535 > 例外発生する処理が破壊的な処理だったらどうするんだ。
> カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。
つまり、517は
・非アトミックな破壊操作の途中で動的型エラーを処理したい。
・instanceofならできるが、例外処理ではできない
と主張している。
それを
>>523 は、instanceofで検査しても例外処理でハンドルしても、
検査対象とする値が非アトミック破壊的処理の途中で得られたものであれば、
いずれにせよ破壊的処理の回復処理はしなければならない、
だから動的型検査の方法と非アトミック破壊的処理は別問題、と言ってるわけだ。
なのに
>>527 は「途中で得られた」という部分を理解できなかったか、
あるいはあえて無視したか不明だが、破壊的処理の前に検査すると言っている。
結論:
>>517 =
>>535 は非アトミックな破壊的処理の本質をわかっていない。
>>536 >・非アトミックな破壊操作の途中で動的型エラーを処理したい。
主張していないって。どうやったら、
> 例外発生する処理が破壊的な処理だったらどうするんだ。
> カチッとした部分を書くのにinstanseOfの類を使うなと言うのが無理筋。
これからそんな主張を演繹できるのか、まずそこから説明してくれ。
>>537 あれ?アトミックならそれこそ回復処理も何もないのでは。
一体何が言いたいのか俺にもわからん?
コード書いて示してみれば?
>>538 どうせ破壊操作言ってみたかっただけだろw
>>538 元々は
>instanceofの類を使わずに動的型付けの言語でどうやってバカよけ
という話で
>例外捕まえてもいいし、、、
という策が出るも、事後の例外キャッチは事前の型判定の代用にはならないし、
特に処理が破壊的な場合は困ったことになるでしょというだけの話。
単純に特定の型が明示的に要求されている場面では多態も例外処理も型判定の
完全な代用にはならないのだから素直にinstanceOfの類を使いましょうって話
なんだけれどもな。
541 :
デフォルトの名無しさん :2011/12/09(金) 20:07:48.76
>>510 これにまともに反論できるやつ居ないのかよ
俺は動的言語ならとことん動的にいくなあ ベストエフォートが通じない場面じゃそもそも使わん で、そんな俺がRubyでしばしばやる方法は… データの大半を自作のクラスにラップすることで typedef感覚での意味付けをする その際、クラス名が○○ならto○○という 自身の型名を含んだメソッドを持たせる メソッドの内容は自身への参照を返す、というもの んで、その後に書いた関数の引数チェックなどは 引数を始めて使用する際にto○○を呼びつつ使用
>>541 > COBOLやFlex/as3プログラマーが定時退社で月給150万円もらってる
反論する価値もないと思うが。
>>540 結局おまえは動的言語での型検査がまるでわかってないことを晒しただけだな
かわいそうにwww
誰かが書いていたが、馬鹿よけってのはお前を外せばいいだけw
>>540 > 単純に特定の型が明示的に要求されている場面では
まさに馬鹿の発想w
>>545 そういう場面は動的言語ではありえない、と言っているのかな?
で、結局「馬鹿よけ」って何のことだったの?
さあwww
instanceof なしでどうやって引数チェックするんだよ! ↓ 色々な方法があるんじゃない?アノテーションとかメソッド叩くとか例外処理とか・・・ 普通にその通りだと思うけど、アノテーションでもメソッド叩くのでも例外処理でも 処理できないような引数チェックの具体例ぷりーず!
「馬鹿よけ」はフールプルーフのことを言ってんだろ
静的型付け言語の発想は簡単な部分の開発を 型に押し込めたコーディングにしてしまうから 開発がつまらなくなる。 開発が楽しいのはフレームワーク決めたり アーキテクチャを決めたりする一部の人間だけ。 下っぱはつまらない作業になる。
>>552 難しかった作業(プログラミング)が単純作業になるのか。
良いことだ。
instanceof での分岐と単純な多態って、
人間が書くはずだったコードをコンピュータに書かせているだけのような気がしてしまう。
>>550 う〜ん・・・
多態性や例外を使わずに素直に型検査を使った方が適切だったり使わざるを得ない
場面なんていくらでもあると思うけど。特に他人様が書いた成果物を使う時は。
例えばこれから叩くメソッドが他人様によって"Input: ClassA value"とか文書化
されていれば、多態性云々とかとりあえず投げてみて例外を待ち構えるとかいった
悠長なことはせずに素直に型検査してから叩くし、それ以外の方法は無いでしょ。
文書化された仕様としてその型の値を要求しているのだから。
そしてそのメソッドに渡す引数が自分が今書いているメソッドの引数の一部であれば
文書化の際にその引数の型は明記するし、その引数は上記の通り中で型検査するし、
オプショナルな型注釈が使える言語の場合には注釈付けて型検査を強制するでしょう。
それでも多態とか例外で頑張るのかなぁ・・・
工作員達の正体(韓流AKBと政治ゲーム)
180 名前:115x125x150x194.ap115.ftth.ucom.ne.jp[] 投稿日:2011/04/29(金) 13:58:50.19 0
このスレ見てハロカスヲタはホント閉鎖的だなって思うわ
これだからハロカスって言わるんだよカス ハロ=HelloProject(モーニング娘などが所属)
http://hato.2ch.net/test/read.cgi/morningcoffee/1303996886/180 756 名前:115x125x150x194.ap115.ftth.ucom.ne.jp[] 投稿日:2011/04/30(土) 04:27:05.86 0
このスレ見てハロカスヲタはホント閉鎖的だなって思うわ
これだからハロカスって言わるんだよカス
http://hato.2ch.net/test/read.cgi/morningcoffee/1304043385/756 他多数書き込み
Network Information: [ネットワーク情報]
a. [IPネットワークアドレス] 115.125.150.192/29
f. [組織名] 有限会社 クリップ
AKB48 音響、缶バッヂ等製作 有限会社クリップ(代表=日本名を名乗る在日朝鮮人)
→なぜ在日朝鮮人が、わざわざ2chに出向いて必死になってHelloProjectを叩くか。単に商売敵だから?AKBが「ツリ目のエラ張りにしか」売れてないから?
ヒント:*韓国人のみに見られる風土病の存在
*HelloProject→日本人アイドル AKB→整形した○○人←韓流()
そして、"朝鮮人だらけの"マスコミが 捏造AKB ブーム. 捏造韓流 ブームを演出し、ごリ押す目的が見えますか?
検索していろいろなサイトを巡ってみて下さい
>>553 よくねーよ、単純作業になったのなら自動化しねぇーと、保守が地獄だ
なんでこう言語の仕様の範囲で閉じこもりたがるかね、もうそんな時代じゃないだろうと 周辺ツールを含めて総合力が言語の能力を決めている。
言語の表現能力も大事だということを Javaが教えてくれたから
>>554 型アノテーションのように関数の入り口で型チェックするにしても、
単純にinstanceofでやるのは下策でしょう。
respondtoだとかisXYZなどのダックタイプ的なチェックをすれば
動的型の柔軟性を損なわずに済むのだから。
そういう柔軟な型検査は動的型言語の多くで簡単に実装可能でしょう。
例えばpythonならデコレータで書けるわけで。
なのにinstanceofに固執して他の柔軟な型チェックを拒否する発言が
批判されているんじゃないのかな。
そういう姿勢は動的型のプラクティスとあわないと思うなあ。
instanceof派の反論って、respondtoだとこれができない、isXYZでは
これができない、例外処理だとこれができない、って話ばかりで、
それらの方法を組み合わせても実現できない型チェックの実例が
全然出てこないことも、議論が咬み合わない原因だと思う。
>>559 >それらの方法を組み合わせても実現できない型チェックの実例が全然出てこない
554の例がまさにそれだと思うけど。
ちゃんと文書化されたAPIで、メソッドの引数の型が明示されています。
メソッドを叩く前に引数を検定したい。どうするの? わざわざ型が明示されているのに
柔軟性を追求して直接的な方法を避け色々な方法を組み合わせるの?
>なのにinstanceofに固執して他の柔軟な型チェックを拒否する発言
他の型チェックでは代用出来ない例を例示しているだけであって拒否はしていないし
使うなとも一言も言っていないよ。適切な場面で使えるものを大いに使えばいいでしょ。
ただ他の型チェックでは型判定の完全な代用とはならない場面もあるのだから、そう
いう時は素直にinstance云々の類を使っても良いんでない? 使うべき場面もあるよね?
と言っているだけで。
>>560 > 554の例がまさにそれだと思うけど。
まずは型を直接指定することのデメリットを考えた上で、
あえて型を直接指定したとしても、instanceofを直書きするのは
下策中の下策だと何度も指摘されていますよね?
自己否定だよね
型無し言語の自由度はある種アセンブラの自由度と似た所がある 柔軟性は肯定できるが、その柔軟性が生産性を阻害しているから制限を加えようとしたのに先祖帰りした印象。
下っ端に自由なんていらん。 自由が欲しければ実力をつけろ。
メソッドを呼ぶ前に引数の型チェックなんてしたら メソッドを呼びだしを行ってる変数で多態できなくなるじゃん
>>564 問題が曖昧すぎて解法もクソもないだろwww
568 :
デフォルトの名無しさん :2011/12/10(土) 15:15:52.47
>>566 呼びだしを行ってる変数ってself、thisのこと?
>>564 それってXがAと定義したとき、XはAだよねって言ってるようなもんで、
そりゃその通りとしかいえなくなるでしょ。
元の話の流れは動的型でinstanceofが有効な場面を想定する時点で、
そもそも本末転倒な話だってことだよ。
>>550 >普通にその通りだと思うけど、アノテーションでもメソッド叩くのでも例外処理でも
>処理できないような引数チェックの具体例ぷりーず!
↓
>>554 ↓
>>568 >元の話の流れは動的型でinstanceofが有効な場面を想定する時点で、
>そもそも本末転倒な話だって
なんじゃそりゃ。
つまり「動的型でinstanceofが有効な場面」は存在するしそういう場合は
instanceofを使えば良いって事でFAね。
動的型付け言語ってさ メソッドに想定してない型のオブジェクト渡したら どうなるの?
そのメソッド内でオブジェクトのメソッドとか呼ぼうとしたらそんなメソッドねーよexceptionが飛ぶ たまたま同名のメソッドとか持ってたら動いてるけど挙動がおかしいみたいになる可能性もある
>>569 自分へのレスは全部同一人物が書いたと思い込むタイプの人?
>>572 どうしてそう思うの?
568がそもそもどういう流れで
>>554 が出てきたのか話の繋がりを読めていないか
読めていてもいささか理不尽なことになっているので、親切にわざわざ要点の引用
までして話の経緯を示したのに。
>>571 その場合ユニットテストはどうするんですか?
もしかして、正常なオブジェクトを渡した時だけしかテストしないの?
嘘吐き朝鮮、中国人がやってる報道機関 朝鮮人犯罪があまり報道されない理由 韓国文化放送(MBC) 〒135-0091 東京都港区台場2-4-8 18F フジテレビジョン 、、 〒137-8088 東京都港区台場2-4-8 韓国聯合TVNEWS(YTN) 〒105-0000 東京都港区赤坂5-3-6 TBSテレビ 、 、、 .〒107-8006 東京都港区赤坂5-3-6 大韓毎日 、、、、、、、、、、、、 〒108-0075 東京都港区港南2-3-13 4F 東京新聞(中日新聞社東京本社) 〒108-8010 東京都港区港南2-3-13 京郷新聞 、、、、、、〒100-0004 東京都千代田区大手町1-7-2 産経新聞東京本社 〒100-8077 東京都千代田区大手町1-7-2 (サンケイスポーツ、夕刊フジ、日本工業新聞社) 朝鮮日報 、、、 〒100-0003 東京都千代田区一ツ橋1-1 4F 毎日新聞東京本社 〒100-8051 東京都千代田区一ツ橋1-1-1 韓国日報 、、、、 〒100-0004 東京都千代田区大手町1-7-1 8F 読売新聞東京本社 〒100-8055 東京都千代田区大手町1-7-1 東亜日報 、、、 〒104-0045 東京都中央区築地5-3-2 朝日新聞東京本社 〒104-8011 東京都中央区築地5-3-2(AFP、NYT) 韓国放送公社(KBS) 〒150-0041 東京都渋谷区神南2-2-1NHK東館710-C NHK放送センター、 〒150-8001 東京都渋谷区神南2-2-1 内にも外にも無能なのは今の日本の政治は朝鮮が行っているから 帰化人だらけの野田内閣をみてみろよ
>>570 引数としてdict型を期待しているメソッドが、
そのメソッドの中でget()メソッドだけ使っているなら、
get()メソッドを独自の実装した型の値を渡しても、ちゃんと動くよ。
つまり、Java等のインターフェイス型では、
そのメソッドで使う十分以上のメソッドを要求することになるけど、
動的型付け言語の場合にはそのメソッドで使うメソッドだけサポートすればいい。
だからクラス階層やインターフェイス型の宣言に縛られることなく、
メソッドを書いた人が期待した型以外の型でも、そのメソッドの要求さえ満たせば
ちゃんと動作するよ。
> だからクラス階層やインターフェイス型の宣言に縛られることなく、 これが飲み込めてないから、動的型付け言語でinstanceofを使いたいって思うんだろうな nominalな型システムでもないのに、多態を継承関係にあるクラスだけに限定するなんて馬鹿馬鹿しい
>>576 それは都合のいい例だけど、
都合の悪い例では、中途半端に動くよね?
たとえばメソッドの中でfooとbarを使っているけど、
barしか実装してない独自の型を渡した時。
> 動的型付け言語の場合にはそのメソッドで使うメソッドだけサポートすればいい。 つまり、メソッドの仕様として、 このメソッドは以下のメソッドを使用します。 get、put、search、count、・・・ みたいに書いてあるの? 動的型付けの仕様書が見てみたいね。
>>579 しかもな、メソッドがバージョンアップしたら、
バージョン2.0から、このメソッドはupdateを使用するようになりました。
って書いてあるんだぜ。
だから毎回ライブラリがアップデートしたら
メソッドの仕様を確認しないといけない。
581 :
580 :2011/12/10(土) 17:42:38.49
もちろん目視で。
>>573 「なんじゃそりゃ。
つまり「動的型でinstanceofが有効な場面」は存在するしそういう場合は
instanceofを使えば良いって事でFAね。 」
↑これが「経緯を説明」なのか?
本気でそう思っているのなら、プログラミング言語以前の言語教育の問題だなw
>>581 なあ、静的厨って、みんなお前みたいな馬鹿なのか?
IDEの機能の多くが動的型言語から出てきたことの意味がまるで分かってないな。
>>579 仕様書なんてなくてもIDEがちゃんと教えてくれるよ。
>>582 そうね。次回からはもっと丁寧に書くよ。ちなみに、
>動的型でinstanceofが有効な場面」は存在するしそういう場合はinstanceofを
>使えば良いって事
に対する反論とかはない?
>>578 どんな言語でも、お前みたいなクソ馬鹿野郎がバグ仕込めば動かなくなるが?
>>585 反論以前に皆に呆れられてることに気付けよ。マジで。
>>577 そゆこと。staticでnominalな型しか理解できないのだろう。
ましてやdynamic typingはstructuralなtype systemよりも
遥かに柔軟だということ理解できないのだろう。
おそらく、Javaにはない概念は理解できないということ。
つまり、典型的なドカタ。
>>587 またまたぁw 反論してから呆れてみせても遅くないのにw
>>589 はいはい、そうでちゅね、
安心したら、さっさとジャバのプログラム書いてね。
キミは月30万のドカタなんだから。
instanceofを使いたくなるような状況になったら、 動的型のコードの設計として間違ってるサインだわな。 なんか、一人だけムキになってる人がいるみたいだけど、 彼はJavaでも書いてれば幸せなんじゃないの?
>>591 やっぱり、そういうことにしないと
気がすまないの?w
>>574 動的言語で引数に間違ったオブジェクトを入れたら
エラーにすればいいじゃん。
メソッドの最初で型チェックコードを入れて、
型が違えばエラーを出せばいい
ま、普通に静的言語を使ったほうがいいと思うけどね。
duck typing はまさに小規模向きの機能だろ
596 :
デフォルトの名無しさん :2011/12/10(土) 21:02:15.57
>>574 通常と異なる型の値を渡す場合のテストは
通常と異なる型の値を渡すコードのテストで十分
おまえはfinalでないクラスを引数の型にしたとき
どうやってテストするんだい?
>>594 そうだね、
型のチェックを決め打ちで直書きするようなバッドプラクティスをするような人は
素直にJavaでも使っていればいいのでは?
正直、あなたのようなダメコーダーが混ざると品質が落ちて迷惑だから、
ダメコーダーは全員Java使っていて欲しいと思う。
動的型付け言語は効率が悪い => 実はJavaと同じように設計・コーディングしてました この流れは酷いw
>>598 今はダメコーダー率が高いのはPHP。あとはやっぱりMS系の言語。
Javaは最近50万強でそれなりの人が来る。
というような話も含めてできれば面白いんだけど。 「コーダー」を馬鹿にするけど「コーダー」の経験の無い人が開発を語るなと言いたい。
コーダーでも出来るような作業を 俺は頑張ってるんだって表現したい。 それが動的型付け厨が思っていること。 単純作業にされてしまうと困るんだろうね。 もっと上の立場(アーキテクト)になればいいのにって思うよ。
気にすんな。 コーダーをああだこーだなんていう気はない。
>>597 >通常と異なる型の値を渡す場合のテストは
>通常と異なる型の値を渡すコードのテストで十分
>>576 が
>クラス階層やインターフェイス型の宣言に縛られることなく、
>メソッドを書いた人が期待した型以外の型でも、そのメソッドの要求さえ満たせば
>ちゃんと動作するよ
って書いてるんだから型で精査したら駄目なんじゃないの?
単にメソッド名が同じで挙動が意図したものと違うメソッドを持つオブジェクトを渡して ちゃんと変な挙動になるかどうかをテストすれば完璧じゃねw
難しいよね。普通に考えれば変な型を渡したらエラーになるべき。 それも一切の副作用なしで。 コードのどこかでエラーになるのを期待するのは 管理できているとは言えない。 引数のオブジェクトにメソッドがあればOKということだが、 一部のメソッドだけあると途中までOKだけど、途中でエラーになる。 そうなると、メソッドの最初で型を見てチェックするか、 メソッドを見てチェックしないといけない。型がだめなら メソッドがあるかないかをチェックする。 そうすると、動的型付け言語はすごく面倒な言語ってことになる。 だから手抜きして書く。 そうするとへんなオブジェクトを渡したら、中途半端に動くメソッドができてしまう。
分かった。考え方の違いだ。 メソッドを間違った使い方をした時、 間違った使い方をしたというエラーが表示されへんな状態にはならないのが、静的型付け言語 間違った使い方をした人が悪い、状態は不定になるってのが動的型付け言語 ということは、堅牢性をもとめるなら やっぱり静的型付け言語の方がいいってことなのかな。 動的型付け言語でもちゃんと型チェックすればいいんだけど、 そうすると静的型付け言語よりも面倒になるから意味がなくなる。
動的型の言語はある程度プログラマの性善説に頼るところが大きい。
性善説と言うよりも、 ミスをしないという前提なんだろうね。
静的型付け言語でも間違った引数を網羅するようなチェックは普通は入れないけどねぇ
間違った引数の網羅ってなんだ? 普通は正しい値だけ通すだろ。
どんな値が渡ってきても正しい値だけ通すようなチェックって数値や文字列ならいいけどクラスとかを引数の型にすると難しいだろ
613 :
デフォルトの名無しさん :2011/12/11(日) 04:56:00.09
頭ん中でこういうクラスのオブジェクトが来るだろうと決めうちしてゴリゴリ 書いているだけなのが殆どでしょ。 想定してしたシグネチャのメソッドが無くても勝手に例外投げるから良いだろ、 みたいな感じ。
>>607 > そうすると静的型付け言語よりも面倒になるから
そんなことないよ。
型アノテーションの仕組みを仕込めばいいだけ。
静的型言語で動的型的なことをするほうが遥かに面倒。
>>613 そうそう、Javaプログラマはシグネチャさえ合ってればいいと
思ってるからコードの品質が低いよね。
>>605 静的型でも、ちゃんと継承して変な挙動のメソッドを実装したクラス作って
そいつのインスタンスを渡したときに
ちゃんと変な挙動になるかどうかをテストすれば完璧だね
>>614 それは堅牢性を求めるのであれば型アノテーション使って
入力値に関して動的型的なことをするのは諦めると言うことか。
>>614 というか型アノテーションの無い言語ではどうするの?
>>618 違うよ。
型アノテーションといっても、instanceofによるチェックだけでなく、
respondtoやisXYZによるチェックをしてもいいだろ?
デバッグやテスト用に、入力オブジェクトに関する単体テストを実行したっていい。
そういう色々な対応ができるのが動的型付言語。
引数の仕様の記述を言語仕様で規定している静的型付言語では
その言語の型システムに縛られて、上記のような柔軟なチェックは難しい。
>>619 作ればいい。簡単な話だ。
pythonのdecoratorのようなメタプログラミング機能があればそれを使う。
なければ、プリプロセッサを書いてもいいし、
型アノテーションをコメントに埋め込んで、
IDEが設定に応じてそれを関数本体部に埋め直してもいい。
せっかく柔軟な動的型付言語をつかうんだから、
言語仕様も処理系もIDEの役割分担も、柔軟に考えたほうがいい。
つまり各々手作りし無ければならないと・・・面倒だね。
>>621 そういう、「〜〜すればいい」「〜〜できる」「〜〜してもいい」
というようなテクニックを、プロジェクトごとに、あるいは会社ごとに、
いちいち再発明しなければいけないというのは、非常に効率が悪い。
標準、あるいはコミュニティによるデファクトスタンダードでも構わないが、
ともかくフレームワークとして提供されていてほしい。
というのが、ドカタ視点で期待すること。
やればいい、できる、これはコスト無視の趣味グラマの発想。
ドカタにとっては時間=金なので、最初に天秤ありき。
エリートドカタは残業代でないからな
なんで毎回作りなおすとかいう前提になるんだろう? 作ったものを育てながら使うという発想がないのだろうか?
>>625 最初の障壁。
なんで俺が作らないといけないんだろう。
これを甘えと言うのが趣味グラマ発想。
仕事なら、そこから作らなきゃいけないならJavaでやる方が早い。となるだけ。
やだよ。Java冗長なんだもん 型チェックのデコレータなんて5分もあれば作れるんだから 全然ペイしない
俺がオレオレフレームワーク作ったところでメンテはどうするのという甘えもあるな。 インフラになってくる部分は特に。 既に安定している実装があればそれを使いたいところだ。というか、無いの?
「無ければ作る」と「無いから使わない」の違いだな。 趣味としてなら、車輪を「より美しく再実装」するのは 純粋にプログラミング領域に専念できる楽しい作業。 極論すれば、再実装できる車輪が沢山残されている言語ほど 魅力的だとも言える。 仕事では、「美しい」というのはユーザにとっての価値にならない。 「金」のためのプログラミングなら、汚くても車輪が揃っている言語の方がよい。 「金」と「楽しさ」と両方いいとこ取りしようとするのは感心しない。
「あるから使う」も加えておいてくれ。
>型アノテーションをコメントに埋め込んで、 >IDEが設定に応じてそれを関数本体部に埋め直してもいい。 こういうの、あるの?
>>629 > 仕事では、「美しい」というのはユーザにとっての価値にならない。
仕事だからこそ、質の高いコードを効率的に書くんだろ。
ありもの使って結果だけ出ればいいというのは趣味グラマまでで
卒業してくれよ。たのむから。
デコレータ系のようなメタプログラミングライブラリや
コードチェッカー系やプリプロセッサ系のツールは
蓄積するごとに質の高い仕事ができるようになる。
趣味でやってるならともかく、仕事でプログラミングするんなら
当然皆やってることだろ。ドカタ以外は。
>>632 xUnit とか自分の組織で再実装してますか?そういう問題なのですが。
Javaドカタはエクセルの仕様書に書いてあることをJavaの文法に書き直すだけ。 それ以外のことは仕事だと思ってないんだよ。
各組織で質の高いコードを効率的に書くために、 どの組織でも使うようなものは、全世界のプログラマが協力してOSSとして共有する。 この基本理念を理解できていない人?
>>633 なんでそこで再発明の話になるわけ?どこまで馬鹿なん?
どのようなモノがOSSとして共有されているかというところに 各言語が何を目指しているかの指向性が出るのであって、 それが、Javaは比較的、ビジネスを指向している。 動的型付け言語はJavaに比べると、そうではない。 比較のために言えば、関数型言語とか論外。
>>635 そうだよね、動的型付け言語では良いプラクティスを支援する
ちょっとしたコードを共有する習慣があるのは、普通のことだよね。
Javaドカタには理解できないだろうけど。
>>629 俺は好きな言語でプロトタイプ開発&フレームワーク開発&仕様決定をやって
すごく楽しいのに、下っ端連中は給料1/3でJava使わされてるわ
>型アノテーションをコメントに埋め込んで、 >IDEが設定に応じてそれを関数本体部に埋め直してもいい。 これ共有されてますか?具体例を無視しないで教えて。
>>639 >プロトタイプ開発&フレームワーク開発&仕様決定
その好きな言語が動的型付け言語なら、スレタイどおりで語るに落ちたというところだが。
動的型付け言語で、そこまでを素早くやって、下っ端連中がJavaで大規模開発するということだろう。
>>640 さあ、他人はどうか知らんけど、オレは10年前から愛用してるよ。
コメントに検査コードを埋め込んで、それを実行するというアイデア自体は昔からある。
昔はCで行われていたし、
Eiffelの表明検査のON/OFFもコンパイラが同じことしてる。
他にも関数や手続きの冒頭のコメントに検査コードを埋めておくことは
結構多くの言語で実践されているプラクティスだと思うが?
>>641 フレームワークは大規模開発ではないと言いたい?
どこまでユトリなんだよ・・・
共有されているか否かを質問されているのにな。
てか、給料の話なら動的型付け言語を使う人の方が高いでしょう。 動的型付け言語の方が設計段階でのプロトタイピングといった 軽さ、素早さの求められる作業に向いていて、 上流工程の方が給料が高いという慣習と相関があるからですね。 大規模小規模という話とは関係がないのでは、 というかむしろ、動的型付け言語を使う人の方が給料が高いというのは、 動的型付け言語が小規模開発向けだということの証左ですよ。 給料の安い下流工程の方が大規模になるのだから。
>>644 キミはどんなツールを公開しているんだい?
他人にクレクレ言ってばかりいないで、
自 分 が 何 を 貢 献 で き る の か
考 え て み ろ よ 。
Pythonのdoctestとか標準ですしね
>>647 うわ、わかりやすいドカタ思考w
上流とか下流とか関係ねーよ
質の高い仕事をしたら高い工賃をとれる
それだけの話
>>645 フレームワークは小規模であるべき。
オレオレフレームワークが巨大になるのは大企業でありがちだが、それは駄目な例。
>>648 > 自 分 が 何 を 貢 献 で き る の か
というの発想をしなければ使えない言語は仕事では使えない。
>>650 金の話なら、自分はプログラムを書かないので結構給料は高い。
フレームワークは大規模開発じゃないという発想は、 自分ではフレームワークを作ったことがなくて、 既存のフレームワークを使ってユーザコード書くことしかしていないから。 だから、フレームワーク=小規模という発想になるんだろうなw
ぶっちゃけ、動的とか静的とか関係なく、日本語を書く仕事の方が給料は高い。一般論。
テストツールの類は最低でもチーム内では共有されていないと意味ないしな。
英語の方がもっと高い
>>653 なるほど、プログラマじゃないから動的型付けの良さがわからないのか。
>>652 「仕事」の前に「ドカチン」が抜けてますよ!
個人的には、フィールドや関数のシグネチチャに const 修飾子を書けない言語は恐い。
>>661 関数型言語でも使ってろよ、書くまでも無く問答無用で全部constだw
OSSとして共有されているフレームワークと企業内フレームワークを区別しないからややこしくなる。 オレオレフレームワークが巨大なのはよくない。 なぜOSSならよくてオレオレなら駄目かといえば OSSは「〜〜を使える人」という条件を付けてもプログラマが集まるが 企業内フレームワークでそれをやるとアウトソースしにくくなるから。
>>658 自分でもコード書く仕事してる連中と、
下っ端率いるのが仕事の牢名主では
言語に対する評価軸が違うのは当然
>>662 何故煽られるのかわからないが、全部 const なのは不便で論外だ。
const であるべきものに const と表明できることに意味がある。
もちろん、その表明をチェックすることまで含めて。
そのチェックが実行時でもまあいいのだが。
const x = 1;
x++;
この x++ をエラーでも例外でも何でもいいから弾いてほしい。型とは無関係。
function setX(x) { this.x = x; }
function foo(x) const {
setX(x);
}
foo(x) の中での setX(x) の実行をエラーでも例外でもいいので弾いてほしい。
型とは無関係。
freezeの類を持っている言語なら結構実行時エラーとして弾けると思うけれども でもスレタイとは直交したネタでもある。
>>663 本当にわかりやすいドカタ思考だな
HadoopだってHBaseだってMongoDBだって元はオレオレフレームワークだろが
>>667 そうだよ。元はね。
公開したというのが本質。
>>666 俺も理論的には直交している気がするが、
今現在世の中で使われている言語、という条件をつけると直交していないと思う。
>>668 さらに補強すると公開しただけではなく公開後も生き残った選抜済みの
OSSであり、当面は死なないだろうという事も期待できるのが重要。
区別はすべき。
>>670 そうだね、区別することは大事だ。
仕事で開発してるフレームワークだからといって、
非公開フレームワークとは限らないし、小規模フレームワークとも限らない。
ドカタでなければ普通に区別できるはずだが、
どうもこのスレには区別できない人がいるらしい。
ましてやそのフレームワークが有用かどうかとは全く別問題だよね。
オプソと言うとタダ乗りすることしか頭にないんだね かわいそうに
と煽る自分もタダ乗りしてるんだろうと思われるのが2chなので、 そういう議論をしたいなら名乗れる場所でやらないと意味がない
赤の他人が書いたコードを引き継ぐ事になったときに、 より絶望的な思いをする事の多い言語=大規模開発に向かない そういうことが比較的少ない言語=大規模開発に向く 自分が書くなら好きな言語で書くのが一番効率がいい。当たり前
>>675 そういうことなら動的型付言語のほうが大規模開発に向くな。
赤の他人のオレオレクラスやオレオレインターフェースへの絶対服従を要求される静的型付言語より
柔軟に自分のコードに置き換えていける動的型付言語のほうがずっとマシ。
そうなんだね
型アノテーションってさ、 要するに静的型付け言語になれってことじゃないかw 静的型付け言語で動的型付け言語みたいなことをするのは簡単。 実際に出来る。Object型にキャストすればいいだけ。
>>676 柔軟に自分のコードって・・・
お前、自分一人で開発してんのか?
それは小規模っていうんだぞ。
いいか、お前の言っているのことは
お前が書いたコードを、他人のコードに変更される
ということを意味してるんだぞ
どこが大規模に向いているんだよ。逆じゃないか。
あと、奴隷根性は卒業しろ。絶対服従を要求される。
それはお前がやってることの立場が低いからだ。
要求する立場(アーキテクト)になれ。
>>678 そのObject型にキャストするという素晴らしいアイデアで
>>423 と同じコード書いてみて
叩き台を叩いて壊すのが専門という人はどこでも厄介なものです
>>680 それは、Objectにキャストしないで実装できるだろw
インターフェース持たせればいい。
「大規模なソフトウェア」と「大規模な開発」は全く違う 前者は LOC で計測される概念 後者は人数・組織数・年数で計測される概念
大規模なソフトウェアってのは殆ど無い。 なぜなら大規模なのは機能が多いだけだからだ。 機能が多い=単純に画面が多いと考えてもいい。 基本的に似たような処理で作れるものなので 単純作業といってもいい。 こんな所で俺の腕の見せ所だなんて言ってるのが 動的ドカタ。単純作業を本当に単純作業にすると 腕の見せ所がなくなるから強く反対している。
>>685 あってるよ。
動的な型なんて必要性は殆ど無く、
インターフェースがあれば代用可能なもの。
どうしても必要な場合ってのはまず無いが
そういう時にはキャストすれば良い。
動的型付は正直良くないと思うが、動的型付を理解できずにただ吠えている奴がいるので嫌な気分。
インターフェースや継承なんかで対応できないものって なにがあるの?
>>689 evalだけ。あんなものは普通使わん。ハックぐらい。
>>690 自演ですか?
理解できないのを誤魔化さないように。
692 :
690 :2011/12/11(日) 11:45:03.43
>>691 違いますが。
それならそれで、あなたが別の答えを
用意したらいいんじゃないですか?
>>692 >叩き台を叩いて壊すのが専門という人はどこでも厄介なものです
叩き台を良くする人=eval 以外の「インターフェースや継承なんかで対応できないもの」を書く。
叩き台を叩いて壊す人=691
>>682 Scala の implicit def なら分かるが、インターフェース?
何を言ってるんだ?
だから別の答えを用意しろと。言い訳ばかりだな。
匿名型なんかを見ていると動的型付で便利とされる書き方でも、静的な型としてコンパイル時に確定する事ができる場合もあるんだよな・・・ 静的型付けにできれば、強力なチェックが行えるのでこの辺り実行時と言わずコンパイル時エラーにできるとデバッグは楽になるし インテリセンスなんかも作れるのではないかと妄想したりする。 無知が吠えているので書いても流されるんだろうな、勉強すればいいのに・・・
動的ドカタは自分の仕事にプライドを持ってるんだから お前がやってることは単純作業って言ったら可哀想だろうw
>>697 ぶっちゃけお前みたいな知恵遅れが居ると静的型付けを語れないんだよ、死ね無知
2chでは、コピペではない長文(5行〜10行程度)なのにレスが付かない 発言を抽出すると、S/N 比が抜群に高まるということが経験的にわかっているので、 興味のあるスレッドを登録して個人的に運用中です。
静的型付けでもC#の拡張メソッドやScalaのimplicit conversionのように 動的型付け言語のオープンクラスに近いことが出来るようになってきてる もちろん、継承とインターフェースとObject型へのキャストで十分とか 言ってる馬鹿には無用の機能なので、ドカタ専用言語Javaには実装されてない
なんだJava叩きをしたいだけかよw はい、みなさん、わかりましたね。 静的型付けでもC#の拡張メソッドやScalaのimplicit conversionのようなことが できるんです。
ここにはJavaを叩きたいだけのやつが住んでるから
つうかauto型を持つ静的型言語なんて、 動的型連合国への無条件降伏だよなw
>>704 静的型付けをやめたわけじゃないんだから
降伏じゃないだろw
静的型付け言語には動的型付け言語の機能を
取り入れられるがその逆はできない。
もし最強の言語があったとしたら
それは静的型付け言語を進化させたものになるだろう。
動的の感覚に近づこうとしてるよね。goみたいなコンパイル漠速も 近づこうとしている。
動的型付け言語に静的型付け言語の機能を加えようとしたら 根本的に再設計が必要になるからね。 捨てるのは簡単だけど、抜けてる型情報を補うのは大変。
犬猫子供を出せば、馬鹿は見るだろ? 某テレビ局在日社員
>>706 > 静的型付け言語には動的型付け言語の機能を
> 取り入れられるがその逆はできない。
逆だよ。
動的型付け言語には静的型付け言語の機能を取り入れることが出来る。
型アノテーションや型推論が好例。
しかし静的型付け言語に動的型付けの自由度を取り入れることは困難だ。
なぜなら、静的型付け言語の表現能力は、静的型の検証性に依拠しており、
動的型付けで表現可能なプログラムの集合を完全に被覆することはできない。
理論上不可能なんだよ。
>>7 掘り返すようだがプログラミング言語には知能があってはいけない
言われたことのみを従順に行う
アイデアマンは動的を少なくとも1つ使いこなすほうがいいよね。 アイデアが浮かばん人は言われたとおりやってればいいけどな。
C++にしてもScalaにしても自由をどうやって獲得しようとしているか? それは仕様をより複雑にしてカオスになった上の自由を獲得しようとしている。 だから、複雑怪奇な言語に見える。 C++の失敗を再び犯そうとしてるのがScalaという印象が強いんだよな。 自由や柔軟でぴか一のLispのそれは、S式だからという事はよく言われてるけど そのとおりだな。これはよく反論もあるようにわからない人に説明しても無駄 という事だと考えている。やっぱりすべてがS式で表されるという強力さだから。 LispとCをやっておけば大抵の言語は習得期間は短いと思う。ML系やSmalltalk はどっちにも似てないから例外だが
>>710 > 型アノテーションや型推論が好例。
お前馬鹿じゃないのか?
型アノテーションは実現不可能なアイデア。
だからそんなのを実装している動的型付け言語はない。
型推論は、あれは静的型付け言語に付ける機能だw
>>713 自由で言えばアセンブラが一番自由だろうさ。
だが自由ってのはgotoと同じで管理不能になりやすい。
だからそこにルールを持ち込むんじゃないか。
型アノテーションっていうのは、 たとえば、 var hoge; の代わりに Hoge hogeって書くのかい?w あ、Javaのアノテーションのように @class Hoge var Hoge; と書けばいいのかい? Hoge hogeと書いたほうが楽そうに見えるけど 型アノテーションのメリットは何だい?w
var @class Hoge hoge; こうだろ
ださっw
デジドカなのでお前らの言っている事は全く理解できないw
Javaでも上流に近い工程、設計やアーキテクチャ設計なんかをやっていれば ドカタじゃないことはよく分かっているわけで、 多分下流工程の作業をさしてドカタって言ってるだろう。 下流工程を、Javaでやればドカタで、動的型付け言語でやればドカタではない。 そう思いたいんだろうね。 ドカタとうるさい奴って、そいつがやっている仕事は、下流工程なんだろう。
>>720 Java市か知らないアーキテクト何てのは全然信用できないけどな
>>721 やっぱり、下の立場から見た感想言うんだね・・・。
自分がなればいいのに。
>>714 Pypyの実装に使われてるRPythonは
Pythonの純粋なサブセットで型推論付き
もちろん推論するのに型アノテーションなど必要なし
世の中、EXcel マクロが少し触れるくらいのPGスキルしかない上流設計者は多い。
ぶっちゃけコードも書かずにアーキテクトとか言ってるアホは 全く設計できないけどな 支離滅裂な日本語をコードに変換しろとドカタのケツを叩くだけ さらに上流の俺等はそういうアホ共を牢名主と馬鹿にしてるってわけ
そして俺は上流階級の方々の資産を運用している
RPython。よくわかりました。
RPythonとはなんですか?
RPythonとはPythonの制限されたサブセットです。これはPyPyツールチェーンの中で
動的言語インタープリタを実装するのに使われます。制限のお陰でRPythonプログラムの型推論が出来ます。
(またそれによって究極的には他の言語へトランスレートできます)
"RPythonになる"という特性は関数やモジュール1つではなく常にプログラム全てに適用されます。
(トランスレーションツールチェーンはプログラム全体の解析を行います)トランスレーションツールチェーンは全ての呼び出しを再帰的に追って、何がどのプログラムに所属していて、何がそうでないかを見つけ出します。
RPythonプログラムは任意の方法での混合型の使用を制限します。
RPythonは1つの変数に対して2つの異なる型を束縛することを許可しません。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
この観点から(そしてほかの観点からも)Javaに似た感じがします。
RPythonで許可されていない他の特徴としては、
__init__, __del__ 以外のスペシャルメソッド(__xxx__)の利用です。リフレクションも使えません。(__dict__など)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RPythonからはほとんどの標準ライブラリも使えません。例外はネイティブサポートがあるos, math, timeの一部の関数です。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RPythonの制限についてもっと知りたい方はRPythonの説明を読んで下さい。
http://d.hatena.ne.jp/ymotongpoo/20111206/1323163518
そりゃそーだよ だってRPythonは静的型付け言語だもの
静的型付け言語に動的型付機能を取り入れると、リファクタリングツールがそこで機能しなくなるな
元々動的型付にリファクタリングツールは殆ど機能しないけれども・・・
挙動の同一性を保障しながら、引数の順序や名前を置換する一般的な方法は動的型付は不可能
>>701 自演だろう、知恵遅れなのは見え見えだよ
>>714 > 型アノテーションは実現不可能なアイデア。
!!!!!!!!!!!!!!!!!!!!!!!
こいつ面白すぎ
面白いとかどうとかレスするんじゃなくて、 反論すべきではないか?
動的型というのがよくわからないんだけど、型無しと動的型は何が違うの?
>>720 ドカタの現場監督「おれはドカタじゃない!」
SQL文字列を直接記述するよりもC#のLINQが優れているのは、リファクタリングツールでメンバ名などを書き換えても LINQで書かれたソースはC#のソースなのでキチンと置換されてくれる事。 これが文字列として記述されていると、そこで挙動の同一性を保持したまま各種変更を加える事は極めて困難になる。 その文字列がSQLかどうかなど判断したり解析したりするツールなんて思いつかないしね。 本体の言語から、まったく別のシステムまで型システムが貫通するとこういう事もできるようになる。
>>734 つまりLINQはその程度の存在でしかないのか。
>>734 SQL で記述可能な任意のクエリを C# の LINQ で書けるということは保証されていますか?
それがないなら LINQ は「所詮」C# のサブセットでドカタ向きですね。
という不毛な議論を、動的型と静的型の極右と極左が延々をやってるだけ
typed lambda は untyped lambda の subset なのだから、その点では議論の余地はないですよね
>>735 その程度の存在なのかどうかは保守をした時に判るよ、知恵遅れでもな。
>>720 俺、下っ端共が使ってる言語なんて全く興味ないわ
もちろん下っ端が使ってるIDEにも興味無し
お前、自称上流行程担当のわりにJavaやらIDEに拘ってるように見えて
俺にはそれが不思議で仕方ないわ
JavaはともかくIDEのことなんて 一言も書いていませんが? それはともかく、使う言語や開発環境を決めるのも アーキテクトの重要な仕事ですがなにか?
今までちょっとした変更でも、変更してテストして、一週間も一月も掛っていた事が なんの気兼ねも無く、メニューからチョチョイと変更加えるだけで終わってしまうというのは色々衝撃的だったね。
>>731 反論するまでもないだろ
マジでおもしろすぎる
そりゃ下層の仕事だよ
下っ端に自由にIDEを選ばせたら、 ある人はEclipseを使い、ある人はNetBeansを使うってことになる。 もちろんそれが駄目というわけじゃない。 それを許すなら許すで、違うIDEのプロジェクトファイルを どう共有するかって話になる。 こういうのは上から決めること。
dynamic typed language も untyped language の subset でしょう untyped language というのは全ての値が型無しポインタのようなもの *x = 2.25; *y = sqrt(x); sqrt(x) はポインタ x の指す先が double を表現するビット列だと思って動くだけ。 x の指す先が 2.25 を表現するビット列なら 1.5 というビット列を指すポインタが戻される。 *x = 'a'; *y = sqrt(x); こう書いても、x の指す先に double を表すビット列が格納されていると思って、 ポインタ y が戻される。もちろん、この場合は y の指す先のビット列を double と思って解釈すれば 意味不明な数値になるだろうが、それは呼ぶ側の責任。呼ばれる側は知らない。 これが untyped な世界です これじゃあいくら何でも・・・なので、 すべてのポインタの指す先に、型ごとに決められた特定のビットパターンを埋めることにして、 データ本体はそのパターンの後に書くことにしましょう。 関数側は、ビットパターンを検査することで、期待した値が渡されたかどうかはチェックできるようにしましょう。 これが動的型付けの世界。 型無しの世界は、あるビットパターンを int と思って解釈した時と double と思って解釈したときで 異なる挙動をするような曲芸的なプログラミングも可能です。 まあドカタは動的型付けでやってりゃいいです。
>>741 だろ?
Ralph Johnsonのグループがリファクタリングブラウザを開発した時、
JavaだのC++だのやってた連中は
「ソースコードは自分で書くのがプログラマだ」とか
「そんな誰でも出来る単純な変換が役に立つものか」とか
アサッテな発言していたっけ。
もちろんOOやってない連中などは全く理解できずにポカーンとしてた。
LINQの基礎になっているλ式は、C#の外部のシステムへ型システムをかけ橋する能力があるが 同じλ式でもC++のλ式ではかけ橋を作ることができない、C++もどうせ拡張するのならそういう点を考えて拡張すればいいのに・・・
>>746 今は、型チェックをするのはプログラマの仕事
とかいう動的ドカタが増えたな。
>>739 プログラマに数学はいらないぐらい、
アーキテクトにプログラミングは必要ないよな。
>>745 「これが動的型付けの世界(キリリッ」
と書くのは結構だけれども、
コード例がCのキャストを使った例という時点で、実際には
「これが静的型付けの世界」だったという罠。
型安全な動的型付けでは、そんなつまらんキャストないよ。
データ自身が型情報を持っているから、キャストせずにコアージョンする。
データ自身に型情報が無いために妙なキャストをするのは静的型付けだけ。
OCamlで-rectypes付ける(equi-recursive)と untyped lambda をエミュレートできるという豆知識
745 は動的型付けの利点も意味も理解していないからどーでもいい
>>750 アーキテクトの仕事わかってないんじゃないのか?
わかりやすく言えばフレームワークを作るのが
アーキテクトの仕事だよ。
もちろんフレームワークを1から作るのではなく
既存のものを選定する作業から始まるけど、
既存のものは足りない機能が多々ある。
それを補うものを作るのもアーキテクトの仕事。
だから高度のプログラミング能力が必要になる。
その結果、フレームワークを使う側は単純作業的な仕事になる。
それを阻止したがってるのが動的ドカタ。
単純作業にされるのをいやがってる。
>>751 実行時に型を調べるのが動的型付けの本質ですよ。
そのくらいのことも知らずに語ってるのですか?
>>749 > 今は、型チェックをするのはプログラマの仕事
そうそう
instanceofスキーな静的型ドカタが
if文にinstanceofを直書きすることに固執してたな
動的型言語のプログラマは型チェックは最小限で最大の柔軟性を保とうとする。
どうしてもプログラム中に型を決め打ちして型チェックをせずにいられないのが静的型ドカタ
皮肉で
>>739 を釣ろうとしたらガチなドカタが釣れた件について。
>>754 お前はアーキテクトにはなれないよ、仮になったら色々な人に迷惑だからやめてほしいし。
静的型付け言語なら、 メソッドのシグネチャで型チェックできるから、 instanceofはいらないぞ。
>>755 いや、動的型言語では、型情報を参照するのは処理系だけ。
プログラムには出来る限り型チェックをさせない。
型チェックするにしてもinstanceofのようなnominalな検査はしない。
respondtoやisXYZのような動的な検査をする。
キミさ、無知にも程があるよ。
>>759 ナローキャストはinstanceofの一種だ。知らずに使ってるのか?
>>760 馬鹿だなあ。型の話をしているのに「処理系」とか出てくる時点で、
理論と実装がごっちゃになっている。
>>758 いや、現に俺がアーキテクトで成果を上げてるからw
はっきり言うね。日々の開発ってのは単純作業であるほうがいい。
最初にアーキテクチャをきちんと決めて、
日々の開発(単純だが量が多い)をシンプルにすることで
バグは減り開発スピードも上がる。
そういった部分にクリエイティブさを求めるな。
単純作業が嫌なら、上の立場になればいい。
自分のやってる仕事が単純作業にされてしまう立場のお前と違って、
俺は、単純作業にする側の立場だ。
単純作業にするために、フレームワークを作る側と同じで
クリエイティブな作業を行なっている。
>>762 馬鹿だなあ。
型システムの話をするのに処理系が無関係だなんて、どこまでドカタなんだ?
型推論、静的型検査、動的型検査、どれを取っても処理系とは切り離せないぞ。
そもそもプログラミング言語の意味論が処理系と無関係とかw 操作的意味論って知ってるか?www
>>764 馬鹿だなあ。型システムは言語が決めるもので、処理系が決めるものではないよ。
>>765 知ってる専門用語だけ並べなくてもいいから。
denotational semantics, axtiomatic semantics, operational semantics
一応全部知ってるけど
俺も知ってる。
常識だよね
それくらい知ってるんだぜーw
>>763 あんたはITアーキテクトとしては底辺ですわ。ドカタのほうがマシ。
だってITなんて自動化が本質だもの。それを単純作業化ってw
semantics に型が登場しないのが型無しですよ。それだけ。
静的型付け言語の実行時システムは型無し 動的型付け言語は実行時システムが型付き
RTTI とか細かい話はやめてね
>>775 先手を打ったつもりだろうが、それは無視するわけにはいかんな。
静的型付け言語でもRTTIといって
実行時に型情報を持っているのが多い。
つまり
>>774 は間違い。
>>773 自動化できる事をドカタにやらせる=コストが高い。
>>777 お前の言っている、自動化できること。って何のこと?
テストだよ。 テストは自動生成できる。 んな馬鹿な!w
>>776 静的型付け言語でRTTIを使うのは動的型付け言語でinstanceofを使うようなものです
>>745 >型無しの世界は、あるビットパターンを int と思って解釈した時と double と思って解釈したときで
>異なる挙動をするような曲芸的なプログラミングも可能です。
intという解釈とdoubleという解釈する関数があったとして、呼び出しを分ける必要があるだろうから
ただ無駄に苦労してるだけのような
>>779 あー、新人君でいたな。
テスト自動化の話をしたら、
テストを自動で作ってくれるものと勘違いしていた人w
テスト(コード)を書くのはもちろん人間で、それを何度も実行できることを
テスト自動化っていうんだよって教えてあげた。
>>780 明示的に使わなくても内部で勝手にやってくれるんだよね。
それって素敵じゃん?
整数演算をビット演算に置き換えて効率化するなんていう技は、型無しの発想だね
>>778 単純作業の事。
単純じゃないから人間にやらせてるんだろ。
>>785 単純作業でも人間がやることはある。
自動化する道具がないならば人間がやるしかない。
例えば人間の言葉(仕様書)から
コードに変換する作業とかな。
>>784 んなわきゃない。half adderは型なしか?
>>786 それが本当に単純作業だと思ってるなら、
お前はずいぶんと人を馬鹿にしてるな。
動的ドカタは自分のやっている作業が 単純作業じゃないと思いたいから 静的型付け言語を嫌うんだな。
>>783 RTTI使った事ねーのかよ
さっさとググってこい
>>788 やっぱり単純作業と思いたくないんだな
下流のくせに。
そういえなXMLからコード自動生成とか流行った事あったな
レジ打ちとか、あれも単純作業じゃないが 人間がやっている仕事の一つだよな。 人間がやってるなら複雑な仕事だって 思いたいだけじゃないの?
>>787 半加算器は論理的にはビットを入出力とする関数ですね。何か?
自動生成って単語が出てくる案件はデスマ確定
自動生成できないだけで、やってる作業自体は単純ってのは よくある話。
798 :
793 :2011/12/11(日) 16:05:42.15
×レジ打ちとか、あれも単純作業じゃないが ○レジ打ちとか、あれも単純作業だが、
>>791 下流と上流の意味を完全に勘違いしてるな。
RTTIを使う静的型付け言語は 動的型の長所が欲しくて欲しくて仕方なかったために 動的型付け言語の股をくぐってデータに型情報を持たせたのだろうなw
まともな大学出てないんだろうな
はい、今から
>>799 君が説明してくれるソーでーすw
動的型付け言語なんかハードウェアの進歩におんぶにだっこじゃん
静的型付け言語なんてハードウェアがやっている事と大差ないじゃんw
え?
静的型はアセンブリ言語の臭いがするw
ここにいる時点でおまえらどうせ学生だろ。
え?
ここまでの結論: 静的ドカタは動的型付け言語を静的型付け言語のように使おうとして 上手くいかないのを動的型付けのせいにする。 静的ドカタはプログラミングの仕事を全てドカタ仕事だと思っている。 静的ドカタは動的型付け言語から発展した技術を静的型付けの利点だと勘違いしている。
結論
>>809 のようなことにしたいのが
動的ドカタです。
学生もそのうち現実を見るだろ。 職業の種別なんてどうでも良くなる。
型システムの序列: 最低レベル: assemblyやCの弱い静的型付け ドカタ級: Javaなどの強いが抽象能力の低い静的型付け 懐古趣味級: 伝統的LISPやSmalltalk-80のナイーブな動的型付け オナニー級: MLやHaskellの強く抽象能力の高い静的型付け という順番だな。 これから実用になっていくのはJITや型推論を併用した動的型付け。
結論
>>813 のようなことにしたいのが
動的ドカタです。
動的型付けでまともなリファクタリングブラウザが でないことには未来はないだろう。 SmallTalk?あれは言語自体が終わっとるw
>>815 リファクタリングの時点で静的型付けの機能が必要だと思うんだが。
>>800 RTTIはJavaのReflectionなんかと違ってそういう使い道にはならないよ。
どっちかっていうと一部の処理の実装の為に仕方なく入ってるもの。
動的型付け言語でも多くは動的型付けの利点は利用していない、利用していない場所はコンパイラー側から見れば判る。 a = 10; func1(a); a = "ABC"; func2(a); オプティマイズをするコンパイラーならfunc1を抜けた時点で a は別の入れ物になる。どちらのaもint/stringで型は静的に決定する。 もっと深くても、例えば動的にフィールドやメソッドが追加されるようなオブジェクトでも、大抵は静的に決定しましまう事が多い。 型は大半コンパイラーには推論できてしまうんだ、僅かな例外が真の動的型付け的機能を必要としている。
コンパイラーには判るのに、静的な型として書けないのは単に文法上の表現能力不足と考えられる。 だから、静的型付け言語でもそれを補えば動的型付け言語の様に使える、もちろん僅かな例外は書けなくなるが・・・ もし大半の問題が静的型付け言語でも解決できるのであれば、静的型付け言語特有の強力なコンパイル時チェック リファクタリング、テストの自動生成等を捨てて動的型付け的機能の利点を得るより それを捨てて静的型付の表現能力を向上してる動的型付に負けないような利便性を追加した方が良いのではないかと思う。
>>815 リファクタリングを語るなら、Smalltalkを勉強しなきゃ
Smalltalkerでもあるファウラーに蹴られるぞ 笑
いつも思うが、smalltalkを矮小化するOOPプログラマーって 自分につばをぶっ掛けてるようなものだってなんでわかってなんだろうね。 アホだよな。GoFにしてもリファクタリングのことにしても、背後でOOPの 技術に貢献してきた人々を供給してきた源なのにね。 ぶっかけはAVだけにしておけ。
>>815 終わっている言語から Traits とか Classboxes とかパクってドヤ顔してないで
勢いがある言語ならもっと新機軸を打ち出してこいって話だ。
動的型付けの良さを理解出来ない人に Classboxesを良さを理解出来ると思う?
動的型付にあって静的型付で今のところ上手く作り難い機能は、自然な思考順序によるオブジェクト指向かと思われる。 現在のオブジェクト指向の静的型付言語では、先にスーパークラス、或いはインターフェイスを作成しなければならない。 抽象的な思考を具体的な思考をする前に要求される訳で、これはどう考えても思考順序が逆順だ。 抽象化とは数多くの具体例から共通項目を抜き出して作られる筈なのに、具体項目が無いうちから抽象項目を作れば 当然、考慮していない問題、抜けは出てくるのである。 動的型付けではこれを上手くこなす事ができる、つまり作りながら考えるのに向いているとも言える。 逆に保守は難しくなる。 しかし・・・静的型付でも大きくなったライブラリに対して後から抽象化を行う事もできるのではないかと思う、文法の工夫次第で。
プロトタイピングをしようとすると、静的型付は最終的に破綻しやすい どうしても一度作って捨てて、もう一度作り直さないと綺麗にならない、無駄だよね。 動的型付はこれを部分的に解決するよ。
クラスそのものを型に指定するのを止めてgoのinterfaceみたいに部分型っぽい感じの型付けを採用したら その辺の面倒臭さは無くなりそうな気がする
このスレ読んでリファクタリングに興味を持ちました。 Perl、PHP、Python、Rubyでできる リファクタリングツールを教えて下さい。 自分で調べて見ましたが、クソなものしかありませんでした。 静的型付け言語に関しては優秀なリファクタリングツールを見つけたので不要です。
828 :
デフォルトの名無しさん :2011/12/11(日) 21:31:49.20
皮肉を上乗せしてるだけだろ。 実行時に挙動が決まる物を静的に解析するとか無理だし。
そうだよね。 だから無理やり動的型付け言語に、型判別(型推論)をつけようとすると RPythonみたいに1つの変数に対して2つの異なる型を束縛することを許可しません。 ってなっちゃうわけだ。
833 :
495 :2011/12/12(月) 05:32:57.16
>>819 >例えば動的にフィールドやメソッドが追加されるようなオブジェクトでも、
>大抵は静的に決定しましまう事が多い。
本当に静的に決定しちゃったらエラーが出ると思います。
>>831 > 1つの変数に対して2つの異なる型を束縛することを許可しません。
MLでは変数の再束縛出来るけど、大抵の静的型付け言語じゃこんなこと出来ないだろ?
お前の大好きなJavaでも出来ないじゃん。
「●●について常に変わらない物」これを知る事が重要。 特に、「プログラム実行中について常に変わらない物」 こういった変わらないものの内「型」と言う情報はかなり圏論などを使ってシンプルに考察する事ができる。 文法でその変わらない「型」を明言してしまうのが静的型 しかし、実行中にはプログラム中で明言しなくても変化しない物もある。 明言しなくても変化しない物について、それを調査にあたって高速なアルゴリズムが存在するなら それを使って変化しない物を抽出する事ができるだろう。
変化しない物の情報は、色々な役に立つだろう それをヒントにしてインテリセンスの候補を限定する事により、コーディング作業の効率化ができるだろう。 関数の引数について範囲外の引数が来た時にコンパイル時エラーにしてしまえるかもしれない。 コンパイル時エラーに出来るのであれば、そんなテスト項目は無用の長物である、 自動テスト生成では生成項目からその手の項目は除外できるに違いない、テスト製作は大変な作業だ、効率化するだろう。 リファクターツールを作るのであれば、場合によっては何処を書き換えても動作の同一性が保障されるか確定できる所まで特定できるかもしれない。 変わらない物を探す強力なアルゴリズムが多くできれば、文法や型システムはもっと自由になれるに違いないと思う。
C言語というものにlintというツールが有ったらしい、今はコンパイラの一部になっているらしいが かつては時間が掛るが詳細なチェックを行う物だったという話。 高速でなくても詳細調査を考える価値はあるかもしれない。
>>834 どういうこと?
これはもちろん Java でもエラーにならない
int x = 1;
double x = 2.3;
System.out.println(x);
君の言っている再束縛ってどういう意味?もし
let x = 1 in
let x = 2.3 in
x
ということを言っているなら、これは上の Java と同じ。
次の lambda 式と同じで、二つの x は互いに無関係。
(lambda x -> (lambda x -> x) 2.3) 1
Java ではこれは書けないけど
int x = 1;
x = 2.3;
これと同様なことは x を mutable にして破壊的代入を行うということで、
ML でも無理だと思うのだけど。
動的型付け言語は変数に静的型を付けないので、もちろん普通にできる。
と思ったらエラーになった
>>838 > int x = 1;
> double x = 2.3;
これはねーよw
もう自分で突っ込んでるから良いけど
複数の型の混在をRPythonが制限してるのに クレームが入るってことは、 静的型ドカタも実は混合型を使いたいってことか
リファクタリングツールは結局?
トレードオフが何処にあるか分からない痴呆頭にゃ欲しい物が何かなど判らない
>>835-836 仮定しか言ってないし、煙にまいてるだけ。
圏で表現できるならしろよ。
お前みたいのばっかだから圏論が数学屋に馬鹿にされんだよ。
ところでC言語って静的な人にとってはどういう存在?
型の機能を増やそうってのは構わんが、 値依存型なんてのは駄目だな。 構文的な記述可能性と形式的な証明可能性がミスマッチ。 証明可能なことが事前に判っているトイプログラムならいいが、 未知な問題に対しては現実的ではないね。
コンパイラの実装とかには良いんじゃないかね > 依存型
>>835-836 変わらないモノが多ければいいというのはイデオロギーだな。
決して普遍的な価値観ではないし、ましてやプログラミングの本質でもない。
少しでも多くのモノを変えられるようにしようというイデオロギーもある。
どちらもその文脈でのみ正しく、どちらも普遍的ではない。
>>848 変わらない物が多い事が重要な事では無いんだ、変わらないというのは色々な対称性の軸の存在を意味している。
変わる物でも視点を変えると変わらなくなってしまう物もある、それを探し出す事が重要なんだ。
現実に変わる物が多いのなら、それはそのまま受け入れるべき。
これは・・・ちょっと難しいかもしれない
これが全てではないんだが対称軸を見つけると、そこから色々なツール群のアイディアが次々に出現するケースが多い。
>>846 何かの目標を持ってプログラムしている人の作業手順とかい離して
枝葉末節だけに注目して・・・ここまでならいんだがその後タコ壺になると
理論はおもちゃ化するんだよ、きっと。
上で書いたが、今のオブジェクト指向のプログラムの順序は不自然にも最初に抽象度の高い所から書かなければならない
しかし、抽象度の高い物は沢山の具体例から共通点を抜き出して作られる筈。
それと証明可能性とか厳密とか、バグが出にくいとか、ましてや馬鹿よけなんてものは無関係だよね。
そこに注目して周りが見えなくなると、どんなに完ぺきな物でも役に立たない何かになるのだと思われる。
手段の目的化した末の末路の一種だね。
>>850 >
>>846 > 上で書いたが、今のオブジェクト指向のプログラムの順序は不自然にも最初に抽象度の高い所から書かなければならない
但し静的型付けに限る。
> しかし、抽象度の高い物は沢山の具体例から共通点を抜き出して作られる筈。
動的型付けオブジェクト指向なら、具体的な実装から始めて、後から抽象的なクラスを得ることが
とても自然に出来る。
>>851 具体例で示して
出来るというだけじゃ誰も納得できるわけ無いんだから。
具体例か。 たとえば、Javaだと適当に具体的なクラスを作って リファクタリングブラウザで、簡単にインターフェースを抽出できるってところかな。 クラス(インターフェース)間のメソッドの移動が簡単にできるから あとから抽象的なクラスを作りやすい。 あとから変更しても正しく抽象化できてないとコンパイルエラーになるから 最初に具体的な実装で書いておいて変更しやすい。 これぐらいかな。
854 :
853 :2011/12/12(月) 22:43:13.03
あ、ごめん。動的型付け言語なら自然にできるという話か。 逆を書いていた。 書いたとおり逆に動的型付け言語の方が変更しにくいと思う。 テストがあるから間違いがあるのが分かるとはいえ、 間違いがあることが分かるだけで、具体的な箇所はわからないし、 その後の修正はどっちみち人間が手作業でやること。
855 :
デフォルトの名無しさん :2011/12/12(月) 23:56:53.43
動的型付けのSmalltalkの場合、
>>853 に書いてあることも当然できる上に、
抽象クラスの定義、スーパークラス変更、メソッドの移動を
実行時に行うことすらできるね。
もちろん生成済みのオブジェクトのクラスも
実行時リファクタリングに応じて変更できるよ。
静的型付け言語に、こういうことはできるのかな?
動的型の言語って856のようなことをした場合影響のでる範囲をどの程度レキシカルに 特定できるの?
>>856 変数宣言の抜けや重複は普通に判る。
応答可能なメソッドの増減も普通に判る。
isKindOf:等を介した問い合わせの影響も、
どのクラスとのisKindOf:関係が変化したか普通に判る。
まあJava辺りの静的型検査で判る程度のことは大概、事前にチェック可能だよ。
>>856 実行時リファクタリングって意味不明なんだが。
Smalltalkでできるというのはいいとして、
それはRubyやPHPなどの他のよく使われてる
動的型付け言語でできるのか?
というか何でSmalltalkだと出来るの?
動的型付け言語だから、実行時にならないと型がわからない。 型がわからないとリファクタリングができない。 だから実行時にならないとリファクタリングできない。 そしてリファクタリングってことだから、 動的にオブジェクトを変更するのは別の話、 つまり一旦停止してから、再開したらリファクタリング前に戻ったりはしない。 ということは、実行時にソースコードを書き換えて それがすぐに反映するってことなのだろう。 それが本当かどうかは知らないけど、少なくともsmalltalk限定の話だよね。
実行時にならないとリファクタリング できないのは欠点だよな 実行時リファクタリングの欠点として、 実行されてない箇所のリファクタリングは 同時に行えないって所。 現在実行されているコードまわりはリファクタリングできても システム全体としてみれば、正しくリファクタリングが行えてない。
>>861 じゃあよく出てくるJavaの話はすべての静的言語で出来るのか?
ってことでしょ
正直、どちらの人も純粋に言語本体のみで論じて欲しいと思うなあ
IDEの話ってなるともう言語の話かどうか怪しくなる
>>853 そもそも動的型ではインターフェースの抽出とか要らないから
変更すら必要無い
>>865 言語仕様の話が分からないコードも書けない自称アーキテクト(w
が唯一話題に入れるのがIDEなわけよ
それ禁じたら話に入れなくて可哀想だろ
言語仕様如何でリファクタリング等をどの程度まで機械的に支援できるのかも 変わってくると思うのだが。
>>864 Smalltalkの実行時というのは、ソースの編集時、コンパイル時まで含んでいるのだが?
つうか開発環境自体が実行環境の上に乗っかってる。
>>863 eval出来る言語なら大抵なんとかなるだろ。
で、Javaは実行時リファクタリングできるの?できないの? 実行時リファクタリングしたら既存のインスタンスは変化するの?しないの?
関数/メソッドの抽出、メソッドの移動、抽象クラスの定義生成辺りは 型付けの静的動的関係ないでしょ 実行時リファクタリングは動的型のほうが有利かもね
>>872 そう。本質的にはリファクタリングに動的型付けか静的型付けかは関係ないよね。
静的厨は動的型付け言語はリファクタリングできないとか定期的にウソ流してるけど。
>>871 実行前にリファクタリング出来るんだから、
わざわざ実行する必要ないんじゃね?
例えばプロファイリング結果に応じて動的に構成を変化させる場合は? あるいは実行中に複数のライブラリをロードする時に受け口を変化させる場合は? 実行時にリファクタリングできない言語を使っているから そういう状況を想像できないんじゃないの?
>>872 関数/メソッドの展開とか引数の順番の変更とか
メソッド名の変更(サブクラスのメソッドも一緒に変わる)とかは
定義とともに、使用しているコードも変更しなきゃいけないから
こういったものは型情報が必要だよね。
同名で別メソッド名がある場合は変更していいのかわからない。
>>875 デザインパターン勉強すれば
そういう時にどういうコードを書けばいいか分かるよ。
>>875 リファクタリングってソースコードを修正する話だろ?
プロファイリング結果に応じて動的にソースコードを修正したりすんの?
動的型付け言語でリファクタリングブラウザと言ったら Smalltalkの話題しか出ないことから 実際に仕事でやってる人はいないってことかな?
2chで世の中が判ったつもりになり始めたら重症だな。
>>877 御心配無用。とっくにRalf Johnsonから習ったから。
それにしても、コンパイル前のリファクタリングだけで満足してるなんて、
リファクタリングを理解してないとしか思えんのだがw
>>876 動的型では、同じ名前のメソッドは同じ意味を持つように設計する。
静的型しか知らない人にも分かるように言うと、同じメソッドを持ってれば
同じインターフェースを継承してるかのように設計する(duck typingってそういうものだしね)。
何故かというと、そうすることで可読性が上がるだけじゃなく
多態を最大限に活かした柔軟性と拡張性の高いコードになるから。
これがどういう意味かというと、classA#fooとclassB#fooが在ったときに
classA#foo というメソッド名だけ変更したいことなんて殆ど無いってこと。
上記の理由により、まともな設計者がいるならそんな事態にはならないから。
少なくとも実行時リファクタリングよりは需要の無い機能だよ。
まあ、それでもあえて補足しておくと、Python tools for Visual Studio(まだbeta版)
にはそういったclassA#fooだけを名称変更するリファクタリング機能があるよ。
型推論してるらしい。
静的型の場合、どうしても 「現在あるコードベースの中でこのメソッドを実際に叩いている箇所」 を探そうとするんだよね。これが静的型OO脳の恐怖。 動的型の場合、あらゆる種類のメッセージ送信に備える習慣がついているから メソッド名についての語彙の凝集が前提になる。 「俺が見たことも聞いたこともないコードからもこのメソッドが使われるかもしれない」 「将来書かれるかもしれないコードからもこのメソッドが使われるかもしれない」 ということを考慮する習慣がつく。これがメッセージングOOの考え方。 一旦メッセージングOOに習熟すると、静的型OOは手続き型言語に見える。 それぐらい抽象度が違う。
技術やってる人間が、あらゆるとか平気で使うのは解せない。文系乙。
俺は数学やってたけど、普通に \forall を使ってたわw
逆に言うとそういうconventionを共有出来ないと使い物にならないという事だな。 やはり性善説だな。
つまり静的型では、そういうconventionなしに 単に型だけで整合性を取ろうとするんだね。 怖すぎて使う気になれねえw
静的特性だけを機械的にチェックして安全性とみなすのか、 動的特性を社会的に摺りあわせて整合性を高めるのか、 それだけの違いでしょ? 性善説とか性悪説とか、視点がアサッテすぎ。
>つまり静的型では、そういうconventionなしに >単に型だけで整合性を取ろうとするんだね。 まぁ、こんな事をさらりと「つまり」と書ける程度には荒っぽいと。
>>890 静的型も動的型もconventionなしに成立しないでしょ、
という文意すら読み取れない程度に
静的ドカタは認知能力が低いと。恐ろしいね、静的脳。
>>888 だけを読んで、その文意は汲み取れねぇな。電波は他人に感知してもらえないぞ。
説明の仕方にモンキーパッチが絶えない辺りがいかにも動的型だな
そりゃ論文とかなら提出後にパッチ充てるワケにもいかんのだろうが ここは2chだからねえ
パッチ?
>>888 が
>>887 を受けての発言だということも理解できないほど
静的型ドカタは低能なの?
898 :
デフォルトの名無しさん :2011/12/14(水) 20:49:26.03
在日の戦略にひっかかり、全ての間違いが始まった2009年 夏 |:::::::::::::;;;ノ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |::::::::::( 」 < 民主になればこの世はバラ色、政権交代! ノノノ ヽ_l \______________ ,,-┴―┴- 、 ∩_ /,|┌-[]─┐| \ ( ノ / ヽ| | 在 反 | '、/\ / / / `./| | 日 日 | |\ / \ ヽ| lゝ | | \__/ \ |  ̄ ̄ ̄ | | ┬ |それでも懲りない日本人、韓国民団総理支持率35%w早く目を醒まそう!
実行時リファクタリングってそれモンキーパッチだろ…。 リファクタってソースコードの保守の話だぞ…。
>>883 > 動的型では、同じ名前のメソッドは同じ意味を持つように設計する。
つまり、getとかcountとかいうメソッドは作らないで、
たとえばCustomerというクラスなら
customer.get_customer() というメソッドにするということ?
メソッドだけじゃなくてクラス名も被る可能性があるからな。 動的型付け言語でもは MyNamespace_Customer.get_customer() こんな感じに名前が被らないようにする。 らしいwww
ちょwww
149 名前:金持ち名無しさん、貧乏名無しさん :2011/12/14(水) 23:08:43.14 ここ30年で、 113社だった公益法人が25000社ってどういう事? 150 名前:金持ち名無しさん、貧乏名無しさん :2011/12/14(水) 23:17:28.25 公益法人をwikiで調べると、バブルで急増してからほとんど減ってない wwwワロタwww
>>900 >>901 いやいや、Customerならまだましかも知れないけど、
Pointとかだったらかぶるかもしれないじゃないか?
(実際に被ったw)
Graphic3D_Point.get_point_graphic3d();
ここまでやらないとだめだろう。
2Dを継承して3Dだから名前は同じでいいだろうという反論がきそうだから 後付で補足する。 ポイント還元の”ポイント”クラスとかぶったんだ。ということにする。 継承関係全くないけど、get_point() で同じ。これはまずいだろう。
動的型付け言語ってソースの量が減るかわりに ドキュメントの量を増やす必要がありそうな気がするんだけどどうなんでしょ
その、getterメソッド名をget_クラス名とする奇妙な風習は どこかの静的型付けエセOO言語のconventionなのかね?
>>899 モンキーパッチ:元のコードを変更せずに振舞いを変更する
リファクタリング:元の振舞いを変更せずにコードを変更する
リファクタリングとモンキーパッチは目的も内容も違いすぎるんだけど、
どうして実行時リファクタリングがモンキーパッチだと思ったの?
>>901 >>904 メソッド名が長くなる事をdisってるつもりなの?
JavaやC#なんてメソッド名もクラス名も馬鹿みたいに長いじゃん
これって静的型付けOOPのconventionだよね(語彙の凝集を碌にやらない)
InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState # クラス名
supportsDataDefinitionAndDataManipulationTransactions # メソッド名
ちなみに、これは君等が勝手に作った例と違って実例だから
>>907 アクセサにget_xxxなんて付けるのはJavaくらいのもんだろ
静的型付けでもプロパティのある言語なら必要無いしな
ドカタのお里が知れるってもんよ
しかもget_xxxのxxxに属性名ではなくてクラス名を使うという なんとも奇妙奇天烈なconvention
>>900 ,
>>901 ,
>>904 は get_クラス名 に疑問を抱かないの?
本当にそんな慣習がどこかにあるの?
それとも全部同じ人の書き込み?(文体の類似性からみて)
>>900 そんなメソッド名、動的型付け言語で見た事ねーなー
あ、もしかしてJavaの話?
Integer.getInteger
Boolean.getBoolean
詳しそうなんで聞きたいんだが、語彙の凝集を行なった結果の好事例なんか挙げてもらえると嬉しい。 あと、違う人かも知れんが実行時リファクタリングって具体的にどういうもの? プロファイリング取るだろって意見もあるけど、何のプロファイリング?
>>908 そんな用語聞いたこと無いから。
で、それに利点はあるの? つかどうやるわけ? まさか静的解析でもするの?
とりあえずruntime refactoring なんて単語無い。
リファクタリングが生まれたSmalltalkではruntimeでやるのが当たり前なんだから、 そんな言葉が生まれるはず無いだろ むしろJava等に広まるときにstatic refactoringって言葉が出来るべきだった
919 :
914 :2011/12/15(木) 08:40:33.74
Javaもクラスローダの置き換えで実行中のプログラムのクラスを書き換える事は可能
でも既存のインスタンスはそのまま
>>871 は分かってて訊いてると思われる
ソース変更の時点で実行より上位の話だから実行時も糞もない。
リファクタリングするのに1回実行させなきゃいけないん?
実行時にもリファクタリングが可能だって話なのに どうして実行しなければリファクタリングできないなんて 馬鹿げた解釈になるのだろうか?
>>923 リファクタに動的静的も無いって言ってるんだけど。
こうやってすぐ思考停止して静的厨だのドカタだの…。
まあその程度のスレなんだろうけど。
>>926 その発想からして、
静的なプログラミングの価値観から動的型付けを見ているのが
丸出しだっていってんの。
ソース変更が実行よりも上位にあるというのは静的なプログラミングの価値観。
動的なプログラミングではソース変更も実行も同じメカニズムだ。
リファクタリングに動的静的もないというのも静的なプログラミングの価値観。
なぜなら静的型付けよりも動的型付けのほうが
実行時でのリファクタリングでの柔軟性や追従性がはるかに高い。
それがどうかしましたか?
実行時リファクタリングの利点ってなんなの すでに運用してるサービスを止めずに動かしたままリファクタリングとかしちゃうん?
>>927 静的言語しか使ってないうちは動的言語を理解できないが、
動的言語を使いこなしてくると静的言語のメリット・デメリットが判る。
このスレ主の言う「大規模」「効率」の意味が一向に提示されないから推測になるが、
コンピュータ資源を節約したい&処理手順が明確な用途には確かに静的言語で充分な事が多い。
そして、世の中の仕事の殆どは上の条件に当てはまる訳だから、大規模開発≒静的言語、
というのもあながち間違いではない。
資源については、今でも組み込みとか特殊環境ではリッチに出来なかったりするから、
静的言語の需要はあるな。
尤も、近年の静的言語は、動的言語で使われてきた機構を取り入れ始めているから、境界は曖昧になってきてるが。
>>929 Java屋にもホットデプロイの便利さは浸透してると思ってたけど
そうでもないのか。
ああ、ホットデプロイか あまりにこれスゲーよ感をだしてるからもっとなんかあるのかとおもたサンクス
>>927 サイクルが短いからそう感じるだけであって、
どう足掻いても単なる動的書き換えだよ。
動的リファクタリングの一部応用がJavaのホットデプロイであって、ホットデプロイが全てじゃないけどな。
むしろ、名前なんてあったことに今日初めて気付いた
動的リファクタリングもできるのか、 動的リファクタリングしかできないのか、 この2つでずいぶんと意味が違うわけだが。
動的リファクタリングしかできない場合の欠点は、 実行中(ブレークポイントで止まった所)のコードはリファクタリング出来る。 その定義もリファクタリング出来る。 しかし、その定義を利用するが実行中ではない箇所の コードはリファクタリングできないのだ。 やっぱり静的リファクタリングもできなきゃだめだよね。 その上で動的リファクタリング出来れば(ホットデプロイ?)最強。
そうやっていつまでたっても抽象的な話しかしてないじゃん。 そして勝手に用語を作るなって。
>>938 動的リファクタリングのこと?
実行時リファクタリングがなら勝手な用語じゃない?
>>856 が言い出した言葉だけど。
>>937 > しかし、その定義を利用するが実行中ではない箇所の
> コードはリファクタリングできないのだ。
それって動的に修正しているだけで、
リファクタリングっていわないんじゃないの?
リファクタリングは動作を変えないことが原則でしょ。
動作が変わるならそれはただの修正。
動的に修正できるのは出来るでいいと思うけどね。
ホットデプロイ便利だし。
だけどそれをリファクタリングと言ってはいけない。
>>940 動的リファクタリングって用語はあるのね。
無知でした。すまん。
>>941 一度コードが通らないと(評価されないと)、
関連があるかどうかも不定ってことじゃないの。
動的リファクタリングってただ動的にコード修正可能だからリファクタリングも動的に可能ってことか? それとも静的にもリファクタリング可能だけど動的だと実行時の情報を得て静的じゃ不可能な何かすごいリファクタリングができるの?
>>943 いや、動的型付け言語だと、変数に全く関係ない値が入ることがあるから
一度通ってもそれだけで型が決まるわけじゃないんだよ。
ダックタイピングできることが仇となって
コレとアレは同じ名前のメソッドを持っていますね。
コレのメソッド名を変えたらアレのメソッド名も変えますが
ほんとうにそれは正しいのって状態になる。
>>944 実行時の情報を得てというが、その時得られた情報が全てかどうかはわからないから
不確かな情報を元に、リファクタリングをすることになるんだよ。
たとえば実行時にそこの変数にあるクラスが入っていたら、そのクラスと関係があることはわかるが
別のクラスと関係があるかどうかはわからない。
情報が0よりかはマシだけど、動的型付け言語では完全な情報が得られないので
不完全なリファクタリングしかできない。
いやいや、特定のクラスのメソッド名だけを変更するのは型推論が必要でしょ
引数の順番の変更についても同様
実行して得られる情報だけで変更するにはリスクがありすぎるよ
どんだけ分岐を網羅してるかも分からないのに
それ以外の、メソッドの移動とかメソッド抽出とかクラス定義とか
そういうのは変数の型が分からなくても可能だから動的型言語でも静的に可能
(ていうかこの話って既出だよね)
だから
>>944 でいうところの前者なんじゃないの?
実行時の情報を把握しながらリファクタリングできますよって話でしょ
948 :
947 :2011/12/15(木) 21:26:39.69
ああ、上で言ってるのは人間が実行時情報を把握しながらって意味ね
人間は間違いを犯す生き物。 コンピュータが判断できるようなことを 人間がやるなんてコンピュータを使っている意味が無い。
>>950 どのコード片をメソッドとして抽出するかを判断するのは人間
抽出すると決めた後はコンピュータ任せにできる
その判断の材料としての実行時情報
>>951 相当に自信過剰な奴でもないと実行できないだろそれ
そうなんだよね。 抽出は出来るんだよ。そこだけ見ればいいから。 だけど展開はできないんだよ。 そのメソッドを使っている所が他にもあり得るから。
どこをどう勘違いすれば、 動的型付けでは通常の静的リファクタリングができない なんてアフォなことを言い出せるのだろうか。 静的脳って怖いね。
あ、動画内では展開してなかった。すまん
>>955 名前の変更は、人間が変更する箇所を選んでいるだけ。
extractの話はしているが、methodのinline(メソッドの展開)はできていない。
>>956 動的型付けでも静的解析(型推論)したって良いじゃない
展開はできたとしても人間が選んでやるしかできないだろ。 Javaの場合、メソッド名を選んで展開すると、 そのメソッドを使っている所すべてを自動的に展開してくれる。 もちろん間違いはしない。
>>960 でも結構賢くて、こんなコードでも Foo.foo の名前を変更すると
Foo.foo と bar の中の x.foo だけ変わるんだぜ
(Bar.foo や baz の中身は選択肢に出てこない)
class Foo(object):
def foo(self, x):
return x + 1
class Bar(object):
def foo(self, x):
return x - 1
def bar(x):
print(x.foo(0))
def baz(x):
print(x.foo(1))
a = Foo()
bar(a)
b = Bar()
baz(b)
>>963 あぁ、それは動的に変わらないところだから当然だね。
evalが入った瞬間終わるな。
もちろんevalは真っ先に試してみたわ 当然のごとくスルーされたw
>>957 静的型付けを意識して書く(型推論可能にする)事はできるけどさ、
それって静的型付けの型システムの優位性を認めてる事と同義じゃないのさ。
基本的に静的型システムの恩恵を受けたい でも時には動的型の柔軟さも欲しい てわけで、型推論して静的型が付かないところだけ警告出してくれればベスト
evalは警告すらなく無視されたぞ。
あれぐらいが好きなんすけどねえ
存在しないメソッド呼び出しを弾きたいだけだったら構造的部分型が一番柔軟なんじゃないかね これを本格的に採用する言語はオーバーロードを捨てる事になるだろうが
C#は確かにいいよね。 でもMonoはgtkに逃げちゃったし、Windows圏じゃないと使わない…。 せめて dalvikVM で動けば一気に情勢が変わっただろうに。
>>975 ダックタイピングしたいだけなら構造的部分型で良いと思う
どうせ動的型付け言語でもオーバーロード(マルチメソッド)は殆ど使われてないし
というかJavaな人はメソッド名変えるリファクタリングしかしないのかよ。 そればっかり言うけど。
相手の弱点を見つけたら、それを徹底的に追求して相手を潰す ディベートの基本だね javaな人は「討論に勝つ」ことが目的だから、しかたがないと思われ....
|....,,__ |_::;; ~"'ヽ | //^''ヽ,,) | i⌒" | ∀`) < 誰もいない きのこるならいまのうち |⊂ | ノ _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" |( ´∀`) < きのこ のこーのこ げんきのこ ♪ |(ノ |つ | | ⊂ _ ノ ""U _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" (´∀` )| < エリンギ まいたけ ブナシメジ ♪ ⊂| (ノ | | | ヽ _ ⊃ .U"" | | ミ | ミ サッ! | ミ |
守る方は論点逸らしに必死だろ もう毎回ワンパターンでつまんねーよ
い-635 ちなみに、平成18年度の民主党の収支報告書だが、 電通が 690,150,988円(約6億9千万円) 博報堂が 19,425,964円 (約2千万円) 読売グループ系列(読売広告、読売メディアセンター)が 72,058,917円(約7千万円)なw フライシュマンヒラードジャパンが、1974000円かw フライシュマンの本社はアメリカにあって、アメリカ政界や企業のPRも担当してる湯田ヤ系の会社だなw ここが「マニュフェスト」っていう横文字を考えたんだなw そういえば、今東電と電力総連がフライシュマンを雇ってるらしいじゃないww 札束で学者引っぱたいてうまい具合にテレビで喋らせれば馬鹿な老人なんかはまだまだテレビのいうことを信じるからなw
適所適材ってあったりまえの結論が何度も出てるのにこれだからな。 頑なに静的型付け言語を否定する奴は何なんだろう。
Χ 頑なに静的型付け言語を否定する奴は何なんだろう。 ○ 頑なに動的型付け言語を否定する奴は何なんだろう。
>>978 ドカタはリフレクションすら使った事無いんだろ
そんなドカタ仕事なんてJavaで十分
IDEで存分にメソッド名を変えるが良いさ
>>979 そんな基本は聞いたことがない。参考ソースの提示を頼む。
あと、あんたの中でのディベートを日本語にすると何になるのかも。
>>987 > Javaの人は途中で逃げないで教えてよ。
なにを? 逃げるとか何の話?
動的型で正しく設計するとメソッド名の変換で困らない => それだとメソッド名が長くなりすぎる => でも実際にはJavaの方が長いよね という話だったのに、なぜかスルーされてメソッド名を変える話になったよなw
Javaが長いだけで、たとえばScalaは短い。 動的型付けや静的型付けとは関係ない話だよな。
動的型付け言語は名前を長くしたほうが
名前がかぶらなくて安全という話か?
904 名前:デフォルトの名無しさん[sage] 投稿日:2011/12/14(水) 23:50:29.23
>>900 >>901 いやいや、Customerならまだましかも知れないけど、
Pointとかだったらかぶるかもしれないじゃないか?
(実際に被ったw)
Graphic3D_Point.get_point_graphic3d();
ここまでやらないとだめだろう。
動的型付け言語で長いメソッド名といえば JavaScriptがあるね。 document.getElementById() とか。 メソッド名の長さは動的・静的とは関係ない。
ドカタ向けの言語ほどメソッド名が長い
>>987 プログラムを後日、または他人が読む時の想定の違い。
基本ロジックをすぐ理解出来る者が読むという想定だと、メソッド、変数名が短かくても支障が無い。
一方、スキルが保証出来ないという想定では、まず「英文っぽく」読める事が重要。
大規模になるとスキルのバラツキは避け難いし、ハンコを押す人間(大抵はIT無知)への受けを考えると、英文もどきの方が有利だ。
「一般論に対して一部の事例を持ち出す」ってのが何とかの10か条にあったな。
もちろんSmalltalkのメソッド名が長いという意味ではなくw
何故そこで、Smalltalkに絡めるのか判らんな。 Pharosとかは使ってみて良かったと思える位便利だが、今の話とは関係ないだろ。
X Pharos O Pharo
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。