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

動的言語の問題点、大規模開発でテスト工数が増大

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/04/24(火) 05:02:52.54
 しかし、RubyとRailsの限界に気がついてしまったのです。Rubyのランタイムは
非常に遅いため、Rubyで作成したアプリケーションの納品をためらったことがあります。
Rubyはプロトタイプ作成用に使い、納品用にJavaで作りなおさなければなりませんでした。

 RubyとRailsのプロジェクトが数千行の規模を超え、チームに新しいメンバーを追加したときに、
動的言語の問題が明らかになって来ました。私たちは、コーディングの時間の半分をテスト作成の
費やさなければならなかったのです。Railsによって得られた生産性の向上は、テスト作成の作業に
失われてしまいました。作成したテストの多くは、Javaであれば不必要なものでした。テストの大半は、
リファクタリングによってメソッド名やパラメータの数を変更した際に、呼び出し元が
正しく変更されているかを確認するためのものでした。

また、Rubyでもチームメンバーが2名から4名であれば、メンバー間のコミュニケーションは
非常にスムーズでした。しかし新しいメンバーをチームに参加せせようとすると、
これまでチームで培ってきたノウハウを新しいメンバーにうまく伝えることが出来なかったのです。
0237デフォルトの名無しさん2012/06/09(土) 12:39:48.04
いやいや、馬鹿すぎるのは>>235だろ
馬鹿過ぎて痛々しいレベルだわ
>>234がコスト持ち出してフォロー入れてる時点で気付けよ
0238デフォルトの名無しさん2012/06/09(土) 12:42:29.51
はいはい、自己フォロー乙
恥ずかしい奴だ
0239デフォルトの名無しさん2012/06/09(土) 12:45:45.85
進化がとまっているJavaと比べるのは酷だ。
比べるならC#
0240デフォルトの名無しさん2012/06/09(土) 12:48:23.25
俺の中ではJavaはJDK 1.0.2の時点でもう終わってた
0241デフォルトの名無しさん2012/06/09(土) 12:49:41.01
・Javaのジェネリクスは型パラメータにプリミティブ型を指定できない
・オートボクシングによるプリミティブ型からオブジェクト型への変換は
  コスト的に許容できないケースがある

という理由によって>>230の定義になってるわけだが

>>231>>232>>235>>236はプリミティブ型にもジェネリクスが使えると思ってるアホ
0242デフォルトの名無しさん2012/06/09(土) 12:56:45.10
>>241
オートボクシングを使えばいい。
コストに関して言えば、オートボクシングを使ったとしても
動的言語よりも速い。

論破完了www
0243デフォルトの名無しさん2012/06/09(土) 12:58:55.56
このスレで分かった事

・Javaはヌルポあるし、それ以外でも実行時型エラーを簡単に起こせるよ!
・ラムダ式の糖衣構文はJava8まで待ってね!今はJava7だよ(ドカタ開発では未だにJava4の場合すら……)
・プログラマのレベルは底辺だよ!まともなプログラマはScala使ってるし!

というわけで、静的型付け言語の比較するときにJavaを使うのは辞めましょう
弱い者いじめは良くない事ですよw
0244デフォルトの名無しさん2012/06/09(土) 13:00:28.87
>>243
実行時にしかわからないエラーがあるのだから
当たり前の話。

実行時にしかわからないエラーってのは
対応に時間が掛かる。

だから静的に分かるようにし
減らすってのが重要なんだよ。

お前は論点がわかっていない。
02452342012/06/09(土) 13:02:53.34
>>235-236
http://ideone.com/P5SxK
>sum=1774919424 time=275msec
>sum=1774919424 time=3984msec

定義側はジェネリクスを使った方が楽になるが
使用側のコーディングコスト及び実行コストが高くなる
そして都度定義するより標準で>>230のような定義があった方が便利
0246デフォルトの名無しさん2012/06/09(土) 13:06:17.18
>>242
>オートボクシングを使ったとしても、動的言語よりも速い
Javaの中の話なのに完全に意味不明。
0247デフォルトの名無しさん2012/06/09(土) 13:11:32.82
>>246
それはJavaは他の言語と比べて
速いのは当たり前ということか。
0248デフォルトの名無しさん2012/06/09(土) 13:12:51.80
>>246
Javaが他と比べてダサいって話なんだから
Javaの中の話ではない。

よってオートボクシングを使えばぜんぜんダサくないし、
それでも他の動的言語よりも速い。
0249デフォルトの名無しさん2012/06/09(土) 13:17:33.99
>>240
老害乙
0250デフォルトの名無しさん2012/06/09(土) 13:30:27.44
>>248
>>234-237 >>241は>>230のリンク先の設計意図である
プリミティブとジェネリクス&オートボクシングの話
他言語は関係ない
0251デフォルトの名無しさん2012/06/09(土) 13:35:55.05
そういう話にしないと気が済まない?w
スレタイ見ろよ。
0252デフォルトの名無しさん2012/06/09(土) 13:39:43.75
ああ全てのレスがスレタイに沿ってると思ってるわけか。
0253デフォルトの名無しさん2012/06/09(土) 15:14:38.05
658 名前:デフォルトの名無しさん[sage] 投稿日:2012/06/09(土) 14:30:03.83
実行前にわからないことをなくせというがね。
小さいスクリプトなんてのは実行前にわからない事だらけなんだ。
小さいから書き捨てもする。小さいからぱっと見ればすべてが分かる。

だからそんなのまで静的がどうとか言ったりはしない。
ただ大規模(何人もの人が何ヶ月もかかって作るもの)で動的言語はねーよ。

コードのほんの数行(全体の0.01%ぐらい?)を見せられて、
ここに変なオブジェクトが入る可能性はありますか?
ここを変更するときに影響が及びそうな部分はどこですか?
聞かれてもすぐには答えられんでしょ。
0254デフォルトの名無しさん2012/06/09(土) 15:46:12.74
動的言語で大規模開発してる人って居る?
0255デフォルトの名無しさん2012/06/09(土) 15:50:18.10
開発者の人数が知りたいね。

ちょっとしたパッチ送る人いれないで、
それなりの時間を割いて開発してる人の数。
0256デフォルトの名無しさん2012/06/09(土) 15:59:09.22
>>223
>>213でも結構読みづらいんじゃないかと思ってたところをwww
とりあえずdoが{なのかな・・・?w(講義はいりません、自分で調べるからw)

なんか、他の言語のクロージャも見たくなってきたな。
>>213と同じ、ローカル変数にクロージャ経由で何らかの数を足すプログラム。
関数型言語は、まあ適当にやる方向でw

Haskellだとこうなるのね・・・ なれない言語は辛い。
http://ideone.com/6qeYD
0257デフォルトの名無しさん2012/06/09(土) 16:02:55.13
> とりあえずdoが{なのかな・・・?w(講義はいりません、自分で調べるからw)

先に調べてからかけ
0258デフォルトの名無しさん2012/06/09(土) 19:48:30.62
>>256
うわぁ……www

Haskell理解できてないなら無理して書かなくていいぞ
0259デフォルトの名無しさん2012/06/09(土) 21:48:41.77
>>223はオリジナルの>>196が汚いから仕方ない

まあ、Fooクラス等のJavaの冗長な所まで無理に>>196を真似るなら
こんな感じかな

http://ideone.com/405Em
0260デフォルトの名無しさん2012/06/09(土) 22:13:21.72
FooのサブクラスBar,Bazが定義されてないが、Haskellでは部分型は駄目なんだっけ?
0261デフォルトの名無しさん2012/06/09(土) 22:28:01.72
>>260
>>259は次のような関係になってる
HaskellのFoo (data) <=> JavaのFoo (interface)
Haskellのbar,baz (関数) <=> JavaのBar,Baz (class)


これを一段持ち上げて
HaskellのFoo (型クラス) <=> JavaのFoo (interface)
HaskellのBaz,Bar (型) <=> JavaのBar,Baz (class)
とすることも出来るけど、この例だと必要無い

部分型を上手く使う例があるならやってみるよ
ていうか面白い例プリーズ
0262デフォルトの名無しさん2012/06/09(土) 22:32:22.00
いや
> まあ、Fooクラス等のJavaの冗長な所まで無理に>>196を真似るなら
とあったのにそうなってなかったので聞いただけです
0263デフォルトの名無しさん2012/06/09(土) 22:32:26.96
>>258
お手本みせーて。
0264デフォルトの名無しさん2012/06/09(土) 22:46:31.41
>>263
はい
http://ideone.com/0d5NI

>>256はローカル変数を書き換えてないから違う
まあ、そっちの方がプログラムとしては行儀良いんだけど
0265デフォルトの名無しさん2012/06/09(土) 22:58:05.19
Pythonで挑戦してみたけど
まともな方法じゃ無理だった
0266デフォルトの名無しさん2012/06/09(土) 23:06:59.98
>>260
シグネチャが同一の関数を定義するのに何で二つも三つも型を定義するのか。
部分型は駄目っていうか部分型は不要。
0267デフォルトの名無しさん2012/06/09(土) 23:51:21.71
・・・>>258ってなんだったんだろう。
そして見つけられない$の意味・・・(ラムダ式?)

せっかくだから>>196をDで書いてみるぜ!
なんの面白みも無いけどwww
http://ideone.com/KVGVD
0268デフォルトの名無しさん2012/06/10(日) 01:12:22.78
おーすばらしー
Javaじゃなければ静的型でも短く書けるのかー(棒読み
0269デフォルトの名無しさん2012/06/10(日) 02:09:39.73
>>268
信じてない口ぶりみたいだけど、
Scalaとか見ると、本当に短く書けるよ。
0270デフォルトの名無しさん2012/06/10(日) 02:09:55.93
っていうかJavaもJava8なら短く書けるわけで。
0271デフォルトの名無しさん2012/06/10(日) 07:22:30.08
最初のバージョンで勝負するのが大規模開発であって
後で機能を増やしていいのであれば小規模でいい
0272uy2012/06/10(日) 13:50:30.79
全然短くない件について


rubyだとこうだけど、
x=0
->n{x = n % 2 == 0 ? Object.new : Object.new }

>>267
よくそんなゴミ構文に耐えられるよね
0273デフォルトの名無しさん2012/06/10(日) 14:07:21.83
Scalaや、ましてJava8(笑)で短いと言ってる連中と
LL使ってる連中で議論になるわけ無い件について
0274デフォルトの名無しさん2012/06/10(日) 15:46:13.46
>>273
でもさ、文字数が半分になっているからといって
大規模アプリを半分の時間とコストでやれますか?と
聞いたらNOっていうだろ?w
0275デフォルトの名無しさん2012/06/10(日) 15:56:16.12
>>274
その前に、スクリプト言語はパフォーマンスが悪くて却下される
0276デフォルトの名無しさん2012/06/10(日) 16:31:09.09
その前に、パフォーマンスが問われるようなシビアなシステム作らせてもらえないから大丈夫。
0277uy2012/06/10(日) 17:48:53.06
大規模開発で動的言語の問題に本当の意味で直面した奴とか
本当はそんなにいないだろ
聞き捨ての知識で知ったかぶって「あ〜そういう問題あるのか〜」ってなって適当に叩いてるだけ

本当にその問題に直面して、それを知っていれば解決策を考える議論にシフトするはずだから
0278デフォルトの名無しさん2012/06/10(日) 18:01:15.91
>大規模開発で動的言語の問題に本当の意味で直面した奴とか
>本当はそんなにいないだろ

そうだろうね。だって、選択肢に入ってこないもん。
0279uy2012/06/10(日) 18:54:35.35
そう、そして直面したらそのプロジェクトは破綻しかけるんだ
そんな大変な目にそこらの名無しが会っていると思えない
俺はいま破綻しかけてる
ゆえに俺さまのゲーム開発はプログラム面が一度ストップしてる

次の開発では
直面しないように最初から策を講じるか
静的言語でやるかの2択

このスレタイ。テスト工数が増大とは、ずいぶん控えめに書いたものだと思う
激増の間違いだろ、で結局最後は完全なテストなどしきれず「多分動くんじゃね?」といって俺様はリリースするんだろう
0280デフォルトの名無しさん2012/06/10(日) 19:31:35.49
最近はスクリプト言語でも関数型言語の真似したいのか
mapだのinjectだの高階関数だの使いまくってるけど
そんなの動的言語でやったら大規模になったとき破綻するに決まってる
0281デフォルトの名無しさん2012/06/10(日) 19:40:20.99
Railsに限らず、決められたとおりに作れば楽だけれども、
それを超えると急に難しくなる系は受託開発に向いてないと思う
0282デフォルトの名無しさん2012/06/10(日) 20:32:30.19
最近の若者にはLispも知らずにでかい口を叩くのが流行なのか?
0283デフォルトの名無しさん2012/06/10(日) 21:02:47.68
老人が想像する「大規模」の規模の小ささは異常
0284デフォルトの名無しさん2012/06/10(日) 21:32:00.26
>>283
3人くらい?
0285デフォルトの名無しさん2012/06/10(日) 22:26:14.78
Lisp は研究だけでやってろ。あとで構築し直す破目になる。
0286デフォルトの名無しさん2012/06/10(日) 23:01:38.73
時代はProlog
0287デフォルトの名無しさん2012/06/10(日) 23:04:11.53
Prologってどーやってテストするんだ?
0288デフォルトの名無しさん2012/06/10(日) 23:07:26.78
Adaが最強だろ
Ada厨が本気になったら世界が終わる
0289デフォルトの名無しさん2012/06/10(日) 23:39:48.31
>>272があんまりなので改めて>>196をrubyで。
def bar(n); proc{n + 1} end
def baz(n); proc{n * 2} end
def run(&f); (0..9).each{ |i| f[i] } end
x = bar(0)
run{ |n| p x[]; x = n % 2 == 0 ? bar(x[]) : baz(x[]) }
0290デフォルトの名無しさん2012/06/10(日) 23:48:51.28
型安全性のためのコードが追加で増えてるだけで
本質的なコード量は大差ないね。
0291デフォルトの名無しさん2012/06/11(月) 00:25:28.90
>>280
高階関数の乱用が大規模開発に向かないのは静的動的関係無いと思うな
イテレータ的機能は逆に大規模開発だろうと積極的に使っていくべき
0292デフォルトの名無しさん2012/06/11(月) 01:03:39.04
>>290
君の目は節穴か?
0293デフォルトの名無しさん2012/06/11(月) 01:06:27.76
>>292
だって変なコード入れられるよね?
実行しないとエラーがわかないよね?

数行程度のコードならいいけど、
こんなコード、アプリからすれば
全体の全体の0.01%ぐらいのコードだよ?
0294uy2012/06/11(月) 02:56:38.33
>>280
そこは破綻する原因じゃないんだけど
もしかしてmapやinject使えない人ですか

破綻する原因は>>293で言ってることの積み重ね
どんな優秀なuyでも100000個もメソッドかけば1箇所くらいはタイプミスとかしてる可能性がある
それは人よって違う
自身の書いてるソースコードに、バグの混入の可能性が低い奴じゃないと動的言語で大規模は無理
動いてたはずのコードのから、いきなりバグが見つかったとき
そのバグをチェックする技法が存在しないことを知る
そしてそれは静的言語では解決できる問題だったりする
「本当にこれリリースして大丈夫なの?」そんな不安ばかりがソースコードとともに増え続けるのが動的言語
0295uy2012/06/11(月) 03:31:12.83
Tracemonkeyの発想を借りる事になるけど、
最初は型情報をソースコード中に書いてなくても
一度でも実行すれば少なくともメソッドの引数の型くらいは分かるわけだし
型情報を実行してからメタすればいいんじゃねとか思う
最初にメタされた型以外が渡されたら警告でも出す

型が分かってるなら部分的にネイティブコンパイルも可能になる
型安全性を高めたい時のみ
.rbのソースコード本体とは別に .rb_neitive とかいう型情報のファイルをおいて
.rb_neitiveの型情報を見ながら.rbを実行させていく

.rb_neitiveはスクリプト本体をテスト走行させた時に実行したメソッドに渡された型などを集積して生成する
そしてネイティブコンパイル出来るメソッドは引数型固定してネイティブにしてしまう

これによって失うものは
def func a
end
func 1
func "test"
とかいう最初と2回目以降で違う型の引数を(基本的に)渡してはいけなくなる事
もし渡された場合は、そこでエラーとして扱って実行をとめるか、ネイティブではなくインタプリタ側のコードを実行するか

得られるものは、
.rb_neitiveに集積できたメソッドに関してだけは速度と型安全性が高まる事
0296uy2012/06/11(月) 03:49:52.32
他に動的言語で問題になるのは
n = 1
n = [] if rand(2)==0

とかだろけど、こういうのもやっぱソースファイルと行数をメモって
既存の型から変更されたらその都度ログ出力させるしかないと思う

やはり出来るとはいっても、基本的にあとから変数の型を変えるという処理はやるべきじゃないんだろ
特に一番どうにかしたほうがいいのは
obj.foo
とかやったときにobjがなんらかの要因によって型がnilになってるときにでるエラーだ
一度nil以外のオブジェクトが格納された変数が、再びnilになったらなんらかのエラーをだすべき

つうか、ユーザーが扱えるnilと言語処理系側で扱うnilは区別しなくちゃダメだろ
ユーザーがnilの代わりにfalseを扱うのでもいいけどさぁ
一度nil以外が格納されたオブジェクトに、falseの代入は許しても、次にnilが格納されたら何かあっても良いと思うよ
そもそも
obj というオブジェクトを生成したのちに
if obj  という式において偽という結果が欲しいのであれば
obj = nil とするのではなく obj.vardelete とかやって変数を消滅させて
それ以降にobj.foo とかいう記述があったらエラーくらいだすべき
0297デフォルトの名無しさん2012/06/11(月) 07:42:00.91
>>295
君が考えるような馬鹿な手法よりも
HM型推論でも実装して推論できないときにワーニングでも出したほうが1000000倍有効

>>296
ぬるぽは静的動的関係ない
0298デフォルトの名無しさん2012/06/11(月) 07:55:27.96
>>296
型はすぐ横に書いてあるからこそ可読性が高くなる。
別の場所に型の情報を保存するとかナンセンス

ぐだぐだ毎日、長文を書く時間あったら、
C#4.0とVS2012でGUIアプリでも作ってみろ

実行時パフォーマンスと開発生産性のバランスの良さがわかる。
0299デフォルトの名無しさん2012/06/11(月) 07:59:54.56
いやいや、型は省略しておいて(またはIDEで隠しておいて)
カーソル置いたとき等に何時でも見れるっていうのが
一番可読性高い
0300uy2012/06/11(月) 08:55:47.18
>>298
可読性の話はしてない
グダグダ他人の意見を否定してるくらいなら代案を出してみろよバカ

>>297
TraceMonkeyでググレカス

動的言語使ったことねーだろお前
obj =nil
obj.foo
0301uy2012/06/11(月) 09:22:52.78
思ったけど>>295 は実際、.rb_nativeっつうか、開発時にIDEが組み込んでいるべき機能か
開発中にIDEが.rb_naitiveファイルを見ながら.rbの動きを監視して
実際に公開するときは、.rbファイルだけで良い
それでバグの何割かは発見できる
ただRubyの自由度を僅かに下げる

本質的な解決になってない
やっぱアレか、あまり変数宣言をしないようにコード書くしかないな
動的言語が病院の医療機器に使われてますとかなったら、早めにそれかいたプログラマを血祭りにすべきだが
一体mrubyがどこで使われるのか興味がある
企業とかよりもこういうのは先に工学系の大学生が何か作るんだろうな
はーーー大学生は楽しそうでいいな
0302uy2012/06/11(月) 09:29:06.60
静的言語で書こうとプログラムにバグは入る
たとえば、アルゴリズム的なバグとかは動的静的関係ない

動的言語で書いていると、実はそこら辺のバグ混入率は
静的言語よりも減っていると思うが、あまり言及されていない
アルゴリズムの思考に型は不必要だから

違う種類のバグが入るようになるに過ぎない
しかし、動的言語が叩かれる要因は「頑張れば」出来るだろっていう事が、
実装されていない事によるストレスだろう
基本的にネット上に存在する動的言語リソースは静的言語を下回るからしょうがない

実際、静的だろうと動的だろうと、どちらも進んでいけば同じ右から中央に近づくか、左から中央に近づくかの差でしかない
ただ俺は、左から(動的)から中央に近づいたほうが楽だよって言ってる
人は苦労をしたがる生き物だから仕方ないか
バカは効率を理解しない   のではなく、わざわざ効率の悪いほうへ行く
それによってなんらかの精神的バランスを取っちゃってるんだから、周りがなに言ってもだめだ
0303デフォルトの名無しさん2012/06/11(月) 10:08:55.93
>>291
お前そういうことは、>>196みたいにまともに動きやしないコードでも
コンパイル時点でエラーをきちんと出せるようになってから言えと。
0304デフォルトの名無しさん2012/06/11(月) 12:01:57.36
動的言語で型宣言なんて動的言語を使う意味ない。
0305デフォルトの名無しさん2012/06/11(月) 12:05:28.89
部分的な型宣言はあってもいいと思うよ
それができると動的、静的のカテゴリーがつながった言語が誕生する
0306デフォルトの名無しさん2012/06/11(月) 12:13:55.28
それVBやんけ
0307デフォルトの名無しさん2012/06/11(月) 12:19:12.28
>>300
> 一度でも実行すれば少なくともメソッドの引数の型くらいは分かるわけだし
> 型情報を実行してからメタすればいいんじゃねとか思う

これじゃテストで見つかるような型エラーしか見つからないだろう
まったく型安全性が向上していない
最適化と型検査の区別がつかないなんて、君は本当に馬鹿だな


> 動的言語使ったことねーだろお前
> obj =nil
> obj.foo

Object x = null;
x.toString();
0308uy2012/06/11(月) 12:54:23.05

本当にズレたバカだな

レスするんだったらまともに全文読んで意味を理解してからレスしろよ


>それでバグの何割かは発見できる
>思ったけど>>295 は実際、.rb_nativeっつうか、開発時にIDEが組み込んでいるべき機能か
0309uy2012/06/11(月) 13:00:14.70
C#、C++の言語仕様を改めてみてみると、
静的言語で開発効率が〜とか、やはりネタだと思ってしまった
ネタじゃないとするならば、よほど何も知らずに語っているとしか考えられない
動的言語と静的言語を見比べて何も思わないのであれば、
もう いいんじゃねえかな
まともな判断できない常時酔っ払いみたいな奴に一々教えてやるほど優しくないよ俺
それが効率良いと思ってるなら勝手に使ってろw
俺は一段上のフィールドの問題の解決に勤しむから、LL論外未経験の初心者はレスしてこないでよい

しつこいようだが、もう一度いう
Tracemonkey でググレサル
0310デフォルトの名無しさん2012/06/11(月) 13:03:29.37
君はHindley-Milner型推論でググらなくていいよ
どうせ理解できないから
無学低能は哀れだね
0311デフォルトの名無しさん2012/06/11(月) 13:04:28.41
>>302

> 動的言語で書いていると、実はそこら辺のバグ混入率は
> 静的言語よりも減っていると思うが、

データがないならそれはお前の妄想。
0312デフォルトの名無しさん2012/06/11(月) 13:05:06.65
uyは性能を考慮しないバカだし、議論にならないな
可読性もまったく気にしないようだしただのアホだわ

言語仕様ながめたくらいでわかった気になってるしw
0313uy2012/06/11(月) 13:17:19.28
社畜からしてみれば、動的言語が使いたくなったって
仕事では静的言語で開発するしか道がないから必死になるのもわかる
そもそも、動的言語の方が効率が出る!とかいうことを認識してしまったら
今日、今やってるこのプログラミングとはなんなのだろうか、と考えてはじめちゃうんだろうからな

まぁ無様で可愛そうな人たちだよね
そうやって、気づかないように気づかないようにやっていくしかない
ああ いいよ やってろ
そして、せいぜい「同意者」の多いこの社畜だらけの低レベルbbsで騒いで
名無しからの同意を得て安心感に浸れ
ただ、俺を巻き込むな

罪知らぬ夢の壁に僅かに爪を立てよ
0314デフォルトの名無しさん2012/06/11(月) 13:20:30.07
でもね。Linuxとか静的言語で作られてるからね。
0315uy2012/06/11(月) 13:23:45.36
だーから、
<<初心者>>でお前らは、
俺に
二度と話かけんなよ

Linuxが静的言語で作られているからなんだ?
お前らの人生にそれが何か関係あるのか?
関係ねーものばかり見てんじゃねえよ

お前らのような論外初心者は、俺にとっても関係ない、 以上だ
0316デフォルトの名無しさん2012/06/11(月) 13:26:34.09
たいていの有名なアプリは
静的言語で作られてるね。

開発しやすいからだろうね。
0317デフォルトの名無しさん2012/06/11(月) 13:28:33.52
動的言語が効率が悪いのは
修正するときなんだ。

短いコードをさくっと書くときは
修正はほとんどしないから楽だろうね。

でも大規模開発だとそうはいかない。
一回リリースしてそれで終わりじゃないから。
最初に作った人と違う人が修正しないといけないことも多い。
そういったときにすぐに影響範囲が調べられる静的言語が強い。
0318デフォルトの名無しさん2012/06/11(月) 13:31:07.08
ちょいと仕事の効率上げる(俺様)ツールは動的言語で
ちゃんとしたアプリは静的言語で
0319デフォルトの名無しさん2012/06/11(月) 13:36:08.61
>>315
型を宣言する必要性も理解できず、やりたくないといっている奴が
なんでダラダラと長文書いてるのwwww
0320uy2012/06/11(月) 13:40:19.43
え。
>二度と話かけんなよ

0321デフォルトの名無しさん2012/06/11(月) 13:41:39.46
型を省略したからって
型がないわけじゃないからね。

例えば。コードの中で
obj.foo()、obj.bar(123) なんてコードを書いていれば
このobjに入るのは、fooと数値引数を取るbarがあるものだけ。
つまり、fooとbarを持った型であるということ

あとは、コメントを書いておけばわかりやすいよね。
このコードでobjのfooとbarを使いますって
書いてなければ何を使っているのか目で追って調べなきゃならない。
これが動的言語の効率の悪さ。
0322デフォルトの名無しさん2012/06/11(月) 13:42:28.91
>>320
可哀想に。お前の要求は
ことごとく破棄されるw
0323uy2012/06/11(月) 13:45:01.02
322は俺に嫌われる事にも気づけずに馴れ合いしようとしてくる
気持ち悪い

動的言語の問題点、何も考えられない奴はいいから静的言語使ってろ
もう一生使わなくていいから
0324デフォルトの名無しさん2012/06/11(月) 13:47:41.63
uyさんは寂しがり屋なツンデレだからな
0325デフォルトの名無しさん2012/06/11(月) 13:47:45.07
>>323
お前は道端のアリが
俺のことをなんて思っているのか
いちいち気にするのかい?
0326uy2012/06/11(月) 13:48:35.80
せっかく良レスかいてんのに埋もれてるからメモあげ
> どんな優秀なuyでも100000個もメソッドかけば1箇所くらいはタイプミスとかしてる可能性がある
> それは人よって違う
> 自身の書いてるソースコードに、バグの混入の可能性が低い奴じゃないと動的言語で大規模は無理
> 動いてたはずのコードのから、いきなりバグが見つかったとき
> そのバグをチェックする技法が存在しないことを知る
> そしてそれは静的言語では解決できる問題だったりする
> 「本当にこれリリースして大丈夫なの?」そんな不安ばかりがソースコードとともに増え続けるのが動的言語
>>294,>>295,>>296

さて、この問題をどうするか
0327デフォルトの名無しさん2012/06/11(月) 13:48:58.54
道端のアリでもおもちゃになる。
でもそいつが俺のことをどう思おうが気にもしない。
0328デフォルトの名無しさん2012/06/11(月) 13:51:26.75
>>326
> さて、この問題をどうするか
余計に時間をかけるしか無いな。
0329uy2012/06/11(月) 14:01:51.75
ひとつは、外部ツールによって型チェックをどうにか行わせる技法

もうひとつは、これかなり別の方向で大変だけど
雛形つうか、特定のメソッド郡を持つクラスをまず定義し、
アルゴリズムの全てをそのクラスの組み合わせのみによって記述する
それによって、全てのクラスとその全てのメソッドをテストが可能になるようにさせる

これをやろうとすると、動的でも静的でもなく違うものになる
このプログラミングの条件としては、
・ソースコード中に条件分岐を入れない事
っていうありえない制約を作る
条件分岐なんてあるからテストが上手くいかない
つまり、HTML
0330デフォルトの名無しさん2012/06/11(月) 14:07:36.50
短いプログラムだと動的言語のほうが効率がいいが
大規模になるとその効率の良さが目立たなくなる。
(逆に型がないから修正の効率の悪さが目立ってくる)

その理由をわかりやすく説明する。
例えば文字列の中に含まれている数値を配列で取得する処理が必要だとする。
正規表現がある言語ならぱぱっとかけるが、
ない言語では長いコードが必要になる。

だけどこれが大規模開発だとコードの圧縮が可能になる。
つまり長いコードをまとめて関数にしておけば、
nums = getnums(str)
正規表現がなくても、たったこれだけのコードで処理がかけるようになる。
さらに意図が明確で、毎回正規表現をコピペする必要もない。

大規模開発の時間があれば、ライブラリを作ったり使ったりすることで、効率の差が簡単に埋まる。
0331デフォルトの名無しさん2012/06/11(月) 14:08:28.18
>>329
あと何レスあれば
そこまでやるのなら、最初から静的言語を使ったほうが良い
という答えにたどり着きますか?
0332uy2012/06/11(月) 14:10:07.16
ソースコード中に制御構文なしでどこまでのプログラムが作れるか?
という方向性に進んでも良いと思ってる
でもまだその時期じゃないんだろうな
ならば、動的言語をいかに使えるものにさせようかというよりも、

プログラミングの概念に制御構文が不必要という事実に世界を気づかせ
その方向に導かせるための最短ルートの提供が最も好ましい
0333デフォルトの名無しさん2012/06/11(月) 14:11:45.21
至高のノードプログラミングで自分の開発にお入りなさい
0334デフォルトの名無しさん2012/06/11(月) 14:11:58.57
>>329
まさに動的言語の欠点だね。

変数の中身がAという型と決まっていれば、
Aという型の状態のみを考慮すればいい。

しかし変数の中身が、Aの場合もあるし
Bの場合もあるし、Aにちょっと手を加えたものの場合もある
なんてことになると、いろんな状態を考慮しなければならない。

要するに状態の数、条件分岐の数だよ。
動的言語だと、オブジェクトの取りうる
状態が多いからテストも大変になる。
0335uy2012/06/11(月) 14:14:39.91
>>330
一理ある

>>333
それは2世代先、今話してるのは1世代先
空欄となっていた1世代先の技術が今埋まった
0336uy2012/06/11(月) 14:18:53.10
テストも大変になる(キリッ)
じゃなくて

テストできねーんだよカス
実行させて正しく動くかどうか確かめる目デバッグしか、動的言語は出来ない
至極単純
■ このスレッドは過去ログ倉庫に格納されています