トップページ⇒tech
1001コメント290KB

やっぱり動的言語では安全なソフトは作れない

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/05/22(日) 03:22:26.61
型をしっかり明記してこそ
安全で堅牢、バグのないソフトは作れる
0002デフォルトの名無しさん2011/05/22(日) 03:35:31.37
せめて、そう思う根拠ぐらいを書こうよ、自分の主張に説得力をもたせるためにさ。

俺は天才だ。って言って、誰が信じると思うの?

そんなこともわからないぐらいに>>1は池沼なのかな?
0003デフォルトの名無しさん2011/05/22(日) 07:34:05.10
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
0004デフォルトの名無しさん2011/05/22(日) 08:07:12.29
>>1 はMLかHaskell使ってればいいじゃない。
まさかC言語で「安全」とか思ってないよね?
0005デフォルトの名無しさん2011/05/22(日) 08:37:53.05
どうして、京都大学霊長類研究所は、アイちゃんの、
スレ乱立を見過ごしてるの?

独自の板立ててそっちで実験するとかできないの?
いまどき、主婦だって専用の板ぐらい立てられるぞ。

「関係者以外は書きこまないで下さい。」とか、何
お前らがエラソーに仕切ってんだよ、ハゲ!

糞スレをあちこちにポンポン乱立されちゃ迷惑なんだよ。
ったく、京都大学霊長類研究所は能無しの集まりかよ!
0006デフォルトの名無しさん2011/05/22(日) 08:51:00.92
Haskellだって本当に安全ってわけじゃないぜ?
unsafeな関数がゴロゴロしてる
0007デフォルトの名無しさん2011/05/22(日) 09:16:30.99
せやな
0008デフォルトの名無しさん2011/05/22(日) 09:19:50.88
関数型が開発効率上がるならもっと普及してる
0009デフォルトの名無しさん2011/05/22(日) 09:28:27.14
>>4
むしろC言語って実質的には型がない言語じゃね?
0010デフォルトの名無しさん2011/05/22(日) 09:32:36.49
静的に型チェックすることが重要ってことだろ
0011デフォルトの名無しさん2011/05/22(日) 09:58:19.50
静的言語でも動的言語っぽい書き方はできる。
単にそういう書き方を許さない空気があるだけで、空気読まずに書こうと思えば書ける。
つまり、安全を機械的にチェックしているというのは半分嘘で、
実は人間のモラルに頼っている部分が大きい。
0012デフォルトの名無しさん2011/05/22(日) 09:59:14.49
面倒なことはやらない
0013デフォルトの名無しさん2011/05/22(日) 10:48:55.63
型推論をうまくやってくれて色々省略可能にした静的言語がつおい、でFA
0014デフォルトの名無しさん2011/05/22(日) 10:50:23.60
     /: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ    ___
     /;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、  /     ヽ
    /ヽヽ: ://: :!:,X~::|: /;,,;,/: :/  リ!: ::/ノ  l`ヽl !: : |: : : :l: :l: リ / そ そ お \
   /: : ヽヾ/: : l/::l |/|||llllヾ,、  / |: :/ , -==、 l\:::|: : : :|i: | /   う う  前  |
.   /: : : //ヾ ; :|!: イ、||ll|||||::||    ノノ  イ|||||||ヾ、 |: ::|!: : イ: ::|/   な 思 が
   /: : ://: : :ヽソ::ヽl |{ i||ll"ン    ´   i| l|||l"l `|: /|: : /'!/l     ん う
 ∠: : : ~: : : : : : : :丶ゝ-―-      ,  ー=z_ソ   |/ ハメ;, :: ::|.   だ ん
   i|::ハ: : : : : : : : : : : 、ヘヘヘヘ     、  ヘヘヘヘヘ /: : : : : \,|.   ろ な
   |!l |: : : : : : : : :、: ::\    、-―-,      / : : :丶;,,;,:ミヽ   う  ら
     丶: :ハ、lヽ: :ヽ: : ::\__  `~ "      /: : ト; lヽ)   ゝ
       レ `| `、l`、>=ニ´        ,  _´ : :} `   /
         ,,、r"^~´"''''"t-`r、 _  -、 ´ヽノ \ノ   /    お ・
       ,;'~  _r-- 、__     ~f、_>'、_         |  で  前 ・
      f~  ,;"     ~"t___    ミ、 ^'t         |  は  ん ・
      ,"  ,~         ヾ~'-、__ ミ_ξ丶     |  な  中 ・
     ;'  ,イ ..          ヽ_   ヾ、0ヽ丶    l         /
     ( ;":: |: :: ..          .`,   ヾ 丶 !    \____/
     ;;;; :: 入:: :: ::      l`ー-、   )l   ヾ 丶
     "~、ソ:: :い:: :     \_  ノ ,    ヾ 丶
0015デフォルトの名無しさん2011/05/22(日) 11:12:28.80
C++に型推論が必要だと思えない
0016デフォルトの名無しさん2011/05/22(日) 11:22:35.30
C++に型推論は必要。templateやlambdaを書いてみれば分かる。
C++自体必要無いという意見は認める。
0017デフォルトの名無しさん2011/05/22(日) 11:29:18.28
templateには必要ないしそもそもlambdaとか必要ない。
マルチパラダイムを存続させたいならCとC++の間にもうひとつ言語用意すべき。
0018デフォルトの名無しさん2011/05/22(日) 11:34:21.09
Cを拡張した言語なんてこれ以上いらん
0019デフォルトの名無しさん2011/05/22(日) 11:34:36.00
Objective-C最高
0020デフォルトの名無しさん2011/05/22(日) 11:42:53.19
C++とかごった煮過ぎてプロジェクトで使えない
0021デフォルトの名無しさん2011/05/22(日) 11:43:37.66
Objective-CとかCベースである必要性がない
0022デフォルトの名無しさん2011/05/22(日) 11:53:44.47
静的 vs. 動的の話題が C++ vs. ObjC になるとかw
0023デフォルトの名無しさん2011/05/22(日) 12:08:29.69
そんなにおかしくないじゃん
0024デフォルトの名無しさん2011/05/22(日) 12:31:26.77
EclipseでPHP開発しようとしてがっかりした俺が来ました。
0025デフォルトの名無しさん2011/05/22(日) 13:05:02.46
スペルミスしても動いてしまうからなぁ。
0026デフォルトの名無しさん2011/05/22(日) 13:09:09.15
C言語もポインタ経由したりすると型無視されたりしてしまうし
C++もテンプレート使いまくると動的型みたいな状態になるな
0027デフォルトの名無しさん2011/05/22(日) 13:17:29.48
え?え?
0028デフォルトの名無しさん2011/05/22(日) 14:00:02.33
>>26
ならんが?w

それに使い方の問題は関係ない。
静的言語であっても動的言語みたいなことはできる。
だが逆に動的言語では静的言語みたいなことはできない。
0029デフォルトの名無しさん2011/05/22(日) 14:15:59.09
せやな
0030デフォルトの名無しさん2011/05/22(日) 14:57:37.69
>>28
できるよ。
0031デフォルトの名無しさん2011/05/22(日) 15:02:38.60
うそつきました
0032デフォルトの名無しさん2011/05/22(日) 15:34:20.63
>>28
オプションを両建てできてもあんまり嬉しくない
0033デフォルトの名無しさん2011/05/22(日) 15:54:51.48
動的な言語ならメタな機能を使って、
関数の引数や返り値の型だとか変数の型をアノテーションで宣言できるし、
モジュールロード時に型検査することもできる。

で、動的言語だと何ができないの?
0034デフォルトの名無しさん2011/05/22(日) 15:58:21.42
静的チェック・メモリの自前管理
0035デフォルトの名無しさん2011/05/22(日) 15:59:37.92
どこかで Ruby 「で」GC を実装する話を読んだ事がある希ガス
0036デフォルトの名無しさん2011/05/22(日) 16:02:52.01
>>34
どうして>>33を読んで静的チェックが可能だと理解できないの?
0037デフォルトの名無しさん2011/05/22(日) 16:08:12.04
>>33
それができるのはなんて言語だよw
0038デフォルトの名無しさん2011/05/22(日) 16:10:03.14
つーか実行時にできてもしょうがないんだよな。
実行前に検査できるのが重要であって。
0039デフォルトの名無しさん2011/05/22(日) 16:10:54.11
既にあるのかどうかは知らんが、たぶんpythonのアノテーションなら可能だと思うが。
0040デフォルトの名無しさん2011/05/22(日) 16:11:37.14
>>38
どうして>>33を読んで実行前にチェックが可能だと理解できないの? 馬鹿だから?
0041デフォルトの名無しさん2011/05/22(日) 16:21:49.66
静的チェックができる動的言語ってC++のことじゃん
0042デフォルトの名無しさん2011/05/22(日) 16:23:43.44
動的言語のメリットは記述が簡潔になる事なのに、
簡潔じゃない言語で動的な仕組みが使えても嬉しくないなあ
0043デフォルトの名無しさん2011/05/22(日) 16:23:58.45
静的に決めないから動的なんであって。
0044デフォルトの名無しさん2011/05/22(日) 16:25:20.67
記述の簡潔さのために可読性や保守性や静的なエラーチェックを下げるのか。
0045デフォルトの名無しさん2011/05/22(日) 16:31:54.16
>>40
だからなんて言語か言えって(爆笑)
怖いのか? お前の脳内言語か?
0046デフォルトの名無しさん2011/05/22(日) 16:32:07.69
可読性は下がらない
0047デフォルトの名無しさん2011/05/22(日) 16:34:22.41
メンバ変数が追加できる言語は宣言の概念がないか複雑なので可読性が下がってる。
0048デフォルトの名無しさん2011/05/22(日) 16:37:39.74
>>45
書いてあるのが読めないの?気が狂ってるの?
さっさと病院いけやキチガイ
0049デフォルトの名無しさん2011/05/22(日) 16:38:02.43
Objective-Cなんて昔は注目もされなかった言語だが。


それよりOS/9とかまだあるの?
0050デフォルトの名無しさん2011/05/22(日) 16:39:06.52
静的言語だと、よく使われる単語であるget()というメソッドをfetch()に
変えようと思ったとき使用箇所が何百とあったとしても、
すべてを安全に変更できるし、エディタの力を借りればほんの数秒で終わる作業だが
動的言語ではそれができない。
0051デフォルトの名無しさん2011/05/22(日) 16:41:28.81
最近はPythonのように、もともと動的言語だった物を
静的言語にしようという流れがある。

やっぱりそれは動的言語では安全なソフトを作れないからなのだろう。
0052デフォルトの名無しさん2011/05/22(日) 16:43:35.87
>>50
そのコードを使うのがお前一人なら、という前提が抜けてるぞ。

ま、ホビーストならそれでいいんじゃないか?
しかしチームで開発するようになったら、そんなナイーブな発想じゃだめだ。
ましてや分散レポジトリを使うような開発になったら、そんな変更を勝手にやるカスは追い出されるぞ。
0053デフォルトの名無しさん2011/05/22(日) 16:43:56.17
ActionScriptでもその流れ。
浸透すればするほど大規模に使おうとして静的になっていく。
0054デフォルトの名無しさん2011/05/22(日) 16:44:28.70
>>51
違うよ。
動的言語はメタ機能が充実していることが多いから、
その気になれば静的言語の機能を取り入れることが可能なだけ。
0055デフォルトの名無しさん2011/05/22(日) 16:46:58.32
>>52
50じゃないが大規模で動的言語自体危険なんだが。
変更の必要性を否定したら硬直化して一定規模以上で破綻するし
変更に安全性が保証されなかったらこれまた破綻する。
0056デフォルトの名無しさん2011/05/22(日) 16:47:50.84
その気になればw
0057デフォルトの名無しさん2011/05/22(日) 16:49:05.26
>>52
勝手にやるわけ無いだろ?
それは許可を得るというチーム開発の
マナーの話であって、

メソッド名を簡単に変えるという技術的な話とは一切関係ない
0058デフォルトの名無しさん2011/05/22(日) 16:50:59.32
>>54
> 動的言語はメタ機能が充実していることが多いから、

動的言語のメタ機能っていうのは、実行時にしかわからんメタ機能だ。

実行前に分かるメタ機能 = 静的言語が備えている機能
0059デフォルトの名無しさん2011/05/22(日) 16:52:48.80
決して愛用の動的言語名は明かさない。
0060デフォルトの名無しさん2011/05/22(日) 16:54:51.86
>>53
安全は規模に反比例する
大規模に使おうとする流れは危険だ
0061デフォルトの名無しさん2011/05/22(日) 16:57:45.37
動的言語だと、このメソッドがどこで使われてるか?の判断に
grep使うしか無いからな。

だから、英単語一つのメソッドは作らないとか
メソッドの頭にはクラス名を付けるのような
コード規約がよく使われている。

たとえば、obj.get_customer や obj.custmer_getだと
grepで関係ないものまで引っかかったりしないでしょ?
0062デフォルトの名無しさん2011/05/22(日) 16:58:56.48
>>60
おまえは最新OSもGNUも使うな
0063デフォルトの名無しさん2011/05/22(日) 17:13:08.44
Javaが安全すぎる
異論は認めない
0064デフォルトの名無しさん2011/05/22(日) 17:23:29.57
やはり、Javaか
0065デフォルトの名無しさん2011/05/22(日) 17:27:17.54
ちか、動的言語と動的型付けって意味が違うよね。>>1はバカなの?
0066デフォルトの名無しさん2011/05/22(日) 17:36:19.14
×ちか、
○つか、
0067デフォルトの名無しさん2011/05/22(日) 17:41:39.08
>>61
あるメソッドがどこで使われてるか実行時にしか分からないのは、
静的言語でもポリモーフィズムとかを使ったら一緒
変数の型付けの問題じゃない
0068デフォルトの名無しさん2011/05/22(日) 17:48:46.93
>>67
> あるメソッドがどこで使われてるか実行時にしか分からないのは、
> 静的言語でもポリモーフィズムとかを使ったら一緒

お前が言っている「分からない」ってのは一つに絞れないって意味だろ?

俺がいってるのは、一つに絞りたいということではなく
関係がある物を知りたいってことだよ。

ポリモーフィズムを使った場合、実装された関数だけを知りたいとは限らない。
インターフェースも知りたいし、そのインターフェースを使ってる関数も知りたい。
静的言語ならそれが見つかる。

だから、お前がいってるのは何の問題にもなってないよ。
0069デフォルトの名無しさん2011/05/22(日) 17:53:31.68
>69
へー、じゃあ動的言語で何が問題なの?
0070692011/05/22(日) 17:54:07.75
間違えた
>>68で
0071デフォルトの名無しさん2011/05/22(日) 17:54:26.40
検索すればわかるじゃん
0072デフォルトの名無しさん2011/05/22(日) 18:01:24.21
>>69
たとえばgetでgrepしたとき
全く無関係のgetまで見つかって、
コードを修正するとき、どれが影響あるものなのか
調べるのに時間がかかる。
0073デフォルトの名無しさん2011/05/22(日) 18:21:24.87
>>72
基本的に同意なんだけど、
動的言語でも名前空間使ったりして読む範囲を減らす努力はしてる
0074デフォルトの名無しさん2011/05/22(日) 18:26:28.45
>>72
interface型でgetメソッドを宣言していて、
継承関係のない複数のclassがそのinterfaceを実装していたら、
結局同じことになるぜ?

こんなこともわからずに静的型マンセーしてるの?
恥ずかしいねえ
0075デフォルトの名無しさん2011/05/22(日) 18:32:49.45
Pythonが静的型になったとか、このスレの静的型厨は頭がおかしいの?
0076デフォルトの名無しさん2011/05/22(日) 18:35:25.38
>>74
ならないよ。少なくとも、
「interfaceを実装している複数のクラス」だけを見ればいい
これらはそもそも無関係のクラスではない。
0077デフォルトの名無しさん2011/05/22(日) 18:36:56.73
>>73
名前空間使っても参照使われたらアウトだね。

インスタンス変数->メソッド ってなったとき
名前空間は役に立たないものになる。
0078デフォルトの名無しさん2011/05/22(日) 18:41:28.77
>>76
「interfaceを実装している複数のクラス」が相互依存してると考えるの?
interfaceってそういうのじゃないぜ
0079デフォルトの名無しさん2011/05/22(日) 18:44:42.62
>>78
interfaceに依存してるだろ。

例えばあるクラスのgetをfetchに変えようとしたとき、
静的言語なら、このクラスを変えただけでは駄目だ!
interfaceも変えなければ駄目だ!と分かるし

interfaceを変えただけではでだめだ!
このinterfaceを使っているすべてのクラスでも変えないと駄目だ!
ってわかるだろ?

これでも関係ないって言える?
0080デフォルトの名無しさん2011/05/22(日) 18:46:47.89
しかし、そんなことで困る状況って、そんなにあるもんなの?
そもそもがスパゲッティな作りじゃない限り、それで困ることってある?
探すときも、まずクラス名やインターフェース名で探してからメソッド名で
絞り込めばいいわけだし。
0081デフォルトの名無しさん2011/05/22(日) 18:47:54.59
>>80
そりゃ、個人で作っていたり
小さいプログラムなら、
時間はかからないだろうさ。
0082デフォルトの名無しさん2011/05/22(日) 18:48:23.72
>>77
Pythonだとクラスじゃなく関数使うことも多い
0083デフォルトの名無しさん2011/05/22(日) 18:48:37.80
>>79
ユニットテストクラスつくっとけや!
0084デフォルトの名無しさん2011/05/22(日) 18:49:56.12
>>83
ユニットテストを作る時間がかかる

できるできないの話をしてるんじゃないんだよ。
時間がかかるかどうかの話。

ユニットテストを使わないでも分かることを
ユニットテストを使ってからじゃないとわからなければ、
それは時間がかかるということ。
0085デフォルトの名無しさん2011/05/22(日) 18:51:51.57
ユニットテストを使っていても
結局は「ユニットテストで使っているgetを手動で書き換える」という
作業が増えてるだけなんだけどな。
0086デフォルトの名無しさん2011/05/22(日) 18:54:55.56
動的言語の生産性 - テスト書く手間 > 静的言語の生産性

なら動的言語を使えばいいさ
0087デフォルトの名無しさん2011/05/22(日) 18:55:54.35
テストも書いたらメンテしなきゃいけないからな。

書かずに同じ効果が得られるのなら
書かないほうがいい。
0088デフォルトの名無しさん2011/05/22(日) 18:56:45.28
動的言語の生産性 は
静的言語より劣るよ。

つーか動的言語が生産性高いって
何を根拠にそう思ってるんだろうな。
0089デフォルトの名無しさん2011/05/22(日) 19:01:04.78
そんなら、Webサービスも、バッチ処理も、コマンドラインツールも、全部C/C++でつくればいいじゃん。
0090デフォルトの名無しさん2011/05/22(日) 19:03:20.35
>>89
だからC/C++は別の問題、文字列が扱いにくいのと
メモリ管理が手間がかかるんで、Javaで作ってるよ。
0091デフォルトの名無しさん2011/05/22(日) 19:07:05.52
つーか静的言語だろうが何だろうがテストは書けよ
0092デフォルトの名無しさん2011/05/22(日) 19:08:19.06
誰がテストを書かないっていったんだ?
それにテストを書く前に分かる方が優れてるだろ?
0093デフォルトの名無しさん2011/05/22(日) 19:09:03.71
>>88
静的言語で総称型使って頑張ってるのを見ると
動的言語は楽なんだなって思う
0094デフォルトの名無しさん2011/05/22(日) 19:11:43.10
総称型しかないから総称型で頑張ってるのは
動的言語の方だろう?
0095デフォルトの名無しさん2011/05/22(日) 19:13:12.38
>>90
テキストファイルの処理とか、正規表現使ったりとか、置換処理とか、パース処理とか、日付の処理とか、
これ全部Javaでやるの? 面倒くさくない?
0096デフォルトの名無しさん2011/05/22(日) 19:14:13.70
Javaがウンコだからといって
静的言語全部がウンコってわけじゃない
0097デフォルトの名無しさん2011/05/22(日) 19:15:15.14
>>95
全部普通にできるし。
0098デフォルトの名無しさん2011/05/22(日) 19:16:35.28
Perlで一行でできることが、Javaだと普通に10行ぐらいかかるな。
0099デフォルトの名無しさん2011/05/22(日) 19:17:07.01
>>97
できる出来ないの話はしてないんじゃね?
だって動的言語でもテスト書けば安全なプログラムは書ける
0100デフォルトの名無しさん2011/05/22(日) 19:20:15.07
良スレ
0101デフォルトの名無しさん2011/05/22(日) 19:22:32.47
>>98
かからねーよw

>>99
だから、テストは実行しなければわからないんだから
そもそもレイヤーが違うもんだってば。
■ このスレッドは過去ログ倉庫に格納されています