静的型付け言語の潜在開発生産性は今の100倍 ×5

■ このスレッドは過去ログ倉庫に格納されています
2013/11/24(日) 15:06:08.63
int a = 1;
a = "a"; ← エラーになる。
型がない言語ではできない芸当です。(爆笑)


人間がやっていたことを、コンピュータにやらせる。
これが生産性を上げる最大の方法。
コンピュータは間違わない、同じ事を何度も高速に行える。

その為に、コンピュータがコードの意味を正確に
認識できる方法が必要。実行しないとわからないことは
コンピュータは認識できない。

すなわち静的型付け言語であれば、実行しなくてもわかるので
コンピュータが理解できる。そうすれば様々な
コンピュータの高度な情報支援が得られる。

コンピュータのバックアップを受け、人間の生産性は
限りなく向上する。

前スレ
静的型付け言語の潜在開発生産性は今の100倍 ×4
http://toro.2ch.net/test/read.cgi/tech/1383572174/
2013/11/24(日) 15:35:51.80
>>26
興味ないって何に対して?
2013/11/24(日) 15:37:03.09
>>30
キチガイに対してじゃね?

> だけど、ここまでヒント上げて気づかない奴に
> 俺は興味ないかな。じゃあね。

俺もキチガイに興味はないなw
32デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:37:19.66
>>24
じゃあ正しく設計したNumOrStringを書いてみろよ。
33デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:37:39.46
>>25
そういう時は素直にテンプレート使おうよ。
2013/11/24(日) 15:38:37.11
>>32
まず「正しい」の定義をしてくれ。
35デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:39:40.84
union NumOrString
{
  std::string str;
  int n;
};
2013/11/24(日) 15:39:40.80
その「正しい定義」って動的型では実装不可能なんだよな。
37デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:42:00.33
>>29
それわかるわ〜。
結局なんでも入れられるってめんどくさくなるだけなんだよねえ。
頑張って損した気分になる。
38デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:42:13.05
>>30
知らない。前スレの静的厨が言った言葉だ。
逃げ口上としてもっともらしいことを言おうとしただけで深い意味はないだろ。
彼女いない歴=年齢のやつが「俺女に興味ないから」と言ってるようなもの。
完全に防衛機制における合理化。Dの烙印を押された奴の断末魔。
39デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:44:17.87
>>34
>>24に聞けよw>>24は正しい設計だと思うって言ってんだから
その「正しい」の定義にしたがって実装していただければ幸いでございます。
2013/11/24(日) 15:46:27.28
NumOrStringってなんですか?
2013/11/24(日) 15:47:10.07
>>35
そりゃ単に同じメモリ領域にぶちこんでるだけじゃないか

"1"が1と同値になるような実装でないと認めません
42デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:47:24.40
>>13
type NumOrStr=
|Str of string
|Num of int

let s=Str "hoge"
let n=Num 100

n|>function
|Num v->数値処理
|Str v->文字処理

F#だとこんな感じか。
めんどいのでintに限定したけど他の数値型が入るようにも出来る。
上のnとかsを使うところで場合わけで処理分岐可能。上の例は直後で分岐してるので間抜けだけど。
43デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:48:03.29
静的厨は童貞。
静的を性的と脳内変換して悦楽に浸っている現実逃避の変態。
つまり、NumOrStringとは童貞が創りだした最高の女。
ゆえにそれを見せろと言ったら即座に逃亡をはかる。静的厨は卑劣極まりない。
44デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:48:59.31
何でも入れられるといいなと思う時の代表が構文解析とかだろね。
スタックに積む値に意味動作から返される値を含めて積めると便利だから。
次にスタックから取り出されて還元されるときは、それが何であるか
意味動作自体が知っているから値自体に状態が必要ないし。
僕は共用体を良く使うよ。
読み込むBNFに還元されるときの型を書いておくんだ。
頭いいでしょ?
まあ普通にこうするか。
別に頭良くないね。
45デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:50:39.73
>>37
頑張って損というのは、企業への忠誠と努力が無駄だったときくらいだな。
2013/11/24(日) 15:50:46.67
だからNumOrStringってなんだよ
47デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:51:43.05
>>46
共用体のことらしいよ。
48デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:52:42.13
>>46

943+1 :デフォルトの名無しさん [↓] :2013/11/24(日) 14:38:53.62
 >>942
 Javaで書くならこんな感じかねぇ。

 NumOrString a;
 a.setValue(1);
 a.setValue("a");

 setValueの実装はオーバーロードで。
49デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:53:11.04
>>37
頑張って損したとは思わない。
社長が女たらしで売上げの半分を社長が独占している会社で努力することだろ。
50デフォルトの名無しさん
垢版 |
2013/11/24(日) 15:55:00.51
社名を出せないヘタレがそんなこと書いちゃダメ!
2013/11/24(日) 16:03:43.15
>>45
ジジイの介護みたいな会社で努力するなら、
ホンモノの高齢者の介護をした方がマダましなんじゃないかって
52デフォルトの名無しさん
垢版 |
2013/11/24(日) 16:05:38.13
爺どもはあと10年でいなくなる、そしたら俺の天下だと思って頑張ってるけど、
そうでもないの?
2013/11/24(日) 16:06:09.56
動的型使ってる奴がみんな同レベルと思わないでくれ
NumOrStringなんて考えた奴が低能なだけ
2013/11/24(日) 16:08:27.45
>>52
重役の息子や孫がヘッドハンティングとか言ってコネで入ってきてスピード昇進なんてよくあること。
55デフォルトの名無しさん
垢版 |
2013/11/24(日) 16:12:16.74
コネで入ってきたやつに負ける程度の実力なら、下についたほうがお得な気がするけど、
そうでもないの?
56デフォルトの名無しさん
垢版 |
2013/11/24(日) 16:17:52.12
静的動的の違いより、DFAとNFAの差のほうが気になる。
DFAは実際ほとんど使われていないけど、今後はDFAじゃないとダメなんじゃないのかな?
いまDFAが使われる場所ってコンパイラとかデスクトップで完結してるような
NFAでもいいようなとこだと思うんだ。
NFAってネットワーク越しにやってくる指令の解析にさえ使われていてこれ凄く危険。
そう思わない?
57デフォルトの名無しさん
垢版 |
2013/11/24(日) 16:19:43.29
>>55
日本社会において実力っていう物の5割はコネのことだからな。
58デフォルトの名無しさん
垢版 |
2013/11/24(日) 16:22:19.48
Javaが画期的だったのはDFAであることが保障されてたことじゃないのかなあ。
あんまり話題にならないけど。
59デフォルトの名無しさん
垢版 |
2013/11/24(日) 16:28:27.58
オートマトンなんかどうでもいいよ。そんなところがユーザーが気にすべきところならその言語はお粗末だ。
60デフォルトの名無しさん
垢版 |
2013/11/24(日) 16:32:24.15
決定性がないってことは、外部からの入力に対して計算を実時間内に
終了できることを保証できないってことだよ。
事実上無限ループさせられるってことじゃないの?
30秒で打ち切るとかそういう場当たり的な対策でいいの?
記憶領域をいくらでも使わされるとか。
そんなんでいいの?
これは言語関係ありません。
たぶん。
2013/11/24(日) 16:34:45.46
58=チューリング完全の意味も知らないバカ
2013/11/24(日) 16:34:45.74
全然話が見えてないんだけど、DFAとNFAは等価ですよ?
2013/11/24(日) 16:36:28.47
>>41
> "1"が1と同値になるような実装でないと認めません

いきなり後出し追加要件笑たわ
2013/11/24(日) 16:37:51.06
静的型付け言語=平気で嘘をつく人格障害者向けの言語
2013/11/24(日) 16:39:32.26
>>41
そんな仕様の言語は動的型でもゴミの部類ですよ
2013/11/24(日) 16:41:15.20
>>58
これは恥ずかしい
2013/11/24(日) 16:46:45.41
さすがに自演だな
こんなバカが1日に2人も来るわけない
68デフォルトの名無しさん
垢版 |
2013/11/24(日) 17:05:12.14
理解できませんでしたか。
2013/11/24(日) 17:07:57.68
1と"1"が同値かはともかく16と"16"だと基数は何なのよとか"0x10"は受け付けるのか
とか日本語対応で漢数字"十六"にも対応しようぜとかフランス語は16までは単語が
有るけれども17からは"10と7"の合成なんだぜとか生産性のさほど無い話に発展すれば
よいのに。
70デフォルトの名無しさん
垢版 |
2013/11/24(日) 17:10:52.26
いやここ生産性のスレだから。
2013/11/24(日) 17:14:22.31
>>68
DFAで保証の人?
何を保証してるのか説明plz
72デフォルトの名無しさん
垢版 |
2013/11/24(日) 17:17:20.32
ポアソン分布について話してるとこに足し算の説明求められても
そこは自分でってなるよ。
なるよ。
ならなかったっけ?

そんな感じであります!隊長!
73デフォルトの名無しさん
垢版 |
2013/11/24(日) 17:26:07.95
うそです!
そんな感じじゃないです。
馬鹿にされたからひがんだだけっす!隊長!
2013/11/24(日) 17:30:53.28
この流れに吹いてしまった俺に一言
2013/11/24(日) 17:40:44.06
つまりJavaのJVMが行うgcの待ち行列はポアソン分布に従う
76デフォルトの名無しさん
垢版 |
2013/11/24(日) 18:24:40.50
違う!全然違うよ!
2013/11/24(日) 18:24:51.91
まぁABC予想とともに解決する問題なんだけどね
2013/11/24(日) 18:52:15.68
JSerが出てこないとヒマだな。
79デフォルトの名無しさん
垢版 |
2013/11/24(日) 18:54:53.09
呼んだ?
2013/11/24(日) 21:15:38.93
>>79
でてくんなボケ
81デフォルトの名無しさん
垢版 |
2013/11/24(日) 21:33:56.48
じゃあ呼ぶなよ。
めんどくさい奴だな。
2013/11/24(日) 21:42:39.70
とにかくJSネタに我田引水して「ES7で解決している」と言ってみるとかネタは無くとも
とりあえず「Cの10倍速い」と言うのが訓練されたJSerであって、「呼んだ?」だけでは物足りない。
83デフォルトの名無しさん
垢版 |
2013/11/24(日) 21:50:39.71
定価1万円くらいのJavaの本がブックオフで105円だったので買ってきました。
2011年初版です。
なんでこんなに安くなってたんだろ。
見たところ新品みたいなのに。
これ出した人一度も読んでないよね。
こういうの流行ってるのかな?
84デフォルトの名無しさん
垢版 |
2013/11/24(日) 21:54:31.23
Javaの第二形態がJS。
もちろん進化した分Javaより強い。
2013/11/24(日) 22:03:24.72
俺JS使いだけど、
JavaScriptは
Cの100倍速いよ
86デフォルトの名無しさん
垢版 |
2013/11/24(日) 22:06:23.81
100倍は無理でしょ。
常識で考えなよ。
2013/11/24(日) 22:09:11.37
空気戻ってきた。
2013/11/24(日) 22:57:48.80
>>86
それいったら10倍だって無理だしw
2013/11/24(日) 23:37:47.79
JavaScript は C の10倍 名前が長い
2013/11/24(日) 23:40:11.03
S(100);

/* C */
int S(int n){
 int i, sum;
 for( i = 1; i <= n; i++ ){
  sum += i;
 }
 return sum;
}

/* js */
function S(n){ return n * (n+1) / 2; }

そう、JavaScriptはCの100倍速い
2013/11/24(日) 23:41:01.36
ジャバスクリプトとシーなら4倍だ。10倍って大げさすぎたいしたことない。
92デフォルトの名無しさん
垢版 |
2013/11/24(日) 23:41:34.27
くっそwミスったw
2013/11/24(日) 23:50:09.92
イーシーエムエースクリプトで6.5倍だ
2013/11/24(日) 23:51:56.76
>>90
それJavaScriptにおける最適化手法の進化について理解していない。

将来的にはn * (n+1) / 2という式から「あぁ、この人は1からnまでの総和を求めようと
しているんだな・・・」と自動的に解釈してループを使ったコードに書き直してくれる
ようになるらしい。
95デフォルトの名無しさん
垢版 |
2013/11/25(月) 00:09:49.56
3倍なら可能!
96デフォルトの名無しさん
垢版 |
2013/11/25(月) 00:11:41.64
JSはCの二倍速い。
2013/11/25(月) 00:14:59.65
>>94
いや、それって逆じゃないの…?
2013/11/25(月) 00:25:42.16
>>97
何のためにSIMD対応を進めているとおもっているのか。
ループに展開してGPUで並列計算するに決まっているじゃ無いか。
2013/11/25(月) 00:25:52.26
最終的には5050という数字を見つけると、1から100までたしたいんだなと解釈してループコードに書き換えてくれる
2013/11/25(月) 00:31:22.06
MAPが並列で速くなるのはわかるけど
REDUCEが並列で速くなる…?
2013/11/25(月) 00:35:55.81
>>100
もちろん、帰納的に100個のルーチンを展開してそれぞれ実行する
102デフォルトの名無しさん
垢版 |
2013/11/25(月) 00:35:59.64
JSなら速くなる。
ES7で実装される予定。
2013/11/25(月) 00:44:37.69
>>100
隣接する偶数番目と奇数番目でペア作って並列で足し算するに決まっているでしょ。
100までの総和なら最初のイテレーションで50まで要素が減る。
100回ループ回さなくても5〜6回のイテレーションで計算できるぞ。
2013/11/25(月) 00:45:47.45
アホプログラマは5歳のガウス少年よりアホってことが良く分かりますね
2013/11/25(月) 00:48:33.97
なあに、才能と計算リソースは無駄遣いされるものと相場が決まっている。
106デフォルトの名無しさん
垢版 |
2013/11/25(月) 00:52:26.29
ラズパイにUbuntu入れてJSでソフトを作りました。
結果、オープンハードで2倍、オープンOSで2倍、オープン言語で2倍、合わせて
100倍速くなりました。
これを32台つなげたクラスタは京より少しだけ速くなりました。
次は64台つなげてみたいです。
2013/11/25(月) 00:57:18.39
おまえら元気だよな。ネカマとJSerになりきるのはよう続かんわ。
2013/11/25(月) 00:57:32.82
総和ならこれくらいのことはやって欲しい。;p

{Color red. Color green. Color blue} sum "=> Color white "
109デフォルトの名無しさん
垢版 |
2013/11/25(月) 01:00:12.87
ネタ扱いされてるけど、JSがCの二倍速いのはほんとだよ。
やってみた人だけが知ってること。
やってもいないくせにネタ扱いするのやめてくんない?
迷惑。
2013/11/25(月) 01:05:01.46
>>108
CMYKへの対応はどうするんだとか言うツッコミはともかくHTMLとかのカラーコード表
を取り込めばさっくり実装できそうな気もする。
2013/11/25(月) 01:21:52.31
ねぇ、動的型つき言語でのテスト方法教えて。

まずさ、クラスAがあるでしょ?
そのクラスAが内部で使ってるクラスBがあるでしょ?

クラスBの単体テストは簡単だよね。
クラスAの単体テストをする時、クラスBの代わりにモックを使うよね?

つまり、クラスA+偽クラスBでテストをしているわけさ。
この時、クラスBの仕様が変わるとするよね?
でも偽クラスBはクラスBのモックというだけで、クラスBとは無関係だよね?
動的型付き言語の場合。

クラスBの仕様が変わってるのに、クラスAはテストに通ってしまう。
こういう場合どうするの?

静的型付け言語ならコンパイルエラーで見つけられるけどさ。
2013/11/25(月) 01:27:58.30
クラスBの要件についてのテストを書いておけば
テスト通らなくなるだろ
2013/11/25(月) 01:33:38.72
>>110
メソッド sum の実装はコンテナ(コレクション)クラスに属してて、
{1. 2. 3} sum でも同じメソッドをコールし、演算可能ところがミソかな。
Haskell や Scalaの型クラスとかだと可能なのだろうか?
2013/11/25(月) 01:35:19.64
>>112
そりゃクラスBの要件のテストを書いておけば、
そのテストは通らなくなるよ。

でも今の問題は、クラスAのテストなんだよね。
クラスBを修正してもクラスBのモックは変わらない。
クラスBのモックを修正することを忘れれば
クラスAはテストに通ってしまう。
2013/11/25(月) 01:37:37.15
>>114
忘れたお前の責任
2013/11/25(月) 01:40:28.72
>>114
>そのテストは通らなくなるよ。
>でも今の問題は、クラスAのテストなんだよね。
要件のテスト通らないって事は変更できないってことだ
まさかテストを書き換えるなんて馬鹿なことはしないよな?
2013/11/25(月) 01:42:13.57
1、テスト志向を徹底するためには、まずデバッガを捨て去らねばならない
2013/11/25(月) 01:42:43.12
つまりダックタイピングの限界ってことだね。
本物とモックで同じインターフェースを使っていないから
インターフェースが変わっても気づかない。
2013/11/25(月) 01:43:38.49
余程のばかじゃない限り気付くだろ
2013/11/25(月) 01:44:21.22
>>116
いやさ、変更するのはクラスBだよ?

クラスAと(変更前の)クラスBのモックは
変更する必要ないじゃん?

テストを書き換えるなんて馬鹿なことはしないんだからさ。
2013/11/25(月) 01:45:06.75
>>119
納期が迫っているときは、その馬鹿でも
しないようなことをしてしまうんだよ。
人間はミスをするという前提にたとうぜ?
2013/11/25(月) 01:45:08.03
Bの要件を満たさないBを作る事がダメだと言ってるんだが
伝わってるか?
2013/11/25(月) 01:46:07.78
>>120
なら問題ないだろ
変更しても要件のテストに通らなければそれはクラスBではない
2013/11/25(月) 01:46:40.20
>>122
クラスBとクラスBのモックは
別のものだってわかってる?
今はクラスBの話はしてないの。

クラスAの単体テストの話。
クラスAから使うのはクラスBのモックであり
クラスBはでてこない。
2013/11/25(月) 01:47:48.10
>>124
クラスBのモックは当然クラスBの要件を満たしているんだろ?
何の問題があるんだよ
2013/11/25(月) 01:50:23.40
クラスAのテストは通る
クラスBのテストも通る。

だけど、組み合わせた場合
動かないってことがあるわけだよね。

組み合わせた時インターフェースが
一致していないことを
どうやって知ればいいの?
2013/11/25(月) 01:51:08.32
何を言ってるんだか理解できないんだが・・
2013/11/25(月) 01:54:39.05
>>125
え? まさか、
クラスBのモックを作ったら、
クラスBのモックもテスト書くの?

いや多分逆だな。
クラスBのテストを書いて、
そのテストを通るようにクラスBのモックを
作るんだね?

クラスBがないからクラスBのモックを書くのに、
クラスAのテストをするために、クラスBのテストを書くんだ。
で、テストを通るようにクラスBのモックを実装するんだ。


動的言語ってすごい二度手間・・・
2013/11/25(月) 01:54:44.66
まあ静的型でも変更を検出出来るのはメソッドのシグネチャの変更程度であって振る舞いの
変更はやはりモックを見つけ出して振る舞いを書き換える必要はあるかな。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況