動的言語の問題点、大規模開発でテスト工数が増大
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/04/24(火) 05:02:52.54非常に遅いため、Rubyで作成したアプリケーションの納品をためらったことがあります。
Rubyはプロトタイプ作成用に使い、納品用にJavaで作りなおさなければなりませんでした。
RubyとRailsのプロジェクトが数千行の規模を超え、チームに新しいメンバーを追加したときに、
動的言語の問題が明らかになって来ました。私たちは、コーディングの時間の半分をテスト作成の
費やさなければならなかったのです。Railsによって得られた生産性の向上は、テスト作成の作業に
失われてしまいました。作成したテストの多くは、Javaであれば不必要なものでした。テストの大半は、
リファクタリングによってメソッド名やパラメータの数を変更した際に、呼び出し元が
正しく変更されているかを確認するためのものでした。
また、Rubyでもチームメンバーが2名から4名であれば、メンバー間のコミュニケーションは
非常にスムーズでした。しかし新しいメンバーをチームに参加せせようとすると、
これまでチームで培ってきたノウハウを新しいメンバーにうまく伝えることが出来なかったのです。
0002デフォルトの名無しさん
2012/04/24(火) 05:32:46.72Javaで作ったプログラムをRubyで書き直し
プロジェクトが大きくなりメンテナンス不能のなって
結局またJavaで書き直し
0003デフォルトの名無しさん
2012/04/24(火) 07:36:01.190004デフォルトの名無しさん
2012/04/24(火) 08:42:09.250005デフォルトの名無しさん
2012/04/24(火) 09:11:54.61これは「Scalaプログラミング入門」3ページからの引用ですが、
RubyがJavaに比べて一方的に劣っていると誤解させる恣意的な引用ですね。
筆者はScalaがJavaとRubyの長所を併せ持つとしか主張していません。
そしてScalaが関数型言語でもある事を最も重要な事としています。
筆者の考えがより正確に伝わるように前後を引用します。
直前の記述:
1996年、Javaとの初めての出会いは、まさにお告げでした。
メモリの解放について悩まなくても済みます。Javaにはまともな例外処理機構があります。
一夜にして、私が作ってきたプログラムで発生した欠陥のうち、70%がすべて解決されたのです。
それから長い間、私はJavaを使いつづけ、愛してきました。
(中略:JVMはどんどん速くなった)
JVMが成熟してきたのに対し、Java言語は長年にわたり、成熟することができませんでした。
Javaの文法は停滞し、JavaのWebアプリケーションフレームワークは、どんどん肥大化してきました。
フィールドの定義や、フィールドをもとにHTMLフォームを生成するなどの単純なことを実現するだけでも、
JavaやXML、その他の設定ファイルに書かなければならない量はどんどん増えてきています。
ほとんどのプロジェクトでJavaを使っていましたが、Javaに対しての失望感は募っていくばかりでした。
(中略:ジェネリクス導入により、補完機能のあるIDEでないとコーディングできなくなった)
自分の中にあるアイデアを、よりシンプルに、より直接的に表現できるもっと良い方法がないだろうか?
私は答えを探し始めました。そして、RubyとRailsを見つけました。これこそ自由です。
Rubyでは、はるかに少ないコードで自分の考えを表現できます。
RailsはSpringMVCや、Hibernateなどその他の
「効率的な」Webフレームワークよりも、ずっとずっと簡単です。
RubyとRailsを使うことで、頭の中のコンセプトを、より短い時間でより多く実現できます。
C++からJavaへと乗り換えたときに似た、開放感を覚えました。
0006デフォルトの名無しさん
2012/04/24(火) 09:12:25.96私は、新しい言語と開発環境を探し始めました。
Rubyの豊かな表現力と、Javaの高いパフォーマンスを併せ持つ言語を探していました。
そして2006年11月、出会ったのがScalaです。
Scalaは表現力とパフォーマンス両方を兼ねそなえているだけでなく、
それ以上の可能性を感じさせてくれたのです。
(中略:Scalaは高速でJavaと互換性がある)
最も重要な事は、Scalaはこれまでと違ったプログラムの方法や考え方を教えてくれたことです。
Scalaを知ったおかげで、バッファーや構造体、オブジェクトの割り当てや、
これらのメモリ操作について考えるのをやめました。
その代わり、私の作るプログラムのほとんどは、
インプットからアウトプットへの変換ととらえられることを学びました。
Scalaは、簡潔でモジュール化されたコードを、
メンテナンス可能な形でまとめられるツールを与えてくれました。
しかも、JavaやRubyを使う場合よりも、はるかに複雑なロジックを記述できます。
2年以上Scalaを使いつづけ、愛し続けた結果、後悔していることが1つだけあります。
それは大学時代にLispを学ばなかったことです。
大学院時代にプログラミング言語理論についてのコースをとっておくべきでした。
0007デフォルトの名無しさん
2012/04/24(火) 10:28:20.920008デフォルトの名無しさん
2012/04/24(火) 10:36:03.49筆者の考えがより正確に伝わるように引用します。
「テストの大半は、リファクタリング」
0009デフォルトの名無しさん
2012/04/24(火) 11:05:54.590010デフォルトの名無しさん
2012/04/24(火) 11:41:28.29数千→数万になったって意味じゃね?
0011デフォルトの名無しさん
2012/04/24(火) 12:11:30.690012デフォルトの名無しさん
2012/04/24(火) 12:17:36.92移行とかに慣れないうちはよくある
0013デフォルトの名無しさん
2012/04/24(火) 12:18:57.450014デフォルトの名無しさん
2012/04/24(火) 13:54:02.92Javaに対するEclipseのような修正漏れが限られているリファクタリングツールが
Railsにないからテスト工数が増大したという事ですね。
Ruby+Railsだと修正漏れの少ないリファクタリングツールを作るのは難しいですが、
今後ツールが自動的に修正できる範囲が増えれば必要なテストは減るでしょう。
つまり、Rails用リファクタリングツールの性能向上で解決できる問題だと思います。
0015デフォルトの名無しさん
2012/04/24(火) 15:38:29.21オブジェクト指向で何か修正したい場合
メンバーの継承と追加はできるが削除はできないというのが基本です
これはツールではなくパラダイムです
メソッド名やパラメータの数を変更するのも、ツールではなくパラダイムの問題です
0016デフォルトの名無しさん
2012/04/24(火) 15:47:07.32そんなにrubyが憎いか。
0017デフォルトの名無しさん
2012/04/24(火) 18:30:56.15リファクタリングについて何も知らないのに「パラダイムの問題」と断言するのはどうかと思います。
内部構造を整理するために既存のクラスを修正するのがリファクタリングです。
メソッド名やパラメータ数を修正した時に呼出側も漏れなく修正されるかどうかはツールの問題です。
リファクタリング (プログラミング)
http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%29
0018デフォルトの名無しさん
2012/04/24(火) 21:20:58.20いつの時代の人間だ
0019デフォルトの名無しさん
2012/04/24(火) 22:01:04.01> メソッド名やパラメータ数を修正した時に呼出側も漏れなく修正されるかどうかはツールの問題です。
言語の問題であることも多いよ。
RubyわからんのでPerlの例でいうけど、
たとえばPerlだと
{
package Class1;
sub new { ... }
sub foo { ... }
}
↑このfooというメソッド名を修正した時、
my $c = $flag ? Class1->new() : Class2->new();
$c->foo();
↑ 呼び出し側のfooを変更していいかどうかなんて判別不可能だしね。
Rubyも変数に型がないから、同じじゃない?
0020デフォルトの名無しさん
2012/04/24(火) 22:14:19.08YARVはRailsの性能問題を解決しませんでした。
http://ja.wikipedia.org/wiki/YARV
> 2006年12月31日にRubyリポジトリにマージされ、
> 2007年12月25日にリリースされたRuby 1.9.0から、正式に組み込まれた。
http://www.rubyist.net/~matz/20070707.html
>じゃあ、速度の問題はこれで解決かというとそんなことはない。
>YARVになってもRailsの性能は改善されないからだ。
http://it.slashdot.jp/story/09/04/10/0421223/
>Twitter、Ruby on RailsからScalaへ
> Twitter ではフロントエンド、バックエンド共に Ruby on Rails が使われていたが、
> 最近では大量のメッセージを処理できず「Fail Whale」出現の原因となったりしていた。
0021デフォルトの名無しさん
2012/04/24(火) 22:26:51.29断言が気に入らないようだが、宣言的なパラダイムをどう思う?
そもそも「修正する」というのは手続き的だよな
0022デフォルトの名無しさん
2012/04/24(火) 22:29:28.47静的型付言語のJavaが静的コード解析で修正箇所を特定できるのに対し、
動的型付言語でダックタイピングを採用したRubyと
黒魔術レベルの動的プログラミングを実現したRailsの組み合わせに対して
必要な修正を網羅するリファクタリングツールを非常に作りにくいのは確かですね。
それでもRailsのバージョン別のツールにするとか
ホワイトボックステストで実行フローを枝刈りするとか
ツールのアルゴリズムを工夫する余地はあると思います。
0023デフォルトの名無しさん
2012/04/24(火) 22:47:34.46手続き的か宣言的かオブジェクト指向かというのはプログラムの設計の話です。
リファクタリングは無駄に複雑でわかりにくいコードを全体的に整理するという話です。
あなたは全然関係ない話をごちゃまぜにしています。
0024デフォルトの名無しさん
2012/04/24(火) 23:08:13.23あなたは「設計と全然関係ないことをするのがリファクタリングだ」と言っています
0025デフォルトの名無しさん
2012/04/25(水) 00:08:13.79余地があるのは、今のRubyのリファクタリングツールが貧弱なだけ。
少しはまともになるかもしれないが、まあ期待するだけ無駄でしょう。
Scalaのおかげで、コードを短く書くのに、動的言語である必要性はないのが証明されました。
これからは静的言語かつコードを短く書けるScalaのような言語が
主流になっていくでしょう。
プログラマだというのに、プログラミングを楽にするためにコンピュータの力を
生かせる言語を作ろうと発想が出てこないのが不思議でなりません。
Scalaは理想の言語ですね。
0026デフォルトの名無しさん
2012/04/25(水) 02:29:57.05やりたいことが頭の中から逃げてしまう。簡潔さは力なのです」
http://toro.2ch.net/test/read.cgi/tech/1326687331/57
0027デフォルトの名無しさん
2012/04/25(水) 08:20:42.68誰も読めないようなperlの魔法的変態記述の反省でもあるのに
なぜ性懲りもなく繰り返すのか
perl知らない素人じゃあるまいに
0028デフォルトの名無しさん
2012/04/25(水) 08:44:28.00ScalaでHello World
↓
println("Hello, world!")
これだけ。
public static void mainなどいらないのです。
0029デフォルトの名無しさん
2012/04/25(水) 09:02:33.82Perlはものすごく読み書きに詳しい
では、読み書きに詳しくない人に読ませるという立場はどこから出てきたのか
0030デフォルトの名無しさん
2012/04/25(水) 10:45:09.16Rubyが遅いのは動的だからって短絡はほんといいかげんやめてほしい。
Rubyが遅いのは単純にまつもとやささだの技量不足ってだけの話しで、
やつらが作れば静的言語だって遅くなる。LuaやV8の実装者に申しわけなさ過ぎる。
0031デフォルトの名無しさん
2012/04/25(水) 17:51:45.56LuaやV8はRuby処理系ではないのに、速度差の原因は
言語仕様の違いではなく技量の差とどうやって判断したのですか?
Groovy++で@Typedをつけると型推論を行い静的型に基づいて最適化されます。
@Typedをつけない部分はGroovyと同じく動的ディスパッチや動的型付ができます。
@Typedをつけたかどうかで実行速度が数十倍違います。
コンパイラは同じだから、コンパイラ作者の技量の差などありません。
@Typedをつけると最適化しにくい言語仕様を切り捨てるのが速度差の原因です。
Groovy++
http://d.hatena.ne.jp/uehaj/20100225/1267106256
Groovy++、来襲
http://www.slideshare.net/touchezdubois/groovypp-attack-6229953
0032デフォルトの名無しさん
2012/04/25(水) 22:19:47.39> 技量の差とどうやって
動的という観点に絞れば、LuaやJavaScriptはRubyよりはるかに動的だからでFA
> コンパイラは同じだから、コンパイラ作者の技量の差などありません。
それは1行目の話。型情報を使って最適化できる静的型が有利なのは当たり前。
0033デフォルトの名無しさん
2012/04/25(水) 22:39:32.260034デフォルトの名無しさん
2012/04/25(水) 22:58:32.280035デフォルトの名無しさん
2012/04/25(水) 23:02:56.10さて、次の三つのうち実行時間が一番遅いのはどれでしょう?
1.コンパイル処理を実行開始前に完了しておく
2.コンパイル処理を実行開始時に行う
3.コンパイル処理を実行されるたびに行う
0036デフォルトの名無しさん
2012/04/26(木) 00:07:49.48もっと一般的なスレタイの方が良かったのでは?
●過去スレ
やっぱり動的言語では安全なソフトは作れない
http://hibari.2ch.net/test/read.cgi/tech/1306002146/
やっぱり動的言語では安全なソフトは作れない 2
http://hibari.2ch.net/test/read.cgi/tech/1306571666/
やっぱり動的言語では安全なソフトは作れない 3
http://hibari.2ch.net/test/read.cgi/tech/1308499587/
やっぱり動的言語では安全なソフトは作れない 4
http://hibari.2ch.net/test/read.cgi/tech/1316016777/
やっぱり動的型付け言語では安全なソフトは作れない
http://hibari.2ch.net/test/read.cgi/tech/1316887046/
やっぱり動的型付け言語は大規模開発で効率が悪い 2
http://hibari.2ch.net/test/read.cgi/tech/1319212872/
やっぱり動的型付け言語は大規模開発で効率が悪い 3
http://hibari.2ch.net/test/read.cgi/tech/1320832914/
やっぱり動的型付け言語は大規模開発で効率が悪い 4
http://hibari.2ch.net/test/read.cgi/tech/1321843683/
やっぱり動的型付け言語は大規模開発で効率が悪い 4
http://toro.2ch.net/test/read.cgi/tech/1321972779/
0037デフォルトの名無しさん
2012/04/26(木) 06:41:08.61どっちもウンコ言語だから良い勝負だな
0038デフォルトの名無しさん
2012/04/26(木) 07:44:44.20Lua 50.5
LuaJit 6.8
http://attractivechaos.github.com/plb/
0039デフォルトの名無しさん
2012/04/26(木) 08:21:31.03>実行時間が一番遅い
日本語で頼む。
0040デフォルトの名無しさん
2012/04/26(木) 08:54:57.973
0041デフォルトの名無しさん
2012/04/26(木) 08:57:31.13すどおりしたようにみえる
0042デフォルトの名無しさん
2012/04/26(木) 15:40:35.66初めて見たときは衝撃だよな
0043デフォルトの名無しさん
2012/04/26(木) 22:39:04.82BASICだ。
0044デフォルトの名無しさん
2012/04/27(金) 09:00:10.900045デフォルトの名無しさん
2012/04/27(金) 14:05:19.47それに気づかなかったり、rubyでendをうっかりendifって書いていて、ミスしたのはコードの
最初のほうなのに表示されるエラーの行番号はコードの最終行でミスを見つけるのが困難だったり
ほんと動的言語はダメだわ。
0046デフォルトの名無しさん
2012/04/27(金) 14:27:31.49あとlint的なものを使えば、その手の間違いを検出できる場合もある。
0047デフォルトの名無しさん
2012/04/27(金) 14:28:27.24アホ
0048デフォルトの名無しさん
2012/04/27(金) 14:31:38.72動的かどうか全く無関係に区別は不可能
っていうか着色とキーワード改行インデントするエディタ使え
0049デフォルトの名無しさん
2012/04/27(金) 14:32:05.33静的型付け言語だと、変数の宣言が必須でコンパイルエラーになるから検出が容易
0050デフォルトの名無しさん
2012/04/27(金) 14:40:24.940051デフォルトの名無しさん
2012/04/27(金) 14:43:14.370052デフォルトの名無しさん
2012/04/27(金) 14:48:18.950053デフォルトの名無しさん
2012/04/27(金) 14:52:53.05時間潰しでレス欲しいだけならVIPやニュー速や嫌儲へどうぞ
0054デフォルトの名無しさん
2012/04/27(金) 15:04:55.53IDEがサポートしてる静的言語ならエディタで入力した時点でそんな変数ないって指摘してくれる。
0055デフォルトの名無しさん
2012/04/27(金) 15:08:27.68頑張れば大部分は検知できそうな気もするが、流行らないのはなんでだろう
0056デフォルトの名無しさん
2012/04/27(金) 15:21:41.140057デフォルトの名無しさん
2012/04/27(金) 15:22:19.68"loginId = param"のつもりで"loginid = param"と書いてしまったときの話だよ?
0058デフォルトの名無しさん
2012/04/27(金) 19:00:40.63グローバル変数の使用状況を見れば、頑張らなくてもチェックできるんだが
グローバル変数が無い言語が流行っている
0059デフォルトの名無しさん
2012/04/27(金) 21:20:25.70全然違う視点を持つと結果は変わってくるが
クラスベースOOとかJavaに近い動的言語はダメになる
0060デフォルトの名無しさん
2012/04/27(金) 21:32:22.92動的言語を使うなという話。
0061デフォルトの名無しさん
2012/04/28(土) 00:56:52.290062デフォルトの名無しさん
2012/04/28(土) 02:18:16.52ただしGCが改良される度にソースの互換性がなくなる気がする
0063デフォルトの名無しさん
2012/04/29(日) 14:27:24.66使い物にならない言語という結論
0064デフォルトの名無しさん
2012/04/30(月) 04:14:56.56現行のほとんどの言語がやれちゃうのでどうしようもない
あきらめてスクリプト言語で作ろうぜ
俺は絶対にやらないけど
0065デフォルトの名無しさん
2012/04/30(月) 10:28:42.94名前をつけても何も解決しないな
0066デフォルトの名無しさん
2012/04/30(月) 11:00:31.68l i! l , _,.ヘ V \ {ヾー- _',___V | l| |
il __.ィチ "| i! ̄ ハ '., \ ' , ヾー __i! i| |
.! ̄ | ,ィ≦三ミ、 ', \ i`,ィfゞ三ミ、 ',.| , | |
! i|. ,'/ ,'´}:`ヽ. \ | .,'´}:`ヽ ヾ., ',! / i| |
,. ! {{' {´:::::::::}. ヽ. i! {;´:::::::::} }} } / i| |
, i i! ゞ ゝ;;;;;ソ, ヽ! ゝ;;;;;ソ リ' ,' / .i| |
, l、 ', / ,イ .i| |
, i! ヾ. ///////// /////// // .l| |
ヘ! .{ .` ! /'/ ;i i| |
ハ , `∧ / ノ,' | |
ハ ', ヽ __ __ / / ./ | |
ヘ V ヽ. ,´ __ ヽ .イ // i|! .| |
ヘ V .i! ヽ. ´ ` ィ /´ i! l| i| |
ヽ ', i! | > < | | i! .i! |
0067デフォルトの名無しさん
2012/05/07(月) 01:15:39.07静的型付けのC++なら、この程度の関数は何も気にせずに使えるけど、
http://ideone.com/xcxjC
動的型付けのJavaScriptだと、この程度の関数でも気をつけて使わないと駄目な代物になる事。
http://ideone.com/lbcaB
0068デフォルトの名無しさん
2012/05/11(金) 21:54:23.230069デフォルトの名無しさん
2012/05/11(金) 23:29:18.34現実には型付けがなくて片付けられないんだよ
0070デフォルトの名無しさん
2012/05/12(土) 00:14:38.090071uy
2012/05/12(土) 12:20:05.59でっていう
ライブラリ側は全て静的言語でやって(速度も速いし)
その速度の速いライブラリを動的言語から呼び出したり、
型情報とかいちいちつける意味のない
実装コードは動的言語でさっさとやるんだよ
0072デフォルトの名無しさん
2012/05/12(土) 15:20:43.380073デフォルトの名無しさん
2012/05/12(土) 17:28:00.830074デフォルトの名無しさん
2012/05/13(日) 12:32:23.01もう動的型付け言語ではやっちゃいけないってことなんだよ。
この変数は○○型です。なんて
コメントをつけ出したら末期。
0075デフォルトの名無しさん
2012/05/13(日) 21:35:36.32と言うかシステムハンガリアンが活きるのって
CやJavaやC#じゃなくて動的言語だよなあ
0076デフォルトの名無しさん
2012/05/15(火) 23:53:16.430077デフォルトの名無しさん
2012/05/16(水) 01:05:53.130078デフォルトの名無しさん
2012/05/16(水) 04:46:45.01いれても正常に処理しますってのは無いんだから。
0079デフォルトの名無しさん
2012/05/16(水) 07:26:51.79つまり、コード自体のミスよりも
悪いコードに罰を与えようとする側の判断ミスの方が深刻な問題になる
0080デフォルトの名無しさん
2012/05/16(水) 18:15:57.100081デフォルトの名無しさん
2012/05/17(木) 00:58:48.26予想通りで笑った
0082デフォルトの名無しさん
2012/05/21(月) 23:43:56.65動的型付けだからシステムハンガリアンが必要になるんじゃないの?
違う型突っ込んでもシステムがエラーを拾うわけじゃないんだろうけどさ
0083デフォルトの名無しさん
2012/05/22(火) 14:17:06.25> ライブラリ側は全て静的言語でやって(速度も速いし)
> その速度の速いライブラリを動的言語から呼び出したり、
> 型情報とかいちいちつける意味のない
> 実装コードは動的言語でさっさとやるんだよ
ブラウザだと逆になってしまいそうだな。
ライブラリは速いJavaScript、それを使うユーザーは静的型言語から変換。
どうしてこうなった
0084デフォルトの名無しさん
2012/05/22(火) 14:27:55.050085uy
2012/05/22(火) 16:13:17.91動的言語はダメだ ってふうに勘違いされやすいけど
そうじゃなくて
今まで静的言語でプログラム開発していた部分に
やっと動的言語が1歩踏み込んだけど、まだ色々と足りなくてダメだったね
ってだけだからね
いずれにしよ、小規模なプログラム開発では動的言語に静的言語が勝てるわけないから
そのうち大規模開発でも動的言語は使い物になると思うよ
今は、「え?別に動的言語で大規模開発できるでしょ?」って無理して発言する事ではなく
「なぜ出来ないのか?」「どうすればいいのか?」 それを考える時期
0086デフォルトの名無しさん
2012/05/22(火) 16:35:06.090087デフォルトの名無しさん
2012/05/22(火) 17:55:35.84からどうして
「大規模開発でも動的言語は使い物になると思うよ」
につながるのかが、さっぱりワカラン。
0088デフォルトの名無しさん
2012/05/22(火) 18:38:01.21世界が滅びる兆しのようだ。
0089デフォルトの名無しさん
2012/05/22(火) 19:13:26.080090デフォルトの名無しさん
2012/05/22(火) 22:05:50.12動的言語に近い簡潔さで型安全なプログラムが書ける。
動的言語:小規模書き捨てスクリプト
関数型言語:中規模少数精鋭
静的手続き型言語:大規模ドカタ開発
こんな感じで棲み分けされるよ。
0091uy
2012/05/23(水) 18:12:53.30概念が中途半端
0092デフォルトの名無しさん
2012/05/23(水) 20:25:04.68その軸の両端には何の概念が来るんだ?
中途半端さが理由で流行らないってことは
中途半端でない概念をベースにした言語は流行ってるのか?
ってここまで書いて気付いたがuyかよ
0093デフォルトの名無しさん
2012/05/23(水) 21:00:33.910094デフォルトの名無しさん
2012/05/23(水) 22:35:46.89やっかいだな。
0095デフォルトの名無しさん
2012/05/23(水) 23:06:52.490096デフォルトの名無しさん
2012/05/24(木) 09:08:30.06だが、その醜い身体の中には正義の血が隠されているのだ。
0097uy
2012/05/25(金) 00:17:48.590098デフォルトの名無しさん
2012/05/25(金) 00:27:25.800099デフォルトの名無しさん
2012/05/25(金) 04:38:11.86本当に実行時じゃないと決まらないことって少ないんだよね。
実はコードジェネレータでコンパイル時に定義ファイルなどから
コードを動的に生成するだけで十分ってことが多い。
0100uy
2012/05/25(金) 13:43:17.47普通にかいてればバグとかはいる箇所って全然少ない気がする
バグが存在しないとわかってるコードを利用する分には、問題はなくて
動的言語で困るのは、自分でソースコードを大量に書かなきゃいけない時か
それでも
a = nil
a.push 2
とかかいてて、こういうののせいで誰かリアルで死んだら
声高らかに動的言語は間違ってる!とか言われるから
やっぱり型チェックは存在していないとまずい
もしや動的言語からevalがいらないんじゃね
evalさえなければコンパイラも作れる可能性は高い気がする
0101デフォルトの名無しさん
2012/05/25(金) 21:51:15.36まで読んだ
0102デフォルトの名無しさん
2012/05/26(土) 01:08:10.32http://mbebenita.github.com/LLJS/
おいMoziila、JSで突っ走る素振りする傍らこんなもん作ってんじゃねえよ。
LLVMの代替ポジでも狙うつもりかね。
0103デフォルトの名無しさん
2012/05/26(土) 11:18:55.730104uy
2012/05/26(土) 11:36:28.40jsが重いんだよ、ブラウザは。
0105デフォルトの名無しさん
2012/05/26(土) 11:54:33.890106uy
2012/05/28(月) 00:44:40.23それ動作させればブラウザ側がHTMLパーサもjsパーサもいらなくなって超高速になるんじゃないの
js高速化(笑)とかいいから、それやれよって思う
0107デフォルトの名無しさん
2012/05/28(月) 20:36:42.59Silverlight「ガタッ」
Flash「スッ」
0108デフォルトの名無しさん
2012/05/28(月) 21:25:29.570109デフォルトの名無しさん
2012/05/30(水) 08:12:34.080110デフォルトの名無しさん
2012/05/30(水) 20:00:37.730111デフォルトの名無しさん
2012/06/02(土) 11:10:47.370112デフォルトの名無しさん
2012/06/02(土) 11:28:49.210113デフォルトの名無しさん
2012/06/03(日) 18:14:22.90ってことじゃね?
0114デフォルトの名無しさん
2012/06/04(月) 06:09:20.960115デフォルトの名無しさん
2012/06/04(月) 11:05:43.930116デフォルトの名無しさん
2012/06/04(月) 15:30:53.80JRubyもX
TypeSafeではない言語ではだめ。
優れたIDEなしに生産性の高い開発は語れない
0117デフォルトの名無しさん
2012/06/04(月) 15:54:11.20型安全て、どの程度の型安全の意味で言ってる?
もしかしてダウンキャストがいくらでもできるザルザルな言語の信者が、
「型安全」(きりっ とか言ってるんじゃないのwwwwwwwwwww
0118デフォルトの名無しさん
2012/06/04(月) 16:21:11.300119デフォルトの名無しさん
2012/06/04(月) 21:11:58.54ダウンキャストがいくらでも出来ることに問題はない。
ダウンキャストしても安全に動くならば問題ない。
所で動的型付け言語、あれダウンキャストの嵐だよね。
変数はすべて基底のObject型。だからどんな型でも入れられる。
そしてメソッド呼び出しの時はObject型から具体的な型にキャストして呼び出す。
やっていることはコレと同じ。
0120デフォルトの名無しさん
2012/06/04(月) 22:17:19.93JSXみたいな型付け言語->Javascriptへのコンパイラとかも
0121デフォルトの名無しさん
2012/06/04(月) 23:05:01.150122デフォルトの名無しさん
2012/06/04(月) 23:07:57.500123デフォルトの名無しさん
2012/06/05(火) 07:29:31.18> ダウンキャストしても安全に動くならば問題ない。
それってつまり型安全な言語じゃなくても良いってことだよな。
0124デフォルトの名無しさん
2012/06/05(火) 07:42:09.17C++/C#/Javaは外部ライブラリが絡むような所以外
ダウンキャストなんて使わないよ
0125デフォルトの名無しさん
2012/06/05(火) 08:02:59.91外部ライブラリを使わないと静的大規模開発になるのかな
0126デフォルトの名無しさん
2012/06/05(火) 09:36:53.43動的言語でも安全に動くならば問題ない、って言ってるのと全く同じなんだが。
0127デフォルトの名無しさん
2012/06/05(火) 10:08:35.69ジェネリクスやテンプレートで作られてないライブラリを使うと
バインディング関連でダウンキャストが必要になるってこと
ライブラリ側のインターフェイスがObjectだから
例
http://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/javax/servlet/http/HttpSession.html#getAttribute(java.lang.String)
http://msdn.microsoft.com/ja-jp/library/system.windows.frameworkelement.tag(v=vs.95).aspx
0128デフォルトの名無しさん
2012/06/05(火) 13:45:57.82バグやバージョン管理に振り回されるなら
テスト工数もへったくれもないな
0129デフォルトの名無しさん
2012/06/05(火) 14:52:19.280130デフォルトの名無しさん
2012/06/05(火) 21:43:22.14レガシーの部分を持ち出して何が言いたい?
0131デフォルトの名無しさん
2012/06/06(水) 01:18:57.41> それってつまり型安全な言語じゃなくても良いってことだよな。
>>126
> 動的言語でも安全に動くならば問題ない、って言ってるのと全く同じなんだが。
ぜんぜん違うよ。
ダウンキャストは最後の手段として仕方なく用いるもの。
使わないですむなら使わないほうがいい。
動的言語は、常に最後の手段を用いているからダメダメ。
0132デフォルトの名無しさん
2012/06/06(水) 07:09:04.73常にダウンキャストというのは人間がそう思ってるだけだ
(そもそも継承関係自体がないならアップもダウンもない)
そういう風に人間が自分で判断してよいという前提になれば動的言語は強い
0133デフォルトの名無しさん
2012/06/06(水) 07:23:04.840134デフォルトの名無しさん
2012/06/06(水) 08:07:43.320135デフォルトの名無しさん
2012/06/06(水) 08:21:08.17ハイパーキャスト
0136デフォルトの名無しさん
2012/06/06(水) 08:40:44.08> 常にダウンキャストというのは人間がそう思ってるだけだ
それが一番重要なんじゃないかw
コンピュータよりも人間主体で考えましょう。
面倒な事はコンピュータにやらせる。
0137デフォルトの名無しさん
2012/06/06(水) 09:22:54.51やらないのが一番の目的というのは変じゃないか
0138デフォルトの名無しさん
2012/06/06(水) 14:51:17.17というのがHaskellやPrologなのに、なぜかJava厨はそっちに踏み込むことはできず、
必死に2ちゃんねるでRubyをdisるだけに終わる。
0139デフォルトの名無しさん
2012/06/06(水) 20:34:17.700140デフォルトの名無しさん
2012/06/06(水) 23:25:46.53関数型言語使いに型安全性の不備を指摘されると
そんなに型安全じゃなくても良いとか言い出すから面白い
0141デフォルトの名無しさん
2012/06/06(水) 23:28:05.190142デフォルトの名無しさん
2012/06/06(水) 23:32:34.24> だから、実行順を決める、なんて面倒なこともコンピュータにやらせればいい、
実行順を決めることに文句をつけてる人はいないと思うけど?
文句はコード的に静的に型が決まってるはずのに、
言語の都合で動的になってるような所の話。
(たとえば、obj.method() というコードを書いたら、実行せずとも、
このオブジェクトはmethod()を持っているはずなのです。)
>>140
型安全は重要だよ。だから型安全でないコードを
減らすべきだと説いている。
0143デフォルトの名無しさん
2012/06/06(水) 23:42:18.93ほげ言語が持っていない、より高度な機能は
ほげ言語プログラマには理解できない
0144デフォルトの名無しさん
2012/06/06(水) 23:43:57.94Javaにはobject型のように
動的な型機能は付いているが、
動的言語には、静的な型機能がついてないね。
そうか、そういうことなんだね。
0145デフォルトの名無しさん
2012/06/06(水) 23:44:21.810146デフォルトの名無しさん
2012/06/06(水) 23:46:54.740147デフォルトの名無しさん
2012/06/06(水) 23:48:55.800148デフォルトの名無しさん
2012/06/06(水) 23:52:29.76動的言語の問題点
1. パフォーマンスが悪い。モッサリ
2. 効率よくリファクタリングできない
3. 効率よくデバッグできない
4. 他の言語に変換できない(しにくい)
5. ソースコードの可読性が落ちる
6. パフォーマンスが悪いので使用用途が限られる。学習時間の無駄
0149デフォルトの名無しさん
2012/06/06(水) 23:52:47.87実は△言語をかたくなに否定しているってやつか。
0150デフォルトの名無しさん
2012/06/07(木) 00:18:42.75言語Aから言語Bへの変換が難しいケースとは
Bが持っていないAの機能を使ってコードが書かれていたとき。
だから異なるパラダイムの言語間での変換は難しいし、
一方でAの持つ機能がBのサブセットならA->Bの変換は容易だ。
もし「自分の使ってる言語は他言語に変換し易い」と感じるのならば、
その言語はおそらく機能的に劣ってる。
0151デフォルトの名無しさん
2012/06/07(木) 00:25:55.020152デフォルトの名無しさん
2012/06/07(木) 00:35:26.690153デフォルトの名無しさん
2012/06/07(木) 00:38:15.04実際昔は、C++はC言語に変換されていた。
0154デフォルトの名無しさん
2012/06/07(木) 00:39:53.68関数型言語に変換するのは難しいだろうね。
関数型言語は、手続き型言語に変換しやすだろう。
その言語はおそらく機能的に劣ってる。
0155デフォルトの名無しさん
2012/06/07(木) 00:58:13.33変換されてたけど、簡単じゃないよ。
びよーんすっぽすっぽ先生が書いてるけど、cfrontという実装があるから
というのを「簡単に変換できる」と思うのは、よくある誤解。
>>154 の論理に従うと、あらゆる言語は機械語に変換できるから、
あらゆる言語は同じくらい劣っている、ということになるな。
0156デフォルトの名無しさん
2012/06/07(木) 00:58:48.85じゃあお前は、何から何が簡単だと思うんだ?
0157デフォルトの名無しさん
2012/06/07(木) 04:11:50.80なぜなら、韓国語は日本語にない機能を使って記述されるからである
ゆえに、日本語は機能的に劣っている
0158デフォルトの名無しさん
2012/06/07(木) 06:52:10.60Cでオブジェクト指向プログラミングができる人なら、C++ -> C は簡単。
0159デフォルトの名無しさん
2012/06/07(木) 07:02:02.30よく韓国人に「日本語でおk」ってレスをされるw
0160デフォルトの名無しさん
2012/06/07(木) 07:21:22.18例外は?RAIIは?テンプレートはどうすんの?
0161デフォルトの名無しさん
2012/06/07(木) 07:36:19.42コンパイラが実装しやすい言語は機能が少ないってことだろ
0162デフォルトの名無しさん
2012/06/07(木) 08:24:38.11理解できない機能はカウントされないから
「理解できない機能が多い」という事実を「機能が少ない」と認識してしまう
0163デフォルトの名無しさん
2012/06/07(木) 08:42:53.74例外は戻り値(引数)を使う方法で機械的に変換可能だし、
RAIIは単に処理を割り込ませればいいだけ。
テンプレートはただのマクロにすぎない。
ある言語からある言語への変換の話は
元の言語が何かは全く関係なく、
変換後の言語が、手続き的に記述できる言語ならなんでもいい。
副作用が簡単に記述できない言語には変換しにくい。
0164デフォルトの名無しさん
2012/06/07(木) 11:05:34.740165デフォルトの名無しさん
2012/06/07(木) 11:07:00.19思い込んでるのかな、このJava厨は。
だったら、自分がHotSpot VMの実装についてどれだけ理解しているか、
考えてみればいい。
0166デフォルトの名無しさん
2012/06/07(木) 11:22:25.43今の話の流れはC++っすよw
0167デフォルトの名無しさん
2012/06/07(木) 12:40:58.41一行目と三行目の間に論理の飛躍というか崩壊があるんだが?
0168デフォルトの名無しさん
2012/06/07(木) 13:27:10.03157と同じ主張のプログラミング言語版が少し上にあるわけだが?
そいつに言えよ
0169デフォルトの名無しさん
2012/06/07(木) 13:59:00.23A言語がB言語に変換し易い ⇒ A言語は機能的に劣ってる。
A言語は機能的に劣っていない ⇒ A言語がB言語に変換しがたい。
正しく使うと
日本語は韓国語に変換しがたい。
なぜなら、日本語は機能的に劣っていないからである。
0170デフォルトの名無しさん
2012/06/07(木) 14:25:04.01ネトウヨはニュー速にでもいけ
0171デフォルトの名無しさん
2012/06/07(木) 14:34:30.340172デフォルトの名無しさん
2012/06/07(木) 15:01:46.220173デフォルトの名無しさん
2012/06/07(木) 16:02:35.66「ある言語からある言語への変換の話は 元の言語が何かは全く関係なく、(>>163)」が
Java厨の頭の中では矛盾無く両立するわけ?
0174デフォルトの名無しさん
2012/06/07(木) 16:06:07.23>だから異なるパラダイムの言語間での変換は難しいし、
これが正しいなら、
>もし「自分の使ってる言語は他言語に変換し易い」と感じるのならば、
>その言語はおそらく機能的に劣ってる。
じゃなくて
>その言語はおそらくパラダイムに大きな違いが無い
だろ?
0175デフォルトの名無しさん
2012/06/07(木) 16:40:38.07Java ⇒ Ruby は簡単
Ruby ⇒ Java は困難
なぜならクロージャもダックタイピングも無いJavaは機能的に劣ってるから
RubyのところはSmalltalkでもPythonでも同じだよ
0176デフォルトの名無しさん
2012/06/07(木) 18:22:53.390177デフォルトの名無しさん
2012/06/07(木) 19:47:29.39機能は関係ないだろ
タイプセーフでコンパイラが型がわかるから別の言語に変換できるんだろ
機能が違ったら変換できないなんていう理論は、
特定のロジックをかけないプログラミングがあるといってるようなもんだ
意味がわからない。
0178デフォルトの名無しさん
2012/06/07(木) 20:03:31.59おいおい、同じロジックが原理的に書けるなら
簡潔に書けるか冗長にしか書けないかの違いは無視できるってか?
0179デフォルトの名無しさん
2012/06/07(木) 20:17:09.81入力文字数だけみて開発の生産性を語るバカがおおくて驚く。
高機能なIDEなしに、効率よく開発できるわけがないってのに
コードの短さ至上主義の宗教がRuby
>冗長にしか書けないかの違いは無視できるってか?
もっさりなのは無視できるってか?w
0180デフォルトの名無しさん
2012/06/07(木) 20:35:43.40みんなが簡単にクロージャ生成して
メソッドの引数に渡したり戻り値で返したりしてるとき、
Java厨だけはしこしこインターフェース定義して
型書いてんでしょ?馬鹿じゃね?
0181デフォルトの名無しさん
2012/06/07(木) 20:57:40.82JavaやC#の文句言うのは
まともな速度でうごくプログラムかけるようになってからにしろよな
Rubyでは一生無理だろうがw
0182デフォルトの名無しさん
2012/06/07(木) 21:38:22.99あれではダメというなら、処理系書くやつが悶絶しながら実装することになる
0183デフォルトの名無しさん
2012/06/07(木) 21:39:37.84順調にゴミ化していってるな
0184デフォルトの名無しさん
2012/06/07(木) 22:53:09.06開発効率も実行効率も良いんだが、
これって複数の言語を使える事が最低条件だからなー。
単一言語しか使いこなせないボンクラにはJavaがお似合い。
0185デフォルトの名無しさん
2012/06/07(木) 22:54:18.86> 同じオブジェクト指向パラダイムでも
>
> Java ⇒ Ruby は簡単
> Ruby ⇒ Java は困難
>
> なぜならクロージャもダックタイピングも無いJavaは機能的に劣ってるから
> RubyのところはSmalltalkでもPythonでも同じだよ
ダックタイピングなんてリフレクションで簡単に実装できる。
0186デフォルトの名無しさん
2012/06/07(木) 23:01:39.79Javaにクロージャーがないと何が出来ないと思ってる?
無名クラスでできないことを5つあげてみよ。
0187デフォルトの名無しさん
2012/06/07(木) 23:03:39.45小規模使い捨てスクリプトなら動的言語の圧勝。
これでいいじゃんか?
公平な結果だろ。
0188デフォルトの名無しさん
2012/06/07(木) 23:04:38.25イテレータがRubyだけのものと思っている奴もいたww
まつもと氏も各所でRubyは開発の効率がいいとか嘘ついてるから
初心者はかんたんにだまされてしまう
0189デフォルトの名無しさん
2012/06/07(木) 23:12:36.390190デフォルトの名無しさん
2012/06/08(金) 06:55:53.335つも上げる必要無いよ
「簡潔なコードが書けない」これがJava最大の欠点
Java厨はコードの簡潔さが重要でないかのように言うけど
本当に重要じゃなくて、無名クラスで問題ないなら
Java8でクロージャを入れようなんて議論してない
0191デフォルトの名無しさん
2012/06/08(金) 08:09:50.16おまえがコードの短さしか見てないだけだろw
そんなに簡潔なコードがかけるのなら、
なぜ実行速度が速くできないんですかwww
裏で冗長なコードが走ってるから遅いんだろ
RubyはJavaの11分の一以下のスピードだ
静的な言語の足元にも及ばない。
PHPやPythonの半分以下の速度しかでないのはどうするんだ
0192デフォルトの名無しさん
2012/06/08(金) 08:30:46.860193デフォルトの名無しさん
2012/06/08(金) 08:37:04.54お前の言うことからはっきりしたのは2点
無名クラスはクロージャの代わりになる。
Java8で簡潔なコードが書けるようになる。
0194デフォルトの名無しさん
2012/06/08(金) 08:37:15.91Pythonのreduce()やRubyのinject()でもいいけど
勿論あらゆる型に対して使えるようにジェネリクスは必須ね
0195デフォルトの名無しさん
2012/06/08(金) 08:40:58.88ここで議論されてる
http://code.google.com/p/guava-libraries/issues/detail?id=218
0196デフォルトの名無しさん
2012/06/08(金) 12:27:22.02import java.util.*;
interface function<T> { public void func (T x); }
abstract class Foo { int n; abstract int foo(); }
class Bar extends Foo { Bar (int x) { n = x; } int foo() { return n + 1; } }
class Baz extends Foo { Baz (int x) { n = x; } int foo() { return n * 2; } }
class Main {
public static void runClosure (function<Integer> f) {
for (int i = 0; i < 1; i++) { f.func(i); }
}
public static void main (String args[]) {
final Foo[] x = new Bar[]{ new Bar(0) };
runClosure(new function<Integer>() {
public void func(Integer n) {
System.out.println(x[0].foo());
x[0] = n % 2 == 0 ? new Bar(x[0].foo()) : new Baz(x[0].foo());
}
});
}
}
0197デフォルトの名無しさん
2012/06/08(金) 12:55:22.71Javaウンコすぎるwww
0198デフォルトの名無しさん
2012/06/08(金) 12:58:34.84つまり静的と動的の問題ではなくオブジェクトの問題だ
0199デフォルトの名無しさん
2012/06/08(金) 14:05:54.900200デフォルトの名無しさん
2012/06/08(金) 16:16:30.630201デフォルトの名無しさん
2012/06/08(金) 19:53:36.64グダグダと型を書く必要があって
コンパイル時チェックまでしたあげくに
実行時型エラーで落ちるクソ言語Java
0202デフォルトの名無しさん
2012/06/08(金) 20:01:34.38わかります
0203デフォルトの名無しさん
2012/06/08(金) 23:21:50.19これを止めるには時間の概念や代入の概念をガラガラポンしないといけないですね
0204デフォルトの名無しさん
2012/06/08(金) 23:48:59.63でも人間を信用しないなら言語を変えるしかない
0205デフォルトの名無しさん
2012/06/09(土) 00:36:57.48なんでそんなに冗長に書いてるの?
わざとわかりにくく書いてない?
Javaでクロージャと言ったらこうでしょ。
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Ordering.html
Ordering<String> byLengthOrdering = new Ordering<String>() {
public int compare(String left, String right) {
return Ints.compare(left.length(), right.length());
}
};
0206デフォルトの名無しさん
2012/06/09(土) 00:43:17.57Ordering<String> byLengthOrdering = new Ordering<>() {
public int compare(String left, String right) {
return Ints.compare(left.length(), right.length());
}
};
0207デフォルトの名無しさん
2012/06/09(土) 00:50:20.81これぐらいの量なら充分小さといえるね。
しかし、書く人によってここまで
説明の量が違うとはw
0208デフォルトの名無しさん
2012/06/09(土) 00:53:05.16http://japan.internet.com/developer/20080603/26.html
0209デフォルトの名無しさん
2012/06/09(土) 02:03:14.73>>206は型推論で少し短くなってるけど。
それよりも>>196は型安全じゃなくてループ回数を増やすと
例外で落ちる。
0210デフォルトの名無しさん
2012/06/09(土) 02:16:15.17> クロージャのところのコード量は>>196も>>205も変わらん。
うん。知ってる。
だからこそ短く書いてみせた。
これでJavaはコードが長いと勘違いしている人が
単に読んでないだけだってあぶり出されるw
0211デフォルトの名無しさん
2012/06/09(土) 02:21:30.41Javaの無名クラスで出来ると言いたいんじゃないかと。
クロージャの重要な特徴のひとつだし。
>>196が長いのは
・メソッドfooの振舞いをポリモーフィズムで入れ替え可能
・クロージャは呼び出すたびに結果が違う(副作用有り)
・クロージャが外部スコープの変数を書き換え
と色々やってるからで、意外と他の言語で書いても長くなりそうだ。
副作用が在るから関数型でもすっきり書けないし。
0212デフォルトの名無しさん
2012/06/09(土) 02:34:11.80例えばPythonで同じコード書いたら凄く短い。
byLengthOrdering = lambda x,y: cmp(len(x), len(y))
だけど、>>196は代入があるからPythonのラムダじゃ(たぶん)書けない。
0213デフォルトの名無しさん
2012/06/09(土) 03:01:57.68空気は読まない。
http://ideone.com/p8v3x
0214デフォルトの名無しさん
2012/06/09(土) 03:23:26.38> 例外で落ちる。
wwwwwwww
0215デフォルトの名無しさん
2012/06/09(土) 06:36:08.450216デフォルトの名無しさん
2012/06/09(土) 07:47:05.58ホントにJavaの型チェックはゴミだな
http://ideone.com/H3cXr
0217デフォルトの名無しさん
2012/06/09(土) 08:15:48.97java5くらいの時点で入れとけよって思うよ
ジェネリクス使用クラスを可変長引数にしたときのアレも
さっさとどうにかして欲しい
でも静的言語の方が気が楽
>>90の静的手続き型言語:大規模ドカタ開発に同意だわ
経験浅い要員にJavaScriptとかやらせるとこっちが死ぬる
0218デフォルトの名無しさん
2012/06/09(土) 08:30:21.51>>206で短く書けてると思ってる事に一番驚いたわwww
0219デフォルトの名無しさん
2012/06/09(土) 09:08:38.63sortBy ((.length).(compare.length)) xs
とか
sorted(xs, cmp=lambda x,y: cmp(len(x),len(y)))
のように使ってるわけよ
上のコードのクロージャのところに>>206のような冗長なコードを
ぶち込んだら可読性落ち過ぎだろ
高機能なIDEがあればカバーできるレベルの話じゃないわ
0220デフォルトの名無しさん
2012/06/09(土) 09:25:47.31Java8までクロージャの機能がないんだから、
コードの長短を比較するのはナンセンスだろ。
>>219
多少、短くかけても実行時に遅かったら意味がないだろ。
冗長とバカにしてるそのコードよりもスクリプト言語は遅い。
0221デフォルトの名無しさん
2012/06/09(土) 09:46:37.41Collections.sort(ls,
new Comparator<T>(){
public int compare(T a, T b) {
return a.length() - b.length();
}
}
);
が
Collections.sort(ls,
(a, b) -> a.length() - b.length()
);
と書ける
0222デフォルトの名無しさん
2012/06/09(土) 10:41:28.50異なる型のラムダ式毎にSAM Typeを定義する必要があるんでしょう?
0223デフォルトの名無しさん
2012/06/09(土) 10:51:52.64同じく話の流れを無視してHaskellで書いてみた。
http://ideone.com/72ySa
0224デフォルトの名無しさん
2012/06/09(土) 11:05:34.15SingleAbstractSingleArgument< A, SingleAbstractSingleArgument< B, C > >
0225デフォルトの名無しさん
2012/06/09(土) 11:24:00.45既存interfaceやjava.util.functionsで対応出来ないものはそうなる
ただの構文糖衣だし
0226デフォルトの名無しさん
2012/06/09(土) 11:29:58.02> 異なる型のラムダ式毎にSAM Typeを定義する必要があるんでしょう?
今まで何種類の「異なる型のラムダ式」を書いたことがある?
ラムダ式ってのその用途から、引数の型は単純で
ライブラリとGenericsを使えば、すでに定義済みであることが多いよね。
そこ、気にするところじゃないよ。
0227デフォルトの名無しさん
2012/06/09(土) 11:38:01.790228デフォルトの名無しさん
2012/06/09(土) 11:43:11.59引数や戻り値はあんまり必要ないしね。
必要な場合っていうのは例えば、
Collections.sort(ls, ← これのこと。
コレクションが渡された時にそのコレクション内の項目ごとに
クロージャーを呼び出すってときに、引数を伴ったクロージャが必要になる。
で、項目一つを引数に呼び出すとき(map等)は、クロージャの引数は一つ
で、項目二つを引数に呼び出すとき(compare等)は、クロージャの引数は二つ
引数三つ、四つもどこかのライブラリで定義されていたと思うが忘れた。
型の違いはGenericsで吸収できるし、まあ要するに、
異なる型のラムダ式毎にSAM Typeを定義する必要があるということは
気にすることではないということ。
0229デフォルトの名無しさん
2012/06/09(土) 11:43:55.67誰もそんな事言ってないよ。
0230デフォルトの名無しさん
2012/06/09(土) 12:04:21.11え?ダサい?だってJavaだもん
http://gee.cs.oswego.edu/dl/jsr166/dist/extra166ydocs/extra166y/Ops.html
0231デフォルトの名無しさん
2012/06/09(土) 12:07:26.43バカですか? genericsで数個に統一できます。
バカのみがJavaをダサいと言う。論破完了w
0232デフォルトの名無しさん
2012/06/09(土) 12:10:19.67馬鹿って言ったら可哀想だよ。
本気で言っているとしたら、馬鹿だけどね。あはははは。
0233デフォルトの名無しさん
2012/06/09(土) 12:30:43.420234デフォルトの名無しさん
2012/06/09(土) 12:33:17.01C++のテンプレートやC#のジェネリクスとは異なるJavaのジェネリクスで
コストに折り合いを付けるならこうなる
0235デフォルトの名無しさん
2012/06/09(土) 12:34:24.29無理しなくていいよw
そんなこといってもJava使いには見えないからw
0236デフォルトの名無しさん
2012/06/09(土) 12:37:25.81馬鹿が自分定義のJavaはこうだって言ってるだけ。
誰も使ってないものを持ってきてもな。
それじゃJavaを貶められないよ。
0237デフォルトの名無しさん
2012/06/09(土) 12:39:48.04馬鹿過ぎて痛々しいレベルだわ
>>234がコスト持ち出してフォロー入れてる時点で気付けよ
0238デフォルトの名無しさん
2012/06/09(土) 12:42:29.51恥ずかしい奴だ
0239デフォルトの名無しさん
2012/06/09(土) 12:45:45.85比べるならC#
0240デフォルトの名無しさん
2012/06/09(土) 12:48:23.250241デフォルトの名無しさん
2012/06/09(土) 12:49:41.01・オートボクシングによるプリミティブ型からオブジェクト型への変換は
コスト的に許容できないケースがある
という理由によって>>230の定義になってるわけだが
>>231>>232>>235>>236はプリミティブ型にもジェネリクスが使えると思ってるアホ
0242デフォルトの名無しさん
2012/06/09(土) 12:56:45.10オートボクシングを使えばいい。
コストに関して言えば、オートボクシングを使ったとしても
動的言語よりも速い。
論破完了www
0243デフォルトの名無しさん
2012/06/09(土) 12:58:55.56・Javaはヌルポあるし、それ以外でも実行時型エラーを簡単に起こせるよ!
・ラムダ式の糖衣構文はJava8まで待ってね!今はJava7だよ(ドカタ開発では未だにJava4の場合すら……)
・プログラマのレベルは底辺だよ!まともなプログラマはScala使ってるし!
というわけで、静的型付け言語の比較するときにJavaを使うのは辞めましょう
弱い者いじめは良くない事ですよw
0244デフォルトの名無しさん
2012/06/09(土) 13:00:28.87実行時にしかわからないエラーがあるのだから
当たり前の話。
実行時にしかわからないエラーってのは
対応に時間が掛かる。
だから静的に分かるようにし
減らすってのが重要なんだよ。
お前は論点がわかっていない。
0245234
2012/06/09(土) 13:02:53.34http://ideone.com/P5SxK
>sum=1774919424 time=275msec
>sum=1774919424 time=3984msec
定義側はジェネリクスを使った方が楽になるが
使用側のコーディングコスト及び実行コストが高くなる
そして都度定義するより標準で>>230のような定義があった方が便利
0246デフォルトの名無しさん
2012/06/09(土) 13:06:17.18>オートボクシングを使ったとしても、動的言語よりも速い
Javaの中の話なのに完全に意味不明。
0247デフォルトの名無しさん
2012/06/09(土) 13:11:32.82それはJavaは他の言語と比べて
速いのは当たり前ということか。
0248デフォルトの名無しさん
2012/06/09(土) 13:12:51.80Javaが他と比べてダサいって話なんだから
Javaの中の話ではない。
よってオートボクシングを使えばぜんぜんダサくないし、
それでも他の動的言語よりも速い。
0249デフォルトの名無しさん
2012/06/09(土) 13:17:33.99老害乙
0250デフォルトの名無しさん
2012/06/09(土) 13:30:27.44>>234-237 >>241は>>230のリンク先の設計意図である
プリミティブとジェネリクス&オートボクシングの話
他言語は関係ない
0251デフォルトの名無しさん
2012/06/09(土) 13:35:55.05スレタイ見ろよ。
0252デフォルトの名無しさん
2012/06/09(土) 13:39:43.750253デフォルトの名無しさん
2012/06/09(土) 15:14:38.05実行前にわからないことをなくせというがね。
小さいスクリプトなんてのは実行前にわからない事だらけなんだ。
小さいから書き捨てもする。小さいからぱっと見ればすべてが分かる。
だからそんなのまで静的がどうとか言ったりはしない。
ただ大規模(何人もの人が何ヶ月もかかって作るもの)で動的言語はねーよ。
コードのほんの数行(全体の0.01%ぐらい?)を見せられて、
ここに変なオブジェクトが入る可能性はありますか?
ここを変更するときに影響が及びそうな部分はどこですか?
聞かれてもすぐには答えられんでしょ。
0254デフォルトの名無しさん
2012/06/09(土) 15:46:12.740255デフォルトの名無しさん
2012/06/09(土) 15:50:18.10ちょっとしたパッチ送る人いれないで、
それなりの時間を割いて開発してる人の数。
0256デフォルトの名無しさん
2012/06/09(土) 15:59:09.22>>213でも結構読みづらいんじゃないかと思ってたところをwww
とりあえずdoが{なのかな・・・?w(講義はいりません、自分で調べるからw)
なんか、他の言語のクロージャも見たくなってきたな。
>>213と同じ、ローカル変数にクロージャ経由で何らかの数を足すプログラム。
関数型言語は、まあ適当にやる方向でw
Haskellだとこうなるのね・・・ なれない言語は辛い。
http://ideone.com/6qeYD
0257デフォルトの名無しさん
2012/06/09(土) 16:02:55.13先に調べてからかけ
0258デフォルトの名無しさん
2012/06/09(土) 19:48:30.62うわぁ……www
Haskell理解できてないなら無理して書かなくていいぞ
0259デフォルトの名無しさん
2012/06/09(土) 21:48:41.77まあ、Fooクラス等のJavaの冗長な所まで無理に>>196を真似るなら
こんな感じかな
http://ideone.com/405Em
0260デフォルトの名無しさん
2012/06/09(土) 22:13:21.720261デフォルトの名無しさん
2012/06/09(土) 22:28:01.72>>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お手本みせーて。
0264デフォルトの名無しさん
2012/06/09(土) 22:46:31.41はい
http://ideone.com/0d5NI
>>256はローカル変数を書き換えてないから違う
まあ、そっちの方がプログラムとしては行儀良いんだけど
0265デフォルトの名無しさん
2012/06/09(土) 22:58:05.19まともな方法じゃ無理だった
0266デフォルトの名無しさん
2012/06/09(土) 23:06:59.98シグネチャが同一の関数を定義するのに何で二つも三つも型を定義するのか。
部分型は駄目っていうか部分型は不要。
0267デフォルトの名無しさん
2012/06/09(土) 23:51:21.71そして見つけられない$の意味・・・(ラムダ式?)
せっかくだから>>196をDで書いてみるぜ!
なんの面白みも無いけどwww
http://ideone.com/KVGVD
0268デフォルトの名無しさん
2012/06/10(日) 01:12:22.78Javaじゃなければ静的型でも短く書けるのかー(棒読み
0269デフォルトの名無しさん
2012/06/10(日) 02:09:39.73信じてない口ぶりみたいだけど、
Scalaとか見ると、本当に短く書けるよ。
0270デフォルトの名無しさん
2012/06/10(日) 02:09:55.930271デフォルトの名無しさん
2012/06/10(日) 07:22:30.08後で機能を増やしていいのであれば小規模でいい
0272uy
2012/06/10(日) 13:50:30.79rubyだとこうだけど、
x=0
->n{x = n % 2 == 0 ? Object.new : Object.new }
>>267
よくそんなゴミ構文に耐えられるよね
0273デフォルトの名無しさん
2012/06/10(日) 14:07:21.83LL使ってる連中で議論になるわけ無い件について
0274デフォルトの名無しさん
2012/06/10(日) 15:46:13.46でもさ、文字数が半分になっているからといって
大規模アプリを半分の時間とコストでやれますか?と
聞いたらNOっていうだろ?w
0275デフォルトの名無しさん
2012/06/10(日) 15:56:16.12その前に、スクリプト言語はパフォーマンスが悪くて却下される
0276デフォルトの名無しさん
2012/06/10(日) 16:31:09.090277uy
2012/06/10(日) 17:48:53.06本当はそんなにいないだろ
聞き捨ての知識で知ったかぶって「あ〜そういう問題あるのか〜」ってなって適当に叩いてるだけ
本当にその問題に直面して、それを知っていれば解決策を考える議論にシフトするはずだから
0278デフォルトの名無しさん
2012/06/10(日) 18:01:15.91>本当はそんなにいないだろ
そうだろうね。だって、選択肢に入ってこないもん。
0279uy
2012/06/10(日) 18:54:35.35そんな大変な目にそこらの名無しが会っていると思えない
俺はいま破綻しかけてる
ゆえに俺さまのゲーム開発はプログラム面が一度ストップしてる
次の開発では
直面しないように最初から策を講じるか
静的言語でやるかの2択
このスレタイ。テスト工数が増大とは、ずいぶん控えめに書いたものだと思う
激増の間違いだろ、で結局最後は完全なテストなどしきれず「多分動くんじゃね?」といって俺様はリリースするんだろう
0280デフォルトの名無しさん
2012/06/10(日) 19:31:35.49mapだのinjectだの高階関数だの使いまくってるけど
そんなの動的言語でやったら大規模になったとき破綻するに決まってる
0281デフォルトの名無しさん
2012/06/10(日) 19:40:20.99それを超えると急に難しくなる系は受託開発に向いてないと思う
0282デフォルトの名無しさん
2012/06/10(日) 20:32:30.190283デフォルトの名無しさん
2012/06/10(日) 21:02:47.680284デフォルトの名無しさん
2012/06/10(日) 21:32:00.263人くらい?
0285デフォルトの名無しさん
2012/06/10(日) 22:26:14.780286デフォルトの名無しさん
2012/06/10(日) 23:01:38.730287デフォルトの名無しさん
2012/06/10(日) 23:04:11.530288デフォルトの名無しさん
2012/06/10(日) 23:07:26.78Ada厨が本気になったら世界が終わる
0289デフォルトの名無しさん
2012/06/10(日) 23:39:48.31def 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高階関数の乱用が大規模開発に向かないのは静的動的関係無いと思うな
イテレータ的機能は逆に大規模開発だろうと積極的に使っていくべき
0292デフォルトの名無しさん
2012/06/11(月) 01:03:39.04君の目は節穴か?
0293デフォルトの名無しさん
2012/06/11(月) 01:06:27.76だって変なコード入れられるよね?
実行しないとエラーがわかないよね?
数行程度のコードならいいけど、
こんなコード、アプリからすれば
全体の全体の0.01%ぐらいのコードだよ?
0294uy
2012/06/11(月) 02:56:38.33そこは破綻する原因じゃないんだけど
もしかしてmapやinject使えない人ですか
破綻する原因は>>293で言ってることの積み重ね
どんな優秀なuyでも100000個もメソッドかけば1箇所くらいはタイプミスとかしてる可能性がある
それは人よって違う
自身の書いてるソースコードに、バグの混入の可能性が低い奴じゃないと動的言語で大規模は無理
動いてたはずのコードのから、いきなりバグが見つかったとき
そのバグをチェックする技法が存在しないことを知る
そしてそれは静的言語では解決できる問題だったりする
「本当にこれリリースして大丈夫なの?」そんな不安ばかりがソースコードとともに増え続けるのが動的言語
0295uy
2012/06/11(月) 03:31:12.83最初は型情報をソースコード中に書いてなくても
一度でも実行すれば少なくともメソッドの引数の型くらいは分かるわけだし
型情報を実行してからメタすればいいんじゃねとか思う
最初にメタされた型以外が渡されたら警告でも出す
型が分かってるなら部分的にネイティブコンパイルも可能になる
型安全性を高めたい時のみ
.rbのソースコード本体とは別に .rb_neitive とかいう型情報のファイルをおいて
.rb_neitiveの型情報を見ながら.rbを実行させていく
.rb_neitiveはスクリプト本体をテスト走行させた時に実行したメソッドに渡された型などを集積して生成する
そしてネイティブコンパイル出来るメソッドは引数型固定してネイティブにしてしまう
これによって失うものは
def func a
end
func 1
func "test"
とかいう最初と2回目以降で違う型の引数を(基本的に)渡してはいけなくなる事
もし渡された場合は、そこでエラーとして扱って実行をとめるか、ネイティブではなくインタプリタ側のコードを実行するか
得られるものは、
.rb_neitiveに集積できたメソッドに関してだけは速度と型安全性が高まる事
0296uy
2012/06/11(月) 03:49:52.32n = 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君が考えるような馬鹿な手法よりも
HM型推論でも実装して推論できないときにワーニングでも出したほうが1000000倍有効
>>296
ぬるぽは静的動的関係ない
0298デフォルトの名無しさん
2012/06/11(月) 07:55:27.96型はすぐ横に書いてあるからこそ可読性が高くなる。
別の場所に型の情報を保存するとかナンセンス
ぐだぐだ毎日、長文を書く時間あったら、
C#4.0とVS2012でGUIアプリでも作ってみろ
実行時パフォーマンスと開発生産性のバランスの良さがわかる。
0299デフォルトの名無しさん
2012/06/11(月) 07:59:54.56カーソル置いたとき等に何時でも見れるっていうのが
一番可読性高い
0300uy
2012/06/11(月) 08:55:47.18可読性の話はしてない
グダグダ他人の意見を否定してるくらいなら代案を出してみろよバカ
>>297
TraceMonkeyでググレカス
動的言語使ったことねーだろお前
obj =nil
obj.foo
0301uy
2012/06/11(月) 09:22:52.78開発中にIDEが.rb_naitiveファイルを見ながら.rbの動きを監視して
実際に公開するときは、.rbファイルだけで良い
それでバグの何割かは発見できる
ただRubyの自由度を僅かに下げる
本質的な解決になってない
やっぱアレか、あまり変数宣言をしないようにコード書くしかないな
動的言語が病院の医療機器に使われてますとかなったら、早めにそれかいたプログラマを血祭りにすべきだが
一体mrubyがどこで使われるのか興味がある
企業とかよりもこういうのは先に工学系の大学生が何か作るんだろうな
はーーー大学生は楽しそうでいいな
0302uy
2012/06/11(月) 09:29:06.60たとえば、アルゴリズム的なバグとかは動的静的関係ない
動的言語で書いていると、実はそこら辺のバグ混入率は
静的言語よりも減っていると思うが、あまり言及されていない
アルゴリズムの思考に型は不必要だから
違う種類のバグが入るようになるに過ぎない
しかし、動的言語が叩かれる要因は「頑張れば」出来るだろっていう事が、
実装されていない事によるストレスだろう
基本的にネット上に存在する動的言語リソースは静的言語を下回るからしょうがない
実際、静的だろうと動的だろうと、どちらも進んでいけば同じ右から中央に近づくか、左から中央に近づくかの差でしかない
ただ俺は、左から(動的)から中央に近づいたほうが楽だよって言ってる
人は苦労をしたがる生き物だから仕方ないか
バカは効率を理解しない のではなく、わざわざ効率の悪いほうへ行く
それによってなんらかの精神的バランスを取っちゃってるんだから、周りがなに言ってもだめだ
0303デフォルトの名無しさん
2012/06/11(月) 10:08:55.93お前そういうことは、>>196みたいにまともに動きやしないコードでも
コンパイル時点でエラーをきちんと出せるようになってから言えと。
0304デフォルトの名無しさん
2012/06/11(月) 12:01:57.360305デフォルトの名無しさん
2012/06/11(月) 12:05:28.89それができると動的、静的のカテゴリーがつながった言語が誕生する
0306デフォルトの名無しさん
2012/06/11(月) 12:13:55.280307デフォルトの名無しさん
2012/06/11(月) 12:19:12.28> 一度でも実行すれば少なくともメソッドの引数の型くらいは分かるわけだし
> 型情報を実行してからメタすればいいんじゃねとか思う
これじゃテストで見つかるような型エラーしか見つからないだろう
まったく型安全性が向上していない
最適化と型検査の区別がつかないなんて、君は本当に馬鹿だな
> 動的言語使ったことねーだろお前
> obj =nil
> obj.foo
Object x = null;
x.toString();
0308uy
2012/06/11(月) 12:54:23.05本当にズレたバカだな
レスするんだったらまともに全文読んで意味を理解してからレスしろよ
>それでバグの何割かは発見できる
>思ったけど>>295 は実際、.rb_nativeっつうか、開発時にIDEが組み込んでいるべき機能か
0309uy
2012/06/11(月) 13:00:14.70静的言語で開発効率が〜とか、やはりネタだと思ってしまった
ネタじゃないとするならば、よほど何も知らずに語っているとしか考えられない
動的言語と静的言語を見比べて何も思わないのであれば、
もう いいんじゃねえかな
まともな判断できない常時酔っ払いみたいな奴に一々教えてやるほど優しくないよ俺
それが効率良いと思ってるなら勝手に使ってろw
俺は一段上のフィールドの問題の解決に勤しむから、LL論外未経験の初心者はレスしてこないでよい
しつこいようだが、もう一度いう
Tracemonkey でググレサル
0310デフォルトの名無しさん
2012/06/11(月) 13:03:29.37どうせ理解できないから
無学低能は哀れだね
0311デフォルトの名無しさん
2012/06/11(月) 13:04:28.41> 動的言語で書いていると、実はそこら辺のバグ混入率は
> 静的言語よりも減っていると思うが、
データがないならそれはお前の妄想。
0312デフォルトの名無しさん
2012/06/11(月) 13:05:06.65可読性もまったく気にしないようだしただのアホだわ
言語仕様ながめたくらいでわかった気になってるしw
0313uy
2012/06/11(月) 13:17:19.28仕事では静的言語で開発するしか道がないから必死になるのもわかる
そもそも、動的言語の方が効率が出る!とかいうことを認識してしまったら
今日、今やってるこのプログラミングとはなんなのだろうか、と考えてはじめちゃうんだろうからな
まぁ無様で可愛そうな人たちだよね
そうやって、気づかないように気づかないようにやっていくしかない
ああ いいよ やってろ
そして、せいぜい「同意者」の多いこの社畜だらけの低レベルbbsで騒いで
名無しからの同意を得て安心感に浸れ
ただ、俺を巻き込むな
罪知らぬ夢の壁に僅かに爪を立てよ
0314デフォルトの名無しさん
2012/06/11(月) 13:20:30.070315uy
2012/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型を宣言する必要性も理解できず、やりたくないといっている奴が
なんでダラダラと長文書いてるのwwww
0320uy
2012/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可哀想に。お前の要求は
ことごとく破棄されるw
0323uy
2012/06/11(月) 13:45:01.02気持ち悪い
動的言語の問題点、何も考えられない奴はいいから静的言語使ってろ
もう一生使わなくていいから
0324デフォルトの名無しさん
2012/06/11(月) 13:47:41.630325デフォルトの名無しさん
2012/06/11(月) 13:47:45.07お前は道端のアリが
俺のことをなんて思っているのか
いちいち気にするのかい?
0326uy
2012/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> さて、この問題をどうするか
余計に時間をかけるしか無いな。
0329uy
2012/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あと何レスあれば
そこまでやるのなら、最初から静的言語を使ったほうが良い
という答えにたどり着きますか?
0332uy
2012/06/11(月) 14:10:07.16という方向性に進んでも良いと思ってる
でもまだその時期じゃないんだろうな
ならば、動的言語をいかに使えるものにさせようかというよりも、
プログラミングの概念に制御構文が不必要という事実に世界を気づかせ
その方向に導かせるための最短ルートの提供が最も好ましい
0333デフォルトの名無しさん
2012/06/11(月) 14:11:45.210334デフォルトの名無しさん
2012/06/11(月) 14:11:58.57まさに動的言語の欠点だね。
変数の中身がAという型と決まっていれば、
Aという型の状態のみを考慮すればいい。
しかし変数の中身が、Aの場合もあるし
Bの場合もあるし、Aにちょっと手を加えたものの場合もある
なんてことになると、いろんな状態を考慮しなければならない。
要するに状態の数、条件分岐の数だよ。
動的言語だと、オブジェクトの取りうる
状態が多いからテストも大変になる。
0336uy
2012/06/11(月) 14:18:53.10じゃなくて
テストできねーんだよカス
実行させて正しく動くかどうか確かめる目デバッグしか、動的言語は出来ない
至極単純
0337デフォルトの名無しさん
2012/06/11(月) 14:20:31.18テストコードを書いてテストは出来る。
まあ、動的言語の方だと修正の時の
効率が悪いのはいつものことだが。
0338uy
2012/06/11(月) 14:23:31.17Redmineに、金にもならないというのに毎日必死に様々なレポートが来るあたりに
もうあの頃に戻りたくないみたいな必死さを感じる
>>329
1、外部ツールによって型チェックをどうにか行わせる技法
2、ソースコード中に条件分岐を入れない、つまりHTML化
3、3つ目
「大規模プログラムを作らない」
プログラムは多機能なものであろうと、どうにかして「小規模」にさせ
動的言語でも管理できるソースコードサイズに抑える。
0339デフォルトの名無しさん
2012/06/11(月) 14:26:02.46事故レス化www
0340uy
2012/06/11(月) 14:29:22.92俺の場合2000行だと思う
空行とか、冗長なアルゴリズム抜いた2000行な
変数名やその他、全ての処理を覚えきれるのが俺はそのくらい
ちょっと多めに見積もっても1万行
これ以上はきつい。共通処理は抜き出して、ライブラリ化して欲しい
現時点、この範囲内で何を作れるか、だろう Windowsは作れない
人はおそらく今の20歳よりも、10年後の20歳の方が頭が良い。
人間のスペックが高くなれば動的言語でも大規模普通に書けるようになるはずだから、
こっち側が伸びるのは時間の問題という気もしなくもない
0341デフォルトの名無しさん
2012/06/11(月) 14:32:03.670342uy
2012/06/11(月) 14:35:11.36俺以外の誰かがITを進化させるだろうよ
結局、俺自身がどうしても命や生涯を削ってこのITっつう分野に
金にもならない無償の努力を注ぎ込む価値はないものだと思う
勝手にやっててくださいよ
人は何かやってないとダメだ
「毎日ちょっとずつ前進してる、成長してる」っていう、その思い込みみたいな、高揚感が大事
それを得る為に、今2012年は ITという分野をオモチャにして、「成長感」を感じて、
生に意味を見出そうとしてるだけにも思える
なればこそ、あまり速い速度でゲームクリアさせる意味も、実際のところないのかもしれない
つうか、それよりもふと思うのは、科学が発展した事によって
戦争兵器開発などで人を殺してきた数と、医療機器などの開発で人を生かしてきた数、はたしてどちらが多いのであろうか
俺のやっている事はめぐりめぐって、誰かを殺すことになる可能性も考慮したい
0343デフォルトの名無しさん
2012/06/11(月) 14:36:43.180344uy
2012/06/11(月) 14:45:44.34無償のボランティアで俺が何かITの世界へ貢献する価値をやはり見出せない
結局は遊び
効率の悪い事やってる奴を見つけては晒しあげる遊び
俺はなんと性格の悪い事か
俺はただ、自分の力で何か世の中の一部が動いていく様子を見ているのが面白いから
リソースをばら撒いたりするだけで、社会貢献などは考えていない
駄文書きながらでも、3つも案がでただけ、よしとする
1、外部ツールによって型チェックをどうにか行わせる技法
2、ソースコード中に制御構文を入れない、つまりHTML化
3、大規模プログラムを作らない
0345デフォルトの名無しさん
2012/06/11(月) 16:32:18.23働けよw
V爺か。
0346デフォルトの名無しさん
2012/06/11(月) 16:51:54.200347デフォルトの名無しさん
2012/06/11(月) 22:23:47.03はよ働け
0348uy
2012/06/12(火) 04:18:36.80世の中に金儲けの手段なんて良い事から悪い事までいくらでもあると思うよ
ある奴が「 金儲けをする事は悪い事ではない 」 と言った、
俺はそいつのその意見を否定する
0349デフォルトの名無しさん
2012/06/12(火) 11:06:45.880350デフォルトの名無しさん
2012/06/12(火) 11:23:54.710351デフォルトの名無しさん
2012/06/12(火) 22:55:15.74まじでゴミカスになるぞ
0352uy
2012/06/13(水) 05:01:20.79社会にでても、ニートをネット上で叩くことはないだろう
マジレスするとそんなに長生きするつもりもないし
したくもないし
できるとも思っていないからやりたい事だけやって生きるのさ
0353デフォルトの名無しさん
2012/06/13(水) 05:04:51.070354デフォルトの名無しさん
2012/06/13(水) 05:12:20.11オセロの起こり得るコマ配置を数えろよ
rubyとやらで
0355uy
2012/06/13(水) 05:14:48.05ニートがなぜニートをやっているか
分からないだろう
http://www.google.co.jp/#hl=ja&sclient=psy-ab&q=%E7%A4%BE%E7%95%9C%E8%B5%B7%E3%81%8D%E3%82%8D%E3%82%AA%E3%83%A9%E3%82%A1&fp=72cd4ed8ec90fb0e
社畜起きろと日本中で言っている
「目を覚ませ」 ってニートからのメッセージだよ
受け取れ
0356uy
2012/06/13(水) 05:25:48.11また言語構文を1から覚えないと扱えないんだよな
基礎的なif、forの扱いは変わらないだろうけど、
if,forだけ使えたってそれはC言語レベルのプログラミングが出来るってだけで、全然言語扱えていないし
覚えることが増える原因はソースコード内に型宣言があるからだと思う
型のある言語ってやっぱダメじゃね
つうかね、一度決めた決まりごとを「こうしたほうがいい(キリッ」とかって変えていくなら天下をとれって話
「こうしたほうがいい(キリッ」とかいってObjectve-CやScalaやGoみたいに、今まで言語とは違ったシンタックスでやられると
迷惑でしかないんだよ
{ } このブロック括弧が [ ] とか | | や "" だったり
文字リテラルが $test$ .aaaa. とかで表現する言語でてきたら、発狂するだろって話
さっさと統一しろと
それが出来ないならrubyくらいにリファレンス読まなくてもなんとなく言語仕様が読み取れるような言語設計で言語作れと思う
0357デフォルトの名無しさん
2012/06/13(水) 06:46:55.390358デフォルトの名無しさん
2012/06/13(水) 07:00:43.48ほぼ全てが「rubyならこう書けるんです。分かりやすいでしょう?」とか、はてな民がほざいて
馬鹿が「うわールビーは凄いなー。全く気付かなかったけど、言われてみれば分かりやすい」とか追従する、
驚き最大化の原則に基づいてるだろ。
0359デフォルトの名無しさん
2012/06/13(水) 07:19:35.56たいていの言語で、エキスパートの書くコードはそんなもんだろ。
だらだらと書いたコードを、わかりやすいと勘違いして信仰してる奴等については知らんが。
0360デフォルトの名無しさん
2012/06/13(水) 07:26:30.92意図的にアンチし続けてもそろそろ他の動的言語と歴然な差はついてきてるが
0361uy
2012/06/13(水) 07:46:44.28型があるとさ、文法のバリエーションが言語ごとに豊富過ぎなんだよ
これらを言語乗り換えの度に覚えなおしていくのってアホだろ、
c
void func(char*str){
}
c++
const void f() const {
}
java
public static void func(String[] args){
}
Scala
def func(b:Boolean, f: => String) = {
}
C#
static int Sum(int x, int y, int z = 0, params int[] rest){
}
Go
func countTest(src, term string) {
}
0362uy
2012/06/13(水) 07:47:52.02def func a , b
end
適当に感でかいたって動くわ
0363デフォルトの名無しさん
2012/06/13(水) 07:52:46.44void f(const char* s){
}
c++
void f(const std::string& s){
}
java
void f(String s){
}
C#
void f(String s){
}
0364デフォルトの名無しさん
2012/06/13(水) 08:04:54.12> 適当に感でかいたって動くわ
そのテキトー感がリスクなんだよな。
結局、ハイリスクハイリターンを取るかローリスクローリターンを取るかの考え方の違いじゃね?
0365uy
2012/06/13(水) 08:12:01.77言ってる事が曖昧すぎる
「リスク」は何をさしてるか言ってみろ
func c(a, b string , c , d int) {
fmt.Println(a,b,c,d)
}
どうせGOはほうっといても勝つから、何年後かにはこういう形のメソッドの型宣言が一般的になってるよ
型がある時点でどんどん変わっていく
ついてくる?
0366デフォルトの名無しさん
2012/06/13(水) 08:51:58.10ゴルファーは確かに多いし変なコード書く輩も多いけど
言語そのものはそこまでヘンテコでもないよ
0367デフォルトの名無しさん
2012/06/13(水) 11:27:03.30どうでもいいけどすごくobject pascalっぽい文法
0368uy
2012/06/13(水) 13:37:39.110369デフォルトの名無しさん
2012/06/13(水) 13:52:08.12感じゃなくて、勘だろハゲ
0370デフォルトの名無しさん
2012/06/13(水) 14:07:50.53統合しちまえよ
0371デフォルトの名無しさん
2012/06/13(水) 14:09:51.71すばらしい
0372uy
2012/06/13(水) 14:15:13.67じゃあ一生静的言語を使っていろって
二度と動的言語触らなくていいから
0373デフォルトの名無しさん
2012/06/13(水) 14:19:22.93「いいんですか、俺は必要悪ですよ?」
0374デフォルトの名無しさん
2012/06/13(水) 14:28:03.10ノンビリしとらんでもうちょっと生き急げよ。
0375デフォルトの名無しさん
2012/06/13(水) 15:09:45.22仕事で言語選択権の無いドカタにはあまり関係の無い話
これからも静的言語でがんばってくださいよ…
0376uy
2012/06/13(水) 15:44:54.87みちゃならんものを見た気がするこわ
0377デフォルトの名無しさん
2012/06/13(水) 16:06:44.690378デフォルトの名無しさん
2012/06/13(水) 16:21:50.120379デフォルトの名無しさん
2012/06/13(水) 16:36:04.650380デフォルトの名無しさん
2012/06/13(水) 16:50:38.83Rubyを学習し始めた頃は誰でもRubyは素晴しいと思うのだが、
数年も使えばそのどうしようもない互換性のなさにウンザリする。
1.4時代のコードが1.6になった途端に互換性がなくなり動かなくなることはあったが、
1.6→1.8ではそれが顕著になり、
1.9など何のエラーも出さずに前のコードが動く方が珍しいほど
それどころか1.9に行かずREEが海外ではデファクトになりつつある現状、
そして始まるPlain RubyとREEの方言問題
0381uy
2012/06/13(水) 17:00:14.02Rubyを叩いて変わりにPython使ってますみたいな奴ならまだわかるけど
Rubyを叩いてC#使ってます!!!
とかお話にならない
なんでそんなレベルでレスできるのか神経を疑ってしまうな
俺は未解決問題について思考をまとめているだけなわけで
有用レスを返せないのであればお前たちのレスはただのゴミでしかない 邪魔だ失せろ
0382デフォルトの名無しさん
2012/06/13(水) 17:31:59.200383デフォルトの名無しさん
2012/06/13(水) 21:34:18.23お前のためのスレだ
○○言語をディスってる人ってただの中二病だと思う
http://kohada.2ch.net/test/read.cgi/prog/1339212116/
0384デフォルトの名無しさん
2012/06/13(水) 22:50:10.93パフォーマンス考えないバカはお話にならない
Rubyはもっさりで用途限定
こんなクソ言語はおぼえるだけ時間の無駄
Rubyは宗教団体だから、パフォーマンスの話題はタブーなんだろうな
モッサリ言語のくせに、エレガントだの自画自賛して笑える
>>380
MRIがひどすぎるから、他のRubyがでてきてるのか。
後方互換性の問題は同意。
バージョンあげるとすぐ動かなくなるから、きわめて開発生産性が低い
0385デフォルトの名無しさん
2012/06/13(水) 23:10:15.900386uy
2012/06/14(木) 05:05:36.64Rubyを叩いて変わりにPython使ってますみたいな奴ならまだわかるけど
Rubyを叩いてC#使ってます!!!
とかお話にならない
なんでそんなレベルでレスできるのか神経を疑ってしまうな
俺は未解決問題について思考をまとめているだけなわけで
有用レスを返せないのであればお前たちのレスはただのゴミでしかない 邪魔だ失せろ
静的言語よりも開発効率のでる動的言語から、どうやって
静的言語よりも時間が長くなってしまう可能性のある「デバッグ時間」を削減するかって部分の話なのに
話について来れないならお前たちは邪魔すぎる
ろくな思考アイディアをだしてこないゴミであれば こいつらの使用目的も薄くなったか
0387uy
2012/06/14(木) 05:20:29.45ゴミに対し何かを教えてやるつもりもない
ゴミが効率の悪いゴミグラミングをしていても
俺は教えてやらない
勝手にやってろ 以上
0388デフォルトの名無しさん
2012/06/14(木) 05:27:39.240389デフォルトの名無しさん
2012/06/14(木) 05:30:31.01いつまで頭の中が静的、動的の2分類なんだ?
ルーピー言語の狂信者はやっぱりアホだなw
強く型付けされた言語+型推論、が最強なのは明らかだろ
開発の効率、性能、無駄な記述の排除、これ全部満たすのはこれしかない。
C#は型推論も関数型の要素もありかなり現代的
やっと型付けされた言語の重要性に気づいたかとおもいきやGoかよ
いまどきGenericsもない言語とか終わってんだろww
Python? Rubyよりましだがどっちもモッサリだからどうでもいいな
どんぐりの背比べ
0390デフォルトの名無しさん
2012/06/14(木) 07:12:25.450391デフォルトの名無しさん
2012/06/14(木) 07:38:27.660392デフォルトの名無しさん
2012/06/14(木) 07:49:10.75で、こいつは自分がHaskellを理解できないルーピーだということには、
いつ落とし前をつけるのかねwwwwwwwww
0393uy
2012/06/14(木) 09:33:15.40静的言語一生やってろよゴミ
Haskellってモナド(笑)とかいうゴミカス概念の元でプログラミングしてるあれでしょ
面白いことやるよね
「ぼくのかんがえたモナド(笑)」の上でプログラム組ませるとかさ・・・
Haskellって本当にEsoteric programming languageなんだなって思った
バカしか使わない
関数型言語はLisp以外はゴミ
良く覚えておけゴミ
0394uy
2012/06/14(木) 10:02:43.63rubyをディスってる奴、Python使ってるんだよね? またはLispやPerlという選択肢もあるにはあるか?
rubyディスってC#やJAVA使ってます!!
とかマジで面白すぎなんだけど
じゃあ日ごろのPC操作やプログラミング上でたまに必要になるバッチ処理は何言語でかいてるっていうんだよ
本気でC#やJAVAで書いてるわけはないと思うから
やっぱ手動でやっちゃうのかな
rubyやPythonや動的言語なんていらない!C#、JAVAあれば十分! 静的言語でも効率がでる!
とかいう意見、これ絶対に議論で勝てるわけがないのにw
よほど頭が知恵が浅いんだろうか・・・
いくら俺がふざけたコテだからって
俺と逆説唱えるために動的言語が嫌いになってをこれから一生動的言語を触らずに
プログラミングやっていくとか哀れすぎる
まだ気づかないのか
0395uy
2012/06/14(木) 10:08:26.50情弱のゴミのくせに態度が悪すぎる
お前らゴミは人に教わる態度ではないよね
苦しめ
0396デフォルトの名無しさん
2012/06/14(木) 10:16:13.67スレタイ「動的言語の問題点、大規模開発でテスト工数が増大」
0397デフォルトの名無しさん
2012/06/14(木) 11:34:42.08C#は汎用だし小さなプログラムにも使えるだろ
後方互換性に配慮しないルーピー言語で書くと、バージョンあげたら
すぐに動かなくなるからトータルで見ると生産性が低い
0398デフォルトの名無しさん
2012/06/14(木) 11:48:20.61動的言語のライブラリを作っているようなものだ
0399デフォルトの名無しさん
2012/06/14(木) 11:49:22.94uyだけはこの板からとっとと出てって欲しい
Rubyの良さも悪さも何も解っちゃいない
0400デフォルトの名無しさん
2012/06/14(木) 11:50:49.56ここはお前の私物じゃねえんだよと
0401デフォルトの名無しさん
2012/06/14(木) 12:44:08.670402デフォルトの名無しさん
2012/06/14(木) 13:53:10.40動的言語の問題点、uyが現れる
0403デフォルトの名無しさん
2012/06/14(木) 14:24:37.76コンテクストを引き回す = 型でコンテクストを強制だから
動的言語好きにはそこが窮屈なんだろう。
俺だって適当に書散らすときはPythonの方が楽だ。
良く分からないのは静的言語好きなのに嫌う連中。
静的型でバグ減らせる方が良いんじゃないのか?
0404デフォルトの名無しさん
2012/06/14(木) 14:33:11.02tiobeでの上位はC,Java,C++,Objective-C,C#
×静的言語好き
○C系列言語好き
0405デフォルトの名無しさん
2012/06/14(木) 14:52:27.21多くの開発者が移行しやすいようにsyntaxを似せて
あるだけであって、内部のアーキテクチャはまったく違う。
C系列とひとくくりにしないように。
0406デフォルトの名無しさん
2012/06/14(木) 15:01:57.930407デフォルトの名無しさん
2012/06/14(木) 15:37:06.02俺はこのスレでは動的側だけど、型推論のある言語は否定しないよ
必要なところだけ指定すればいいからね
全部手で指定するタイプが嫌なだけ
0408デフォルトの名無しさん
2012/06/14(木) 16:23:58.690409デフォルトの名無しさん
2012/06/14(木) 16:56:46.850410デフォルトの名無しさん
2012/06/14(木) 19:48:32.42シンタックスがCっぽければなんだってC系列、って言って騙せるんだよw
で、世の中でそうであったほうが儲かる、って奴がいるから、変わらない。
0411デフォルトの名無しさん
2012/06/14(木) 20:09:25.160412デフォルトの名無しさん
2012/06/14(木) 20:27:00.52それを分かっていながらユーザーの移行性を軽く見た結果流行ってない言語ってあるよな
まぁビジネスライクとアカデミックの違いだな
0413デフォルトの名無しさん
2012/06/14(木) 20:34:19.64そうやって競争したくない相手を同類にして勝てそうな相手だけを仲間外れにするんだよ
0414デフォルトの名無しさん
2012/06/14(木) 20:35:44.500415デフォルトの名無しさん
2012/06/14(木) 20:39:50.480416デフォルトの名無しさん
2012/06/14(木) 20:48:50.23流行った結果しがらみだらけになる、という馬鹿の実例があるのに、
それをご丁寧に真似する馬鹿も世の中いるからなw
0417デフォルトの名無しさん
2012/06/14(木) 21:35:13.310418デフォルトの名無しさん
2012/06/14(木) 21:43:20.61今じゃJSのことをJavaよ呼ぶ輩がいる始末…
0419デフォルトの名無しさん
2012/06/14(木) 22:03:29.90使い慣れた文法を捨てて
言語を乗り換えさせる程の価値は無いってこと?
C#使いが慣れた文法を捨ててまでHaskellに移行しないのと同様、
Ruby使いは慣れた文法を捨ててまでC#に移行する必要は無いってこと?
0420デフォルトの名無しさん
2012/06/14(木) 22:10:36.30でも割と居る気がする
Pythonのインデント方式に拒否反応を起こす奴とかもいるし
0421デフォルトの名無しさん
2012/06/14(木) 22:17:26.29コスパ無限大のメリット
0422デフォルトの名無しさん
2012/06/14(木) 22:40:37.58C#3.0から型推論ある
http://ufcpp.net/study/csharp/sp3_inference.html
Rubyなら迷わずC#に移行だろう
性能がまるでちがう
高機能なIDEもあるしな
0423デフォルトの名無しさん
2012/06/14(木) 22:52:43.22プロトタイプ作成用途はそれでいいかも知れんね
ただ、テキスト処理や高級計算機としての用途がメインの俺は
移行というほどのことにはならんだろなあ
0424デフォルトの名無しさん
2012/06/14(木) 23:04:03.59HaskellやOCamlの型推論とは比べ物にならん
この程度の型推論も出来ない言語だぜ?
http://ideone.com/0nb9F
0425デフォルトの名無しさん
2012/06/14(木) 23:05:15.05> つまり型安全性や型推論のメリットなんて、
> 使い慣れた文法を捨てて
> 言語を乗り換えさせる程の価値は無いってこと?
どの言語でもしばらく使っていれば慣れるので
それは理由に成らない。
型安全性や型推論のメリットだけが残る。
0426デフォルトの名無しさん
2012/06/14(木) 23:28:44.21http://ideone.com/tSyAy
0427デフォルトの名無しさん
2012/06/14(木) 23:28:49.84当たり前でしょ?
using System;
public class Test {
public static void Main() {
Func<int, int> f = x => x + 1;
var g = x => x + 1;
}
}
var gの方のxは、上のfの所のxとは別物。
いきなり、var g = x => x + 1; なんて書いても
xの型がわからない以上推論できる要素が何もないじゃないか。
0428デフォルトの名無しさん
2012/06/14(木) 23:32:39.00Haskellは出来るけど
http://ideone.com/MMfP7
0429デフォルトの名無しさん
2012/06/14(木) 23:35:22.80> xの型がわからない以上推論できる要素が何もないじゃないか。
xの型を書いても戻り値の型すら推論出来てない
http://ideone.com/jpBRl
0430デフォルトの名無しさん
2012/06/14(木) 23:42:37.98http://ideone.com/MpnOH
Func<int, int> f = x => x + 1;
Func<String, String> s = x => x + 1;
C#は文字列にも出来るから勝手に推論されても困るくね?
テンプレート的な機能でも入れば別かもしれないけど
template<typename T> Func<T,T> f = x => x + 1;
0431デフォルトの名無しさん
2012/06/14(木) 23:45:27.03オーバーロードした演算子だって戻り値決まってんだから推論すべきだと思うが
0432デフォルトの名無しさん
2012/06/14(木) 23:50:17.30上の例は具体的に何の型に推論されるべき?
0433デフォルトの名無しさん
2012/06/14(木) 23:56:04.43それをintとStringが継承してれば、その型を推論するのが良い
0434デフォルトの名無しさん
2012/06/15(金) 00:06:01.96それは演算子で推論してるだけじゃん。
+が数値扱う演算子として定義されてるから推論できる。
逆に言えば、+演算子が使われている時、+の左右は数値でしかありえない。
(標準の+を隠して自分で定義すれば話は別だが、同時に複数使えない)
C# なら xは数値以外の好きなオブジェクトにすることができる。
言語仕様の違いでしかないよ。
0435デフォルトの名無しさん
2012/06/15(金) 00:08:16.95インターフェース型的なものをintとStringが継承するとして、
その型と推論して、じゃあ演算自体はどうするんだよw
0436デフォルトの名無しさん
2012/06/15(金) 00:08:45.82それはねーわwwJavaのジェネリクスに退化するわw
<String>と<int>でJIT後のネイティブコードはそれぞれ生成されるんだからさ
高速化のために
0437デフォルトの名無しさん
2012/06/15(金) 00:10:51.53> それをintとStringが継承してれば、その型を推論するのが良い
つまり、objectという基本クラスがあって、
objectを継承した、Int。
objectを継承した、String。
この場合は、objectと推論して、
object + object をするのか?
んで、その結果は?
0438デフォルトの名無しさん
2012/06/15(金) 00:12:38.44そのかわり型に応じた演算子オーバーロードが出来ないhaskell。
ということだね!
0439デフォルトの名無しさん
2012/06/15(金) 00:12:40.73まるで演算子のおかげで推論できてるかのような言い草だが、全然関係ない
C#
http://ideone.com/bZ0Oi
Haskell
http://ideone.com/1WXPd
0440デフォルトの名無しさん
2012/06/15(金) 00:14:32.21Haskellの + は Int, Integer, Float, Double 等や、
Num型クラスをインスタンスとなる任意のユーザ定義型でオーバーロードできる
0441デフォルトの名無しさん
2012/06/15(金) 00:19:20.48引数によって決まる
0442デフォルトの名無しさん
2012/06/15(金) 00:19:29.25そのfの型を出力したら何で出るの?
0443デフォルトの名無しさん
2012/06/15(金) 00:21:29.54f :: a -> a
aはただの多相型
0444デフォルトの名無しさん
2012/06/15(金) 00:28:30.76全く移行する気にならないでしょ?
やっぱり>>419は正しいんじゃない?
0445デフォルトの名無しさん
2012/06/15(金) 00:47:33.800446デフォルトの名無しさん
2012/06/15(金) 01:17:26.43Ruby辞めてC#使おうと思ったのに
なーんだウンコじゃん
0447デフォルトの名無しさん
2012/06/15(金) 01:21:39.390448デフォルトの名無しさん
2012/06/15(金) 01:52:33.51Syntaxのみで選ぶのはナンセンス。
パフォーマンス(性能)は高いか?
スクリプト言語はモッサリすぎて用途が限定される
開発生産性は高いか?
クラスライブラリが充実しているか?
ドキュメントは充実しているか? ネットと書籍
高機能なIDEは使えるか?
高機能なIDEなしに高速なデバッグとリファクタリングは不可能
英語が苦手な人限定:日本語情報は充実しているか?
コンパイルの時間は高速か?
C#は2回目以降は瞬時。エディット&コンティニュー機能
後方互換性に配慮されているか?
頻繁に破壊的仕様変更がある言語では、開発の生産性が落ちる。
例えば、RubyやRubyやRubyなど。
嵌ったときに質問できる場所はあるか?
マイナー言語だと英語圏でもレスポンスが返ってこない
結論: C# 最 強 !!
0449デフォルトの名無しさん
2012/06/15(金) 03:49:36.60何も考えずに作ってる証
0450uy
2012/06/15(金) 05:53:42.61お前みたいに理解してる奴もいるが、後ろを見てみろ
マジで>>397こういうのがいるんだよ、どうにかしろ
>>399
古参だと何が偉いのか知らないけど
少なくとも2chにおいて重要なのはお前よりも俺
俺がスレ引っ掻き回したらこのスレは1日で50もレス進んだ
同じ事出来る?
マジレスするとインターネット上に同じコミュニティはせいぜい1、2年しか持たない
昔はよかったなんていっても昔の様子には二度ともどらない
3年目にもなると新しい層がやってきて、元いた層は別の場所へ移動していくか、駆逐される
俺も俺の属したコミュニティを新しい層に駆逐された事もあるが、今回は俺が侵略し駆逐する側であるだけ
Haskellはゴミ、夢から覚めろ
0451uy
2012/06/15(金) 06:20:51.04俺がrubyを布教する事によって俺に利があるわけでもないし
ルビリスト(笑)界隈が賑わうだけの事、そういう集団に混ざるのもいやなんだよね
こんなゴミbbsでコテ1人が騒いだ程度で何かがどうにかなってしまうなら
よほど基盤が弱いか
よほど他のruby使いがヘタレなんだろ
あと、俺は名無しでレスをする事もある
根本的にはuyで書き込むのと同じ内容のレスをしているにもかかわらず
同意を得られるところをみると・・・w
お前らは条件反射でuyという名をみてとりあえず否定レス返してるだけなんだなぁと思った
この板でまともな議論は不可能である ただの遊び
0452uy
2012/06/15(金) 07:20:09.04人1人の影響力は知ってた
ム板の奴らがuyを邪魔だと思うように俺にとってはプログラミング界すべてが邪魔だ
どちらがどかされるかだよね
Rubyの良さを教え煽った後に意地を張らせRubyを今後そいつが使えなくする
とか狙ってやってたわけじゃないが、そういうやつが増えてきた印象をもつ
かわいそうにな
けどこれでいいよ別の何かを作るんじゃないか?静的言語厨が、無駄なものをな
結局は金でしょうプログラミング、俺はプログラミングで利益を持たないからすべての言語宗派の味方であり敵である
被害を被るのは、プログラミングを食い物にして生活してる層だけだろ
知るかよそんなものこんなデジタル媒体でいつまでも商売続くと思うのが間違い
俺の通った後が焼け野原だと感じるなら、uyの影響力を認め自分の無力を理解したことになる
負けを認めたなら次は負けないように励めよカス
俺はプログラミングの技術をプログラミングをやっているやつをからかうためにも使う、からかわれてると感じたなら、レベルの低さを自覚しろ
0453uy
2012/06/15(金) 07:35:38.56おまえ等がコテを名乗れよ
そんで俺よりもRubyと2chのスレ進行に対し有益なレスをしろよ
名無しからくる多種多様な質問を悉く返せよ
それを出来る奴がいないからいつまで経っても2CHのム板はuyの天下のようなものなる
おまえ等はこの板でコテを名乗れない
コンピューター全般の広域の知識が俺よりも圧倒的に劣るから、レス出来るものが圧倒的に限られて話にならない
結局uyよりも総合的に力がないから、邪魔だと思っても消せないのではないか
自分が有象無象の1人ではないと自信があるならコテでも名乗って俺の存在感を凌駕しろよ
名無しという名前に隠れてこそこそやってるだけなら中身なんて中学生レベルでもごまかしは利く
0454デフォルトの名無しさん
2012/06/15(金) 07:43:23.57動的言語は駄目だ、つーかあらゆる意味で無理と確信しましたわ
砂上に楼閣建ててる感がヤバイ
コードサイズ膨らむほど幾何級数的にデバッグコストが上がる。
それも断片化のために検証が困難なブラウザで。
初心者受けはいいぶんあちこち入り込んできて本当にタチが悪い。
JSXなりHaxeなりGWTなり何でもいいが、とにかくJavaScriptはヤバイ
中規模以上のプロジェクトにおいては即刻使用を禁止すべき
0455デフォルトの名無しさん
2012/06/15(金) 07:45:14.72型宣言は冗長だといっていたのに、
あいかわらずゴミ長文を連投してるなww
その駄文を書かなければ、毎日数千個の型を宣言できるよwwww
0456デフォルトの名無しさん
2012/06/15(金) 08:50:57.080457uy
2012/06/15(金) 11:03:41.61色んな建物を建てては崩れて立てては崩れてやっていけば
砂の上にもガレキが積もってまともな建物建てられるようになるから、もう少しの辛抱だろ
今、その動的言語で書いているソースコードは本当に自分で書かなければいけないものか?
もしどこかに既に安定したライブラリがあるなら、その部分のソースコードを丸ごと消せるのではないか
最初のスタートが大変なだけだよ
後から楽になってくるって、動的言語コンパイラやIDEの開発者を信じろよ
俺は覚悟を決めた
0458デフォルトの名無しさん
2012/06/15(金) 11:15:20.690459uy
2012/06/15(金) 11:24:47.68Rubyで例えるなら
Ruby1.8で動いてたコードを
Ruby1.9で動かそうとすると、いくつかエラーはでるものの直していけばすぐ動くんだけど
本当の意味では正しく動いてない
いくつかの廃止された構文、仕様の変わったメソッド
それらは何をどうやったって抽出できない
実行すると、処理系は何もエラーメッセージを出す事もなく、ソースコードのどこかで意図しない動作をし続ける
目デバッグやprintfデバッグしきれないくらいに膨大なソースコードだったらそこで詰み
互換性がないとかいう問題じゃなくて
つまり中規模だろうと大規模だろうと、
バージョンが変わったら過去のソースコードはゴミ、基本的にその時に全部捨てなきゃならないんだろう
どうしても捨てられないって奴だけが、必死にデバッグする
確かにrubyは泥沼
今後1年〜2年限りしか使わないプログラムだったら、別に仕様変更なんて怖くない
今後5年〜10年と使っていくプログラムの作成をrubyなんかでやったら死ぬ
でも今後5年〜とか長期的に使用するようなプログラムを俺は作らないので、俺関係ないし
泥沼なのしっててお前らを泥沼rubyに突き落としたい!
0460uy
2012/06/15(金) 11:33:43.47大部分をオープソースのライブラリで書いて、
ライブラリのバグを見つけ次第、ライブラリ作者に報告
仕様変更時のバグ発見なんて人海戦術でやってれば
一人でPrintfデバッグしてるよりはよっぽど早期対応が出来る
けどフリーライブラリの作者なんて金で動いているわけでもないし、対応が遅いかもしれない
所詮焼け石に水
結局動的言語は仕様変更というものがなくなって、開発がとまらない限り永久に泥沼
しかしrubyはまだまだ完璧とは程遠いのでこれからも仕様はどんどん変わっていくよね
泥沼rubyの中でも上手に動ける奴だけが生き残る
下手に泥沼rubyで動き回った奴は入った瞬間に溺れ死ぬ
0461デフォルトの名無しさん
2012/06/15(金) 11:33:49.610462デフォルトの名無しさん
2012/06/15(金) 12:14:50.70わかってるようでわかってないな
最後の3行で結局Ruby擁護してるし
アプリは1年しかつかわなくとも、Rubyが非効率なのは変わらない。
おまえの知識が仕様変更のたびに無駄になってるという非効率に
なぜ気がつかない。
上手に動ける奴というか、賢い奴はもうRuby捨ててる
Rails系フレームワークが増えた時点でRubyの必要性がなくなった。
9割を超えるWindows環境でまともな速度で動かないランタイムも致命的。
いつまでたっても低品質なまま
0463uy
2012/06/15(金) 12:44:04.58現時点、0から開発しようって場合にrubyは最高効率なのは変わらない
少なくとも、「俺が」rubyを使った場合にはそうなる
ただし死後都で使うには向いていない、品質は低い
過去からのソースコードを流用すればするほどに品質は下がる
バージョンアップごとに
毎回書きなおさなければならないくらいにキチってる
しかし2.0で100%互換性を持つとの宣言してる、さてどうなるか
http://jibun.atmarkit.co.jp/lcom01/special/nicocho/01/01.html
リリース日はRuby2.0、2013年2月24日予定らしい
ruby程度の仕様変更のたびに無駄になってるという非効率は
静的言語の>>361 これよりはマシだろう お前は今まで何個の静的言語を覚えてきた?
静的言語の型宣言の仕方は言語ごとにどんどん変わっていく
しかも最近になって型推論とかいうブームを引き起こしたようだから
数年後にはガラっと変わっちゃうぞ
0464デフォルトの名無しさん
2012/06/15(金) 12:51:37.820465デフォルトの名無しさん
2012/06/15(金) 12:57:18.930466uy
2012/06/15(金) 13:03:13.73Railsの影響なんだろうな
もう既に動かなくなった大量rubyリソースがその年代のログにある
まぁちょっと変えれば動くけど
初心者や面倒くさがりには、それが出来ないから、動かないゴミソースとして扱われる数々のソースたち
たまに更新のとまってHPに残されたソースコード
古くてそのままじゃ動かないけど有用なものを見つけたときに思う
これはやばいと思うよw
技術ある奴から見放されすぎ
でもプログラマなんてものは腐るほど次の世代が出てくるから、rubyを見限った老害というか
ruby言語の礎となった奴らが今何をわめこうと
過去の資産など何一つもっていない初学者は、過去にその言語に何が起こったかなんて知った事ではないんで
効率いい言語を使う
結局よほど恵まれた職場でなければ本職になったとしても、効率のいい言語は使えないし
効率のいいプログラミングもさせてもらえない
数々のしがらみによって、古いコードを継ぎ足して使い続ける
職業マというのは自分の使っている開発環境の効率の悪さ、死後都の効率の悪さに気づいてしまったら
どこかの地点であきらめる必要がある
0467デフォルトの名無しさん
2012/06/15(金) 13:05:23.580468uy
2012/06/15(金) 13:12:53.85その「動的言語」をrubyで語るのであれば仕様が安定したのを見定めてからが本番だろ
2.0で本当に互換性が保たれているのか、全てはそこを確認してから
それまでの議論なんていうのは、ただの机上の空論の飛ばしあいに近い
動的言語の概念そのものに根本的な問題があるのに、動的言語自身の仕様さえ安定していない現状では
ろくに資産は作れない、仮に大規模な安定したプログラムを作ったとしてもそれはrubyの仕様変更によってぶっ壊れる
まずはとにもかくにも仕様の安定した言語があって、全てはそれからだ
Ruby2.0でたら本気出す、もし揺らぐようなら俺はLispにいく
0469デフォルトの名無しさん
2012/06/15(金) 13:23:32.480470デフォルトの名無しさん
2012/06/15(金) 13:29:56.690471デフォルトの名無しさん
2012/06/15(金) 13:42:44.23簡単・短時間で組立・撤去できる足場は
建築現場で無くてはならない存在
当然、細かい強度計算なんていらない
でも足場材料で建物自体を作るやつはいねーんだよ
0472デフォルトの名無しさん
2012/06/15(金) 13:57:18.54あれうんこだわー
0473デフォルトの名無しさん
2012/06/15(金) 14:06:12.280474uy
2012/06/15(金) 14:58:58.77世の中にはプログラミングでそういう事を率先してやりたがる奴もいる
そういう他人には出来ない変わったことを達成する事で
周囲の注目を集めハッカー(笑)みたいな呼ばれ方をするから
俺は別にそういう目的ではないが、普通に動的言語の方が効率出るだけだよ
俺が触った場合には。
0475デフォルトの名無しさん
2012/06/15(金) 15:17:18.58もう25にもなんだし、uyって30まで生きないんだろ?
0476デフォルトの名無しさん
2012/06/15(金) 15:46:19.350477uy
2012/06/15(金) 16:13:15.24お前らが物欲、食欲、性欲に身を任せている間に
俺はお前らに背を向けて、お前らには理解の及ばない倫理観の元に誰にも侵されない場所で幸せを勝ち取るのが大好きだよ
0478デフォルトの名無しさん
2012/06/15(金) 16:20:43.920479uy
2012/06/15(金) 16:30:44.42俺はこのセリフが身にしみるよ
立ち止まってはいけないと、何度も思い知らされる
動かなくなれば、そこらの石と同じだ
何かを求め、何かを嫌うメリハリこそが生きるという事 ゴミグラマは死ね
0480デフォルトの名無しさん
2012/06/15(金) 16:37:53.360481デフォルトの名無しさん
2012/06/15(金) 16:43:17.91お前が一番立ち止まってるじゃないか、老化だな
0482デフォルトの名無しさん
2012/06/15(金) 16:54:59.920483デフォルトの名無しさん
2012/06/15(金) 17:17:49.360484uy
2012/06/15(金) 19:30:58.56プログラミング程度のゲームに向きになっちゃうほうが愚かなんじゃないの?
俺はゲームの対戦相手は煽りまくるほうだけど、これゲームじゃなかったらなんだと思ってるの?
0485デフォルトの名無しさん
2012/06/15(金) 19:32:30.150486uy
2012/06/15(金) 19:33:09.71プログラミング程度のゲームに向きになっちゃうほうが愚かなんじゃないの?
必死にやっても必死にやっても俺に満たない奴が大多数なのは知ってるけど
力の差に気づかないで突っかかるから反撃されて泣かされてるんじゃないの?
0488デフォルトの名無しさん
2012/06/15(金) 21:50:48.550489デフォルトの名無しさん
2012/06/15(金) 22:05:01.670490デフォルトの名無しさん
2012/06/15(金) 23:18:26.34しかも一番遅いRuby
0491デフォルトの名無しさん
2012/06/16(土) 01:39:38.500492デフォルトの名無しさん
2012/06/16(土) 04:33:43.67rubyより優れた言語があるのに、アホすぎて自分には習得出来ないってことに
だから発狂してるのさ
0493uy
2012/06/16(土) 06:34:59.30これがある限り、「普通の奴」は
周りが何いっても動的言語で大規模開発はやろうとしない
ゲームプログラムっていうのも
ソースコード量は増えずとも、基本的な機能をもったSTG程度は
設計レベルの話では中規模〜大規模といえるので
初心者はrubyでゲーム作れない
パズルゲーカードゲーボードゲー、あるいは簡単な1000行以内に収まるようなゲーム
それ以上をやろうとすると爆発する
0494デフォルトの名無しさん
2012/06/16(土) 06:38:50.81無理して大規模開発の話をしなくていいよ
0495デフォルトの名無しさん
2012/06/16(土) 07:57:42.63就職して真っ当なプログラム書きなよ
0496uy
2012/06/16(土) 08:21:56.47Ruby1.93で書いたソースコードが
Ruby1.92でいくつか動かないお^^^^
ざけんなカス
直して動かしたけど、
何で細かいところをちょこちょこ変えるんだろうな
つまり、これは「詳細部分」が微妙に1.92と1.93で違うというのを意味してて
1.92のコードのどっかのなんかの記述が1.93で動かなくなってる可能性をはらんでるって事だよ
Rubyは大変だなー! うwwwwwwwwはwwwwwwwwwwwwwwwwwww 泥沼!泥沼!泥沼!泥沼!泥沼!
0497uy
2012/06/16(土) 08:33:15.00そうじゃなくて、エラーすらださずにもし別の意味に解釈されてたら、実行して「あれ?」ってなるまで気づけないし
なんか、ほんとに泥沼だな 使うけど
0498デフォルトの名無しさん
2012/06/16(土) 13:57:49.97独りで開発して破綻するって話になってるじゃねーか
この急速なスケールダウンっぷりは何なんだよwww
独りで開発してても破綻するなら、まずは自分の資質を疑えよ
0499uy
2012/06/16(土) 14:10:29.380500デフォルトの名無しさん
2012/06/16(土) 14:21:21.16辞書なり連想配列なり使えば、
動的言語相当の文字列ベースのプログラミングは出来るしなぁ。
ただ、あえてそうしないだけで。
0501デフォルトの名無しさん
2012/06/16(土) 14:29:37.04そもそも、動的の意味を勘違いしている人がいるね。
動的言語は型が動的って言っている人たち、それは違う。
C++でもJavaでも実行時型情報を持っているから、型は動的に解決されてる。
動的言語の動的の意味は、シンボル名の解決が動的ってこと。
シンボル名を、静的言語ではリンク時に解決するが、
動的言語では実行時に解決する。
0502デフォルトの名無しさん
2012/06/16(土) 14:42:19.74ロード済みの型の定義を実行中に変更できる動的言語
という意味での「型が動的」
0503デフォルトの名無しさん
2012/06/16(土) 14:44:27.02動的言語は基底クラスをそろえなくても、ダックタイピングで多態出来るが、
とはいえ、結局はメソッド名が一致していなければならないわけだからね。
基底クラスが揃っていることと、メソッド名が一致していることは、
同程度に強い制約だよ。
0504uy
2012/06/16(土) 14:44:35.490505デフォルトの名無しさん
2012/06/16(土) 14:57:37.49静的言語のメリット:型を書けること
0506デフォルトの名無しさん
2012/06/16(土) 15:00:19.810507uy
2012/06/16(土) 15:09:46.03静的のメリット:収入がないこと
0508デフォルトの名無しさん
2012/06/16(土) 15:13:56.74VC++2010ですら既に型推論を実装しているから、
冗長な型名を書く必要はなくなってきてるよ。
型って観点から静的言語と動的言語を切り分けるのは無理があると思う。
静的言語と動的言語の差は、
シンボル名の解決が、コンパイル/リンク時か、実行時か、の差だと思う。
0509デフォルトの名無しさん
2012/06/16(土) 15:15:37.15型っていうか型注釈な
0510デフォルトの名無しさん
2012/06/16(土) 15:24:33.97それに関しても、静的だけどテンプレートがあるし。
0511デフォルトの名無しさん
2012/06/16(土) 15:53:54.49またやってるのか。
0512デフォルトの名無しさん
2012/06/16(土) 15:57:30.210513uy
2012/06/16(土) 16:00:48.360514uy
2012/06/16(土) 16:01:54.110515デフォルトの名無しさん
2012/06/16(土) 17:24:56.090516uy
2012/06/16(土) 18:09:06.29型推論いくらやったところで
動的に型を変えられないなら、動的言語に近づいてるのは見た目だけで
中身は全然違う別物だからなその型推論て
完璧に型推論やって一切の型をかかなくてよくなったとしても動的言語にはならないよ
動的言語 静的言語 静的型推論言語 などと分けてもいい
0517デフォルトの名無しさん
2012/06/16(土) 18:17:16.24お前が根本的に間違ってる。
まず動的に型を変える機能はいらない。
正確に言えば、動的に”互換性がない型”に変える機能はいらない
互換性のある型に動的に変える機能であれば、静的言語にも備わってる。
どっちみち、コードは特定の型限定で書いてるんだから
そこに互換性のない型を持ち込んでも動かない。
つまり、動的に型を変える機能は不要であり
静的に型が決まってる言語の方が優れている。
ただし、その欠点として型をいちいち明示しなければいけなかった。
わかりやすく言えば、書くのが面倒だってこと
逆に言えば、書くのが面倒でなければ、静的言語に欠点はない。
0518デフォルトの名無しさん
2012/06/16(土) 18:28:59.03単純に動的言語は静的言語から一部機能を除いたものだよな。
0519デフォルトの名無しさん
2012/06/16(土) 19:19:49.71パブリック変数、パブリックメソッドは型あり
ぐらいでスコープに応じて型の記述が
必須になったりオプションになったりすれば良い。
ようするに広いスコープのものほど
状況を把握するのが難しくなるから
ちゃんと記述しましょうってこと。
0520デフォルトの名無しさん
2012/06/16(土) 19:51:43.80> 正確に言えば、動的に”互換性がない型”に変える機能はいらない
お前そういうことは、>>196>>426みたいにまともに動きやしないコードでも
コンパイル時点でエラーをきちんと出せるようになってから言えと。
0521uy
2012/06/16(土) 20:20:06.47お前が程度の低いコードしか書かないなら
>まず動的に型を変える機能はいらない。
いらないんだろうな
お前は静的言語使ってれば良いと思うよ
かくのが面倒って自問自答してんじゃねーか
静的言語で多態化メソッドだらだら書いている間にも
動的言語はそこら辺を一気に書いてどんどん次に進んでいくんだよ
OpenStructとmethod_missingは静的言語で実装できるか?
そこら辺も俺はよく使うんだけど
クラスに
var1 ,var2 ,var3 ,var4 , という変数を先に定義しといて、
その変数に後からクラスインスタンスごとに別々の型データ入れたい場合はどうする?
とりあえず最低でも、OpenStructはないとお話にならない
連想配列使えとか?
使ってらんねーよそんな言語
0522uy
2012/06/16(土) 20:29:10.29静的言語では書くのが面倒くさい
つうか、面倒くさいから静的言語じゃ実際には書いてないんだろ
あまりポリモフィズムが必要にならないように、なんか遠まわしにそういうアルゴリズムを書く
だからプログラムの柔軟性が落ちて、ハードコーディングに近い物になっていく
幼稚なアルゴリズム
一瞬でint , double , string など色んな型のメソッドを静的言語が一発でかいてくれるとしても
何か新しい型が必要になるたびに、追加しなければならない
開発効率が悪い
やっていられるか
で、その答えは、「新しい型を追加」しない
どんどんハードコーディングになって、静的言語のソースコードは柔軟性が落ちていく
結局動的言語は切り捨てられない
0523uy
2012/06/16(土) 20:52:44.24アルゴリズムの思考
0524デフォルトの名無しさん
2012/06/16(土) 20:53:56.890525デフォルトの名無しさん
2012/06/16(土) 20:55:43.290526デフォルトの名無しさん
2012/06/16(土) 21:04:35.05自動プログラミング
http://toro.2ch.net/test/read.cgi/tech/1339847861/
0527デフォルトの名無しさん
2012/06/16(土) 21:20:26.57> かくのが面倒って自問自答してんじゃねーか
お前は物事をひとつの側面からしか見れないんだな。
急がば回れの言葉通り、最初に書いておけば
あとから状況を確認するのが楽になる。
動的言語だと、使い捨てならいいけれど保守が難しくなる。
ようするに汚いコードが高速で量産されるわけだ。嬉しいか?
0528デフォルトの名無しさん
2012/06/16(土) 21:25:18.17常に0なんだから静的です
0529デフォルトの名無しさん
2012/06/16(土) 21:26:21.29> 動的に型を変える事によって、ポリモフィズムがいらなくなる
ポリモフィズムというのは考え方。
共通のメソッド、プロパティを定義して、
特定の型を入れ替え可能にしましょうっていうのが
ポリモフィズム。
動的に型を変えたからって、その型に共通の何かが
なければ、入れ替え可能にはならない。落ちるだけ。
その共通の何か(インターフェース)をコードの中に明記しましょう。
コンパイラもそれを知っているので効率いいし、エラーも見つけやすい静的言語の利点で、
動的言語だと、コメントで必要なメソッド等を書いてもコンピュータは参照しない。
つまり、それを読んで人間が、コードよめ。ひたすら人力で頑張れ。というデメリットになる。
0530デフォルトの名無しさん
2012/06/16(土) 21:37:35.46sort(list)
「俺のクラスソートできないんだけど?」
動的厨「それじゃだめだよ。compareメソッドが無いじゃないか」
「必要って言わなかったじゃないか。」
動的厨「ほら、ここにコメント書いてあるでしょ?」
「なるほどね。でもそのコメントわかりにくいよ。こうしたら?」
sort(/*Comparable*/ list)
動的厨「!?」
「ついでにクラスの方にも、ソート関数対応って書いておくといいよ」
class MyClass /*implements Comparable*/
動的厨「!?」
「ついでに、そのコメント見て矛盾してるところがないか、チェックするツール作ったよ」
動的厨「便利だね!」
「まあそれが常識なのが静的言語なんだけどね。」
動的厨「ぐぬぬ」
0531デフォルトの名無しさん
2012/06/16(土) 21:43:05.670532デフォルトの名無しさん
2012/06/16(土) 21:51:40.79慣れてしまっているために移行できないんだろうなw
バージョンあがったらすぐ動かなくなるようなクソ言語が
効率がいいとかwww
0533デフォルトの名無しさん
2012/06/16(土) 21:55:19.09どっちが楽だろうかね。
/* この関数には○メソッドと△メソッドのと□メソッドを
実装したクラスのみを引数に取ることが出来ます。
これらのメソッドの仕様については〜を参照して下さい。
ver2.0より□メソッドの実装が必須になっていますので
この関数に渡すすべてのメソッドを探しだして修正して下さい。
なお動的言語ですので、コンパイラが自動的にエラーをだしたりはしません。
実行したらエラーになります。
*/
0534デフォルトの名無しさん
2012/06/16(土) 21:58:47.29> ver2.0より□メソッドの実装が必須になっていますので
> この関数に渡すすべてのメソッドを探しだして修正して下さい。
静的言語だってテストを書くだろ?
動的言語だって全てのテストを書く。
だからテストを実行すれば、問題があることはすぐ解る。
あとは、落ちた原因を調査すればいいだけ。
なんで落ちたか、このにはこの値が入ってるはず
なんでメソッドがないのか?などなど。
数分もあれば原因は解る。
一方静的言語なら、コンパイルするだけで
数秒で修正箇所がわかるのであった。
0535デフォルトの名無しさん
2012/06/16(土) 22:11:20.71これ読んでわかったことは
メリットを強調してデメリットがわかりにくくなると物凄く気持ち悪い
デメリットを知らないツールより、デメリットまで知り尽くしたツールの方が安心できる
0536デフォルトの名無しさん
2012/06/16(土) 22:22:10.23中身が何もない。
0537デフォルトの名無しさん
2012/06/16(土) 22:27:11.12その時間、他のことに使ったらいいのに
0538デフォルトの名無しさん
2012/06/16(土) 22:35:46.63思わぬ所に落とし穴があるのが一番怖いけど、それがない
0539デフォルトの名無しさん
2012/06/16(土) 23:36:26.450540デフォルトの名無しさん
2012/06/17(日) 07:36:30.07> 動的に型を変えたからって、その型に共通の何かが
> なければ、入れ替え可能にはならない。落ちるだけ。
nullは全てのメソッド呼び出しに対応してない(例外投げるだけ)けど
nullは全てのオブジェクト型変数に代入出来る。
つまり、せっかく型を書いて、コンパイルしても
動的言語と同じように落ちる可能性がある。
動的に型を変更すら出来ないのに。
0541uy
2012/06/17(日) 07:49:58.70むしろスクリプトなら落ちた時にファイルと行数教えてくれる
静的言語だと落ちてもファイルと行数は教えてくれない
0542デフォルトの名無しさん
2012/06/17(日) 07:53:59.57例外で落ちたならスタックトレース出る
Cですらcore吐いたなら分かるのに
0543デフォルトの名無しさん
2012/06/17(日) 07:56:21.89Null Objectパターン
0544デフォルトの名無しさん
2012/06/17(日) 09:11:45.02これはひどいwwwwwwww
例外処理の使い方も知らなかったとはwwwwwwww
0545デフォルトの名無しさん
2012/06/17(日) 09:19:51.090546デフォルトの名無しさん
2012/06/17(日) 09:25:35.90C# vs Rubyみたいな低レベルの争いだから
均衡を保ってるのに、一気に均衡が崩れちゃうだろ
0547デフォルトの名無しさん
2012/06/17(日) 09:41:48.39//not null -> nnl
f(nnl String a){}
f(null); コンパイルエラー
String a = ""; //ローカル変数で再代入が無ければ自動的に final nnl String 扱い
f(a);
String f2(){}
f( (nnl)f2() ); //nnlキャスト(T -> nnl T)必須、nullならキャスト時に例外
nnl String f3(){}
f( f3() );
みたいな感じで
javadocコメントに引数がnullなら例外とか、
戻り値にnullが返ることは無いとか書くから
nullについては>>530 >>533と同じなんだよね
0548デフォルトの名無しさん
2012/06/17(日) 10:18:16.72c++は自動変数や参照の引数or戻り値でそれなりにnull不可を表せるんだよな。
代数データ型には及ばないけどさ。
0549デフォルトの名無しさん
2012/06/17(日) 10:35:20.18ジェネリクスが無い段階で商品化してしまうことが問題。
0550デフォルトの名無しさん
2012/06/17(日) 10:52:09.930551デフォルトの名無しさん
2012/06/17(日) 10:52:16.31こういうアホ的仕様を無くさないと、どっちにしろnull撲滅は無理
0552デフォルトの名無しさん
2012/06/17(日) 10:57:35.17それにprivate部分は重要じゃない、protected以上の戻り値や引数の方が重要
0553デフォルトの名無しさん
2012/06/17(日) 11:06:51.900554デフォルトの名無しさん
2012/06/17(日) 11:07:11.87大規模開発を推進する奴らがジェネリクス程度の規模でびびったら駄目だろ
0555デフォルトの名無しさん
2012/06/17(日) 11:16:56.54それって実行時に例外が投げられるだけでしょ
0556デフォルトの名無しさん
2012/06/17(日) 11:27:56.82意味不明なんだけどトウシツ?
0557デフォルトの名無しさん
2012/06/17(日) 12:20:36.60静的OOPLはメリット0なので死滅する
0558デフォルトの名無しさん
2012/06/17(日) 13:06:08.920559デフォルトの名無しさん
2012/06/17(日) 13:10:07.760560デフォルトの名無しさん
2012/06/17(日) 13:22:27.090561uy
2012/06/17(日) 13:33:19.05結局何か仕掛けなければ吐かないことに変わりは無いよ
普段使ってる「静的言語」で作られたプログラムが勝手に異常終了した時に
エラー箇所とかわかんの?
0562デフォルトの名無しさん
2012/06/17(日) 13:35:46.14そういうこと言い出すと、日本なら日本語、世界なら英語ってことになるから。
>>561
だからコア吐くっていってるだろ、バカか。
0564デフォルトの名無しさん
2012/06/17(日) 13:51:17.65その中に含まれてる。
0565デフォルトの名無しさん
2012/06/17(日) 13:52:43.34IE開発者には分かってもお前には無理
0566uy
2012/06/17(日) 13:53:33.04さっさとコアでも何でも吐けよクズ
>>565
スクリプト言語で書かれていれば開発者じゃなくてもエラー箇所がわかる
自分で直せる
0567デフォルトの名無しさん
2012/06/17(日) 13:54:51.84静的動的でなく、コンパイルかインタプリタかの話にならない?
静的言語のインタプリタってのもあるんだけど
0568デフォルトの名無しさん
2012/06/17(日) 13:56:07.69ユーザに改造されたら困るのはメーカーなんだけど
0569デフォルトの名無しさん
2012/06/17(日) 13:57:16.14スクリプト言語で書かれたブラウザ使っとけww
0570デフォルトの名無しさん
2012/06/17(日) 14:06:36.29シンボル名の解決をコンパイル時にしないことに起因する、
「コンパイラの作成が楽」&「コンパイルが早い」
の二点に尽きるんだよ。
「コンパイラの作成が楽」はコンパイラの作者が楽できるだけ。
利用者側から見れば、「コンパイルが早い」ことしかメリットが無い。
逆に静的言語はシンボル名の解決をコンパイル/リンク時に行うが、
それが嫌なら、要所要所で、これを実行時に行うことも出来る。
辞書クラスなどを使って、自前で辞書を引けば済むだけの話だからな。
要するに、動的言語は、コンパイラが手抜きってだけ。
「動的言語」=「静的言語」-「静的シンボル名解決」
動的言語は、静的シンボル名解決機能の無い、静的言語。
0571デフォルトの名無しさん
2012/06/17(日) 14:17:55.810572デフォルトの名無しさん
2012/06/17(日) 14:20:58.24動的言語:object型に何も実行しないmethod missingを追加する
静的言語:各クラスにnull object用クラスを定義する
nullを返すところを全部null objectで漏れなくラップする
ラップが漏れたらぬるぽ
0573デフォルトの名無しさん
2012/06/17(日) 14:25:35.670574uy
2012/06/17(日) 15:01:38.69そういう奴は使わなくていいな
0575デフォルトの名無しさん
2012/06/17(日) 16:16:13.76> 静的言語:各クラスにnull object用クラスを定義する
各クラスじゃなくて各インターフェースごとだろ?
んで、インタフェースがあれば
実装の雛形を生成すればすぐに終わる。
0576デフォルトの名無しさん
2012/06/17(日) 16:20:41.33こいつNull Objectパターンを良く理解してないと見た。
0577デフォルトの名無しさん
2012/06/17(日) 16:26:02.81使ってほしくないな
0578デフォルトの名無しさん
2012/06/17(日) 16:32:33.36> 動的言語:object型に何も実行しないmethod missingを追加する
頭悪そう・・・
ようするに、エラーが起きて欲しい場面(メソッド名の間違い)で
エラーが出なくなるってことじゃないか。
実行時エラーどころか
実行時エラー潰しだよ。
0579デフォルトの名無しさん
2012/06/17(日) 16:59:24.03そこはエラーじゃなくてテストで対応する
そしてスレタイ通りテスト工数が増大END
0580uy
2012/06/17(日) 18:02:19.25プログラムを停止させないように組めるこのよさがわからないうちは動的言語使いこなせていない
例外にはこういう使い方もあるわけで
def f n
n.map!(&:capitalize)
rescue
end
a=["a","b","c",1,2,3,4,"d"]
f a
p a # => ["A", "B", "C", 1, 2, 3, 4, "d"]
0581デフォルトの名無しさん
2012/06/17(日) 18:17:16.68エラー出てなくても正しく動かない事が多いんだなw
0582デフォルトの名無しさん
2012/06/17(日) 18:19:15.51お前こそ全く理解してないだろ
nullとnullオブジェクトが入り交じったコードなんて悪夢そのものだろうが
>>578
NullPointerExceptionは握りつぶして良いのか?
0583デフォルトの名無しさん
2012/06/17(日) 18:24:00.97> NullPointerExceptionは握りつぶして良いのか?
当たり前の話するね
想定通り握りつぶしたい時は、潰せばいい
それ以外の時は絶対に握りつぶしてはだめ
盲目的に全部握りつぶすなんてコードは最悪なコードの一つ
つまりobjectにmethod missingを付けるというヤツのことだよ
0584デフォルトの名無しさん
2012/06/17(日) 18:26:23.71握りつぶつために使うんじゃねーぞ。
やっぱりわかってないなw
0585デフォルトの名無しさん
2012/06/17(日) 18:27:31.98さらにclassboxesがあれば尚良い
0586デフォルトの名無しさん
2012/06/17(日) 18:28:28.98つまりぬるぽは無くならないってことか
やっぱりJavaやC#はダメだな
0587デフォルトの名無しさん
2012/06/17(日) 18:28:33.750588デフォルトの名無しさん
2012/06/17(日) 18:29:47.66正しく動かなくても
問題ない!
これが動的言語厨の本質。
0589デフォルトの名無しさん
2012/06/17(日) 18:30:44.63まさかmethod missingでそれが出来ないと思ってる?
メソッド名もクラス名も取れるんだぜ
0590デフォルトの名無しさん
2012/06/17(日) 18:33:15.27様々なクラス、メソッドごとの
処理が一箇所に依存してしまう
汚いコードが出来るのであった(めでたしめでたし)
0591デフォルトの名無しさん
2012/06/17(日) 18:34:30.310592デフォルトの名無しさん
2012/06/17(日) 18:35:16.380593デフォルトの名無しさん
2012/06/17(日) 18:38:08.530594デフォルトの名無しさん
2012/06/17(日) 18:53:49.31http://toro.2ch.net/test/read.cgi/tech/1330429547/
0595デフォルトの名無しさん
2012/06/17(日) 19:13:18.99何かしらの欠点があるんだよ
0596デフォルトの名無しさん
2012/06/17(日) 19:19:44.770597デフォルトの名無しさん
2012/06/17(日) 19:21:07.86具体的な欠点を指摘できないんですね
わかります
0598デフォルトの名無しさん
2012/06/17(日) 19:25:33.08誰にでも理解出来る言語じゃなければライブラリも少ないし
ライブラリが少なければその言語に価値なんてないよ
でノロノロやってるうちにいつの間にかオブジェクト指向側が関数型を凌駕してる、と
0599デフォルトの名無しさん
2012/06/17(日) 19:39:56.38「ほんのわずか」と書き加えずにいられないところに
最後のプライドが透けて見えて面白いwww
0600デフォルトの名無しさん
2012/06/17(日) 19:44:28.830601uy
2012/06/17(日) 19:51:44.76そして扱える人間を減らした
だからライブラリ量が少ないので関数型は流行らない よかったね
0602デフォルトの名無しさん
2012/06/17(日) 19:54:34.82コンパイル通れば動く、と冗談にしろ言われるくらいだし
ライブラリはScalaはJava, F#は.net, HaskellはCのライブラリが使える
ただし大規模開発が出来る程プログラマは集まらない
0603uy
2012/06/17(日) 20:04:41.47JAVAや.NETも、呼び出せるように対応する流れはどの言語にもある
問題は個人などの有志開発のフリーライブラリの総量
ブログやサイトなどにかかれたサンプルの数
そういうものが少ない言語っていうのはGoogle検索なしで開発しろっていってるようなもの
0604デフォルトの名無しさん
2012/06/17(日) 20:06:55.63動くか分からんゴミコードの山のRubyよりはマシだけどね
0605uy
2012/06/17(日) 20:51:40.820606デフォルトの名無しさん
2012/06/17(日) 20:51:49.460607デフォルトの名無しさん
2012/06/17(日) 20:52:48.460608デフォルトの名無しさん
2012/06/17(日) 21:46:23.352つか3つ上がるまで様子を見ればいいのに
そういえば、リファクタリングするたびにテストをやり直すって話と同じだ
0609デフォルトの名無しさん
2012/06/17(日) 21:51:00.27ぜんぜん違うどころか、真逆ですよ?
リファクタリングっていうのは、
動作を変えない修正という定義だから
テストを行なっても通る。
言い換えると互換性がある。
様子を見なきゃ成らないってこと、既存のコードが壊れるってことは
それはリファクタリングじゃない。
0610デフォルトの名無しさん
2012/06/17(日) 21:56:13.48つまり、メソッド名やパラメータの数を変更するのはリファクタリングではない。
>>1はデタラメということだ。
0611デフォルトの名無しさん
2012/06/17(日) 21:58:22.86> つまり、メソッド名やパラメータの数を変更するのはリファクタリングではない。
リファクタリングだよ?
変えても動作は変わらないんだから。
もちろん動作が変わったら
それはリファクタリングじゃないけど。
0612デフォルトの名無しさん
2012/06/17(日) 22:03:22.73なぜ動作が変わらないんだよ?
0613デフォルトの名無しさん
2012/06/17(日) 22:05:14.93最終的に同じ結果が出るように修正するから。
0614デフォルトの名無しさん
2012/06/17(日) 22:10:47.640615デフォルトの名無しさん
2012/06/17(日) 22:12:26.150616デフォルトの名無しさん
2012/06/17(日) 22:13:02.80最終版などない
0617uy
2012/06/17(日) 22:26:05.26今まで俺は俺の中でリファクタリングと呼んでいた作業を
「ソースコードの最適化」と呼ばなければならなくなった
0618デフォルトの名無しさん
2012/06/17(日) 22:29:34.960619デフォルトの名無しさん
2012/06/17(日) 22:29:49.74メソッド名やパラメータの数を変更しても既存のコードが壊れないことになるんだが
0620デフォルトの名無しさん
2012/06/17(日) 22:32:48.52ちなみにリファクタリングとはこんなのです。
http://ja.wikipedia.org/wiki/リファクタリング_(プログラミング)
マーティン・ファウラーなどの人々が著したリファクタリングの解説書
『リファクタリング プログラミングの体質改善テクニック』
では70種類ほどのリファクタリングが挙げられている。
0621uy
2012/06/17(日) 22:34:01.96開発中にバージョンあげるのは本当はNGなんだろうけど
まだ何とかできる範囲の規模だからRubyバージョンあげただけ
ゲーム開発もしたいけど、最新版rubyも使って最新rubyにはついていきたい
0622デフォルトの名無しさん
2012/06/17(日) 22:36:12.01はい、そのとおり、壊れません
なぜなら、関数を修正すると共に、その関数を
呼び出している部分すべてを書き換えるからです
実際にEclipseにあるリファクタリング機能は、実行すると
関数とそれを利用している部分すべてが書き換わります
これがリファクタいリングです
0623uy
2012/06/17(日) 22:36:18.51別スレでかいたソースだけど、俺の中ではこれがリファクタリングなんだよカス
def str2hash(str)
hash = {}
p ary = str.split
ary.each_slice(2) do | a , b |
hash[ a ] = b
end
hash
end
p str2hash("blue 白 white shiro\nred aka")
↑こういうのを ↓ こうする事がリファクタリング
p Hash[ *("blue 白 white shiro\nred aka").split ]
0624uy
2012/06/17(日) 22:37:44.41こういうやつがIDEの機能の自動なんちゃってリファクタリングをリファクタリング(キリッ)w
とかいうから
>>623
こういうのはソースコードの最適化というしかなくなった
0625デフォルトの名無しさん
2012/06/17(日) 22:45:26.14それは、
> 『リファクタリング プログラミングの体質改善テクニック』
> では70種類ほどのリファクタリングが挙げられている。
の中のどれに当てはまるか言えますか?
質問の意図は、それがリファクタリングかどうかの話ではなく
あなたが理解しているかどうかの話です
0626デフォルトの名無しさん
2012/06/17(日) 22:45:26.78それって、関数を利用している人が1人だけの場合じゃないですか
大規模開発では使えないのでは
0627デフォルトの名無しさん
2012/06/17(日) 22:48:08.30じゃあ、お前は大規模開発で、
どうやってコードを修正するというんだよw
0628デフォルトの名無しさん
2012/06/17(日) 22:51:17.95コードを疎結合にする。
そうなっていれば、自分の担当箇所の修正が
他人に影響を及ばさないから、
リファクタリングもやりやすくなる。
0629デフォルトの名無しさん
2012/06/17(日) 22:55:29.74広範囲に影響が出るようなリファクタリングは注意が必要
自分の担当外だからどこでどう使われているかわからない
だからどこで使われているのか素早く間違いなく知る必要がある
そこで動的言語はやっぱりダメだねって話になるんだよね
どこで使われているのかさっぱりわからない状況になるから
0630uy
2012/06/17(日) 22:56:14.93はぁ?
>リファクタリング プログラミングの体質改善テクニック
そこら辺のゴミカスPGの書いた本なんてしらねーんだけど
じゃあお前は>>623
これをなんだと思ってんの?
0631デフォルトの名無しさん
2012/06/17(日) 22:58:19.32リファクタリング―プログラムの体質改善テクニック
著作 マーチン・ファウラー
マーチン・ファウラー
0632デフォルトの名無しさん
2012/06/17(日) 23:08:47.26いや、影響が出ないんだろ
リファクタリングしても動作は変わらないんだから
0633デフォルトの名無しさん
2012/06/17(日) 23:11:38.03はい。正しく行えばリファクタリングの結果、影響はありません。
しかし人間は間違えることもあります。
0636デフォルトの名無しさん
2012/06/17(日) 23:17:26.14それを聞かれたのはお前だろw
答えろよ。
0637デフォルトの名無しさん
2012/06/17(日) 23:20:09.28PofEAA書いた人だよ?
知らない? PofEAA
0639uy
2012/06/17(日) 23:23:46.87マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
0640デフォルトの名無しさん
2012/06/17(日) 23:24:07.97これらの本に乗ってるよ。
0641デフォルトの名無しさん
2012/06/17(日) 23:27:50.65知らないで、オレオレ定義か。
頭が高いな。uyは控えおろうってのw
[コラム] リファクタリングとは、 最適化することじゃない。 理解しやすくすること。
http://www.tdd-net.jp/2010/10/post-85dc.html
リファクタリングを世に広めた Martin Fowler 氏の言葉です。
リファクタリングとは、理解や修正が簡単になるための変更だと私は思っている。
同じ変更でも、目的が異なれば、それはリファクタリングとは言わない。
0642uy
2012/06/17(日) 23:28:55.77そうじゃなくて
そいつの書いたプログラムの完成品のソースコードが見たいわけで
え、まさか無いの?
うわあ・・・・・・
書籍かいてる奴ってこんなのばっかだよな、こういう本を真に受ける奴はもっとバカだけど
0643デフォルトの名無しさん
2012/06/17(日) 23:29:01.28リファクタリングの境界線のひとつ
プログラムのパフォーマンスを向上させるために変更を行った。
これはリファクタリングと呼べるのか?
最適化とリファクタリングはどちらも変化を伴うものだが
(なかには最適化かつリファクタリングとなる変化もあるが)、両者は別物だと私は考えている。
なぜなら、両者の目的が異なるからである。リファクタリングは、
コードを理解しやすくするためである。最適化は、プログラムを速くするためである。
0644uy
2012/06/17(日) 23:31:53.70はぁ?????????
プログラミングやってれば誰でも極自然に当たり前のようにやっている行為を世に広めたとかすげー勘違いだなwwww
0645デフォルトの名無しさん
2012/06/17(日) 23:32:15.78世界も人としても。
0646デフォルトの名無しさん
2012/06/17(日) 23:33:21.05マーチンファウラーを知らないって。
アジャイル方面でも有名なんだけど。
0647デフォルトの名無しさん
2012/06/17(日) 23:34:23.330648uy
2012/06/17(日) 23:35:10.53「最適化」って単語はコンパイラが既に使ってるんだよ
だから>>623がリファクタリングではないとするならば
「ソースコードの」って前置きを入れてないとコンパイラの最適化とごっちゃになる
どうでも良い作業にリファクタリングとかいう名前付けてる奴はマジでカス
ちなみに>>623も別に実行速度を気にして変更したわけじゃないよ
ソースコードを明らかに見やすくするために別記法を持ってきて無駄なソースコード量を減らしただけだよ
0649デフォルトの名無しさん
2012/06/17(日) 23:35:46.640650デフォルトの名無しさん
2012/06/17(日) 23:38:15.29まつもとゆきひろと同じ舞台にたってる人だよね。
0651デフォルトの名無しさん
2012/06/17(日) 23:39:52.17素人さんは、基礎を
どうでも良い作業と言うよね。
プロは名前のつけかたにさえこだわっているというのに。
0652uy
2012/06/17(日) 23:44:37.88へー名前の付け方にこだわってるんだ
じゃあ>>623は何て名前の作業?
>>650
Matzと同レベとかますます勘違いもいいところだろ・・・
マーチンファウラーの代わりなどいくらでもいる Matzの代わりは1人もいない
0653デフォルトの名無しさん
2012/06/17(日) 23:47:12.93uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
0654デフォルトの名無しさん
2012/06/17(日) 23:49:56.480655デフォルトの名無しさん
2012/06/17(日) 23:50:40.61それ、お前がされた質問だろw
> >>650
> Matzと同レベとかますます勘違いもいいところだろ・・・
本当に知らないのか(爆笑)
QCon Tokyo 2009では、マーチン・ファウラーに並んで
まつもと ゆきひろも喋ってただろ。
http://www.publickey1.jp/blog/11/why_ruby_again_by_matz.html
まつもとゆきひろ「そして、マーチン・ファウラー氏は、
Rubyのコミュニティの人たちはとてもナイスだと言ってくれました。」
0656uy
2012/06/17(日) 23:54:28.63教えてやるよこれが本来のリファクタリングだ
Matzとまーちんふぁうら(笑)が同レベとかいうなら
そんなこといったら俺と並んでる奴がそこら中にいることになるじゃねーか
流石にそれは四捨五入しすぎ
0657デフォルトの名無しさん
2012/06/17(日) 23:56:41.85>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>uy
0658デフォルトの名無しさん
2012/06/17(日) 23:58:46.07違うとわかり、さらにこんなヤツ知らないと
言っていた人が、リファクタリング分野での
第一人者であることを知ったのって
どういう気分なんだろうなw
0659デフォルトの名無しさん
2012/06/18(月) 00:00:00.90人並外れて低い
一般人、もとい一般ニートですからw
0660デフォルトの名無しさん
2012/06/18(月) 00:00:18.050661デフォルトの名無しさん
2012/06/18(月) 00:02:12.73名が体を表してる
0662デフォルトの名無しさん
2012/06/18(月) 00:04:34.12ウンコ界の有名糞?
0663uy
2012/06/18(月) 00:29:36.33きたねーおっさんが下ネタいっても、きたねえだけだからな
お前らは外見も思考もゴミなんだから、品くらいもてよ
0664デフォルトの名無しさん
2012/06/18(月) 00:33:36.330665uy
2012/06/18(月) 00:34:04.66手動で>>623これやってリファクタリングって言ってたに決まってるのに
ここまで言わないと気づけないとか流石にひねくれを超えて
酔っ払いでも相手にしてる気分だ
まぁお前らはIDEをマウスでカチカチしてリファクタリングしてれば良いと思うぞ
いや割とマジでそう思う
ソースコードをかけないお前らは、極力ソースコードを書くべきではない
俺はソースコードが書けるから、ソースコードを書くだけで
別にお前らにそれは強要しない
0666デフォルトの名無しさん
2012/06/18(月) 00:35:07.82uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
0667デフォルトの名無しさん
2012/06/18(月) 00:37:24.89rubyでw
0668デフォルトの名無しさん
2012/06/18(月) 00:39:01.89uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
0669uy
2012/06/18(月) 00:39:32.44uy>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Matz>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>マーチンファウラー(笑)
だって、言ってるのに
Matz == マーチンファウラー(笑)
などとすると不等号が一気に省略されて
uy>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Matz == マーチンファウラー(笑)
たったこれだけの差になってしまう
これはアバウトすぎ
0670デフォルトの名無しさん
2012/06/18(月) 00:40:06.62uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
0671uy
2012/06/18(月) 00:43:14.85きたねーおっさんが下ネタいっても、きたねえだけだからな
お前らは外見も思考もゴミなんだから、品くらいもてよ
きたねえおっさんと言われて
カチンと来ちゃったか
事実なのだから仕方ないよ
ようはそのきたねえ事実をどのように包み隠すかである
それが下手な奴をゴミと言う
0672デフォルトの名無しさん
2012/06/18(月) 00:44:27.440673uy
2012/06/18(月) 00:45:18.70月曜日か
さて、俺はゲーム製作の続きでもするかな
0674デフォルトの名無しさん
2012/06/18(月) 00:45:28.35自動でできるものだけがリファクタリングと思っちゃうわけ?yuちゃん。
0675デフォルトの名無しさん
2012/06/18(月) 00:47:10.00むしろ逆のことをしているww
0676デフォルトの名無しさん
2012/06/18(月) 00:53:54.52彼がRubyを評価してることにも(少なくともJavaやC#よりも)
触れない訳にはいかない
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?RubyAtThoughtWorks
0677デフォルトの名無しさん
2012/06/18(月) 00:56:03.270678デフォルトの名無しさん
2012/06/18(月) 01:01:12.87設計周りやっててこの人のことを知らないなら
本当にモグリだから。
世界レベルで見ればMatzよりもはるかに有名。
0679デフォルトの名無しさん
2012/06/18(月) 01:06:47.37def str2hash(str)
Hash[ *str.split ]
end
p str2hash("blue 青 white shiro\nred aka")
0681デフォルトの名無しさん
2012/06/18(月) 01:15:43.84リファクタリングでは残します。
0682デフォルトの名無しさん
2012/06/18(月) 01:19:10.13残した上で、新たなメソッドを作り、メソッドの委譲を行なってから
テストもちゃんとやって、既存のコードを修正していって、
最終的にどこからも使われなくなった時に消しましょう。
という流れね。
これも絶対ではなくリファクタリングのやり方の一つでしか無いけど。
0683デフォルトの名無しさん
2012/06/18(月) 01:20:25.17呼び出してる箇所さがしてわざわざ関数を使わない形で展開しまわるアホは居ない。
0684デフォルトの名無しさん
2012/06/18(月) 01:22:31.51最終的にどこからも使われなくなったって
動的言語でどうやって判断すればいいのかな?
テストを実行すればわかるというけれど
そのテストが完璧であるということはわからないし。
0685デフォルトの名無しさん
2012/06/18(月) 01:22:48.46Inline Method
http://www.refactoring.com/catalog/inlineMethod.html
0686デフォルトの名無しさん
2012/06/18(月) 01:25:30.04> 呼び出してる箇所さがしてわざわざ関数を使わない形で展開しまわるアホは居ない。
これもまたメソッドのインライン化という
リファクタいリングだよ。
なぜ、アホだと思うか
その理由のほうが興味深いよねw
0687デフォルトの名無しさん
2012/06/18(月) 01:25:54.560688デフォルトの名無しさん
2012/06/18(月) 01:26:45.77一箇所からしか参照されてないのであればの話だろ。
0689デフォルトの名無しさん
2012/06/18(月) 01:27:31.50複数ヶ所から参照されていても
何の問題もない。
つか、メソッドのインライン化って
機械的に出来る簡単な作業でしょ?
0690デフォルトの名無しさん
2012/06/18(月) 01:33:29.67関数が複数個所から参照されているなら、
わざわざ手動でインライン展開なぞせんわ。
なぜなら抽象度が落ちるから。
0691デフォルトの名無しさん
2012/06/18(月) 01:36:42.94まあ、そんなステキなIDEがあったとしても
Ruby >>>>> 超えられない壁 >>>>>>> Java, C#
なんですけどね、マーティン・ファウラー氏の中では
0692デフォルトの名無しさん
2012/06/18(月) 01:38:02.75話の流れわかってないでしょw
>>623みたいにまずいコードがあった時に
プロジェクト全体をいきなり全部書き換えるのではなく、
リグレッションを起こさないように少しづつ変えましょうねって話だよ。
メソッドの委譲を行なってからメソッドのインライン化で
消していくという作業の話。
0693デフォルトの名無しさん
2012/06/18(月) 01:51:23.40そんなことをいうと、
uyがマーチン・ファウラーを
敵として認識すればいいか
見方として認識すればいいか
わからなくなるだろw
0694デフォルトの名無しさん
2012/06/18(月) 01:55:26.32重複したコードを纏めてあるってことだろ。
手間かけて展開して回るアホは居ないわ。
>>623に関しても同じ。
リファクタリングは>>679まで。
0695uy
2012/06/18(月) 02:07:00.730696uy
2012/06/18(月) 02:12:10.35俺が言ってるのは
str2hashとかいうメソッドは、たかが例題の答えとしてでも残すべきではない
俺は最初からstr2hashという無駄メソッドはいらないという主張も>>623のソースコードに込めてる
つうか何?結局リファクタリング(笑)厨は>>623をリファクタリングと認めてるわけじゃん
ほんとに矛盾した事しかいえない酔っ払いだな
0697デフォルトの名無しさん
2012/06/18(月) 02:19:02.74将来的にstr2hashの実装を変えたくなるかもしれない。
複数個所から呼ばれているのなら、
それだけで重複したコードを纏めているという意味がある。
0698デフォルトの名無しさん
2012/06/18(月) 02:24:47.89もし、書いてしまって、そして複数個所で使ってしまったのなら、もう後の祭り。
わざわざ展開して回る価値も無い。
0699デフォルトの名無しさん
2012/06/18(月) 04:04:37.31名前をつけた奴が馬鹿なだけ。
0700デフォルトの名無しさん
2012/06/18(月) 05:37:28.050701デフォルトの名無しさん
2012/06/18(月) 07:30:37.48JavaならListOfStringToHashTableWithStringKeys
0702デフォルトの名無しさん
2012/06/18(月) 07:57:27.01何をする関数か分かりやすい関数名
読みやすいし
他言語も見習いたまえ
0703デフォルトの名無しさん
2012/06/18(月) 08:10:57.40htmlspecialcharsの第一人者が来て「これはhtmlspecialcharsじゃない」
って言い出して分かりにくくなるんですよね
0704デフォルトの名無しさん
2012/06/18(月) 08:12:51.980705デフォルトの名無しさん
2012/06/18(月) 10:43:15.21全体コンパイルもインタプリタ実行も出来る言語って無いの?
0706デフォルトの名無しさん
2012/06/18(月) 11:43:54.04それは、VB6です。
0707デフォルトの名無しさん
2012/06/18(月) 12:17:16.900708uy
2012/06/18(月) 12:22:37.98大規模開発においてスタティック変数がバグの元になるから、スタティック変数をなくすっていう見解はいいんだけど
その前にruby(動的言語)で大規模開発をするのがあらゆる側面から見てきついのに
先にスタティック変数なくして、一部の自由度だけを下げてる
まだ言語が未完成である事が一番の問題
あとはスタティック変数の代わりの機能や書き方っていうのが提示されていない気がする
俺はその代用品となるモジュールを書いたら普段は使わないメソッド使いまくりでかなり複雑になった
だから普通はメンバ変数などをその代わりに使うしかなくなってる
名前に気をつければ衝突とかしやしないし
アルゴリズムを推敲していけばスタティック変数はなくせるわけだけど、
考えるのが面倒くさい時には結局 @変数の無茶な使い方をする
しいていうなら @変数の保護機能のようなものがない気がする
@vという変数をaメソッド内では変更してもbメソッド内では絶対に変更しないし参照もしないって場合においても
普通に@vが参照される
変数宣言のいらない動的言語ではこれが最も致命的
def v= nの中にcallerでも見ながら何か変数@vの使用条件を仕込めば保護機能の持った変数は作れなくはないけど、それをやるのかね?
0709デフォルトの名無しさん
2012/06/18(月) 13:24:48.130710uy
2012/06/18(月) 15:42:54.82しかし本当に2ch荒らした程度で揺らぐとかだったらアホらしい
2chにきてる奴のレベルが低いんじゃなくて
本当にレベル低い奴しかいないからネットの2chのレベルも下がるんだね
少し落ち着いたら本当にLisp行く
0711デフォルトの名無しさん
2012/06/18(月) 16:07:44.35善は急げですよ
0712デフォルトの名無しさん
2012/06/18(月) 16:20:53.520713デフォルトの名無しさん
2012/06/18(月) 16:31:37.010714デフォルトの名無しさん
2012/06/18(月) 16:33:19.920715uy
2012/06/18(月) 16:57:08.830716デフォルトの名無しさん
2012/06/18(月) 17:00:41.080717デフォルトの名無しさん
2012/06/18(月) 17:18:18.990718デフォルトの名無しさん
2012/06/18(月) 17:21:50.490719うy
2012/06/18(月) 17:48:08.11何の意味でシングルトンっていったかしらんけど
解決策はそれであってる
ただスタティック変数がちょっと1個ほしかっただけでも
何らかのシングルトンの仕組みを導入しないとならない
0720uy
2012/06/18(月) 18:33:14.19def recursion *h
@vvv = lambda do |*h| yield *h end if iterator?
@vvv[*h]
end
a=recursion 6 do | n |
if n == 0
1
else
n * recursion(n - 1)
end
end
p a
この@vvvはスタティック変数であって欲しいが、rubyには存在しない為、
メンバ変数を拝借してる
この@vvvを綺麗になくす事は出来る、ただしなくそうとするとおよそ数十行の特殊な術式を書かなければならなくなる
基本的に、誰もそんなものを書いたりはしないので結局は以下のようになる
0721uy
2012/06/18(月) 18:35:23.49def self.f *h
@vvv = lambda do |*h| yield *h end if iterator?
@vvv[*h]
end
end
def recursion *h , &block
Recursion.f *h , &block
end
a=recursion 6 do | n |
if n == 0
1
else
n * recursion(n - 1)
end
end
p a
p @vvv # => nil
こうなる、結局 recursion に何が足りないかっていうとrecursion 自身が持ち、recursion だけのネームスペースが足りないんだよ
def recursion が状態を保持できるネームスペースをもっていないから別途、状態を保持できるネームスペースとしてmoduleを使わざるを得ない
0722uy
2012/06/18(月) 18:45:55.87バグの元になる
だからMatzはスタティック変数を消した
惜しい!!!
そこまではいいが、代わりを用意していない
俺様が提示するその代わりとは
recursionメソッド をインスタンスとして見立て
module A
def self.extended ここで recursion を生成 end
end
class C
end
b = C.new.extend A
b.recursion # ここでrecursion使える
こうする方法
この方法まで提供してようやくスタティック変数はいらなくなる
0723デフォルトの名無しさん
2012/06/18(月) 18:50:56.97class CounterClass
attr_reader :count_proc
def initialize
@count_proc = Proc.new{
counter=0
lambda{ counter+=1 }
}.call
end
end
counter1 = CounterClass.new
counter2 = CounterClass.new
p counter1.count_proc.call #=> 1
p counter1.count_proc.call #=> 2
p counter2.count_proc.call #=> 1
0724uy
2012/06/18(月) 18:51:12.85recursionは任意の状態を持っているので、後から破棄しなければならない
だからオブジェクトのインスタンスとつなぎ合わせてオブジェクトの破棄とともにrecursionと、recursionのもった状態ごと破棄する
これでスタティック変数のように見える状態変数もただのインスタンス化に成功しているので
スタティック変数に潜むバグは発生しない
0725uy
2012/06/18(月) 18:54:10.22それで考えは合ってるよ
ただcount_procのように状態をもった関数は他にも沢山欲しくなる
そのたびに、そんなに長々と毎回書かなければならないのだろうか?
実際必要な情報は
counter=0
lambda{ counter+=1 }
この2行だけなのに、そのクラス定義は冗長すぎる
0726デフォルトの名無しさん
2012/06/18(月) 18:55:53.03これが根本的な間違いだろうな。
普通そんなの欲しくならない。
0727デフォルトの名無しさん
2012/06/18(月) 19:01:20.84グローバル変数と同じ問題点なんだよね。
動的にどこからでもあるクラスを変更可能ってことは
どこで何をされるかわからない。
という点でグローバル変数が抱えている問題と全く同じ。
0728uy
2012/06/18(月) 19:01:22.51作るプログラムによる
たとえばキーボードのZキーを5秒間押してみるがよい
zzzzzzzzzzzzzzzzzzzz
↑ 0.5秒程度まってから連打されただろう
↑ これと同じ動作をプログラム上で実行しようとしたら
0.5秒をカウントする状態変数が必要になる
探せばいくらでもでてくる
0729デフォルトの名無しさん
2012/06/18(月) 19:03:03.78必要なのは状態変数だね。
状態を持った関数とは言わなかったね。
0730デフォルトの名無しさん
2012/06/18(月) 19:04:36.290731デフォルトの名無しさん
2012/06/18(月) 19:06:34.64呼び出し終了後も次回に備えて状態を持つのなら、
状態を持つ=オブジェクト なので、
recursion をオブジェクトにすればよい。
特に関数としての性質が強いものなら、
関数をどうにかしてオブジェクトにすれば良い。(いわゆる関数オブジェクト)
Rubyでどうするのかは専門外なので詳しくは良く知らんが、とりあえず、
>>723のようにすれば、状態を持つlambdaオブジェクトは作れた。
counter = Proc.new{ counter=0; lambda{ counter+=1 } }.call
上記がそんなに長いとは思わん。
0732uy
2012/06/18(月) 19:07:53.78しいていうなら変数宣言がない時点で
グローバル変数の問題よりももっと上だから
・どこで変更されるかわからない
・どこで宣言されたかわからない
>>729
言葉遊びをする気はない、そもそもrubyはメンバ変数もメソッドだろうが
>>730
再帰の>>720 も割り込みで実装してみろよ
0733uy
2012/06/18(月) 19:11:20.89それじゃ長いんだよ
CやC++でスタティック変数を使わないといけなかった箇所を思い出して見るが良い
スタティック変数は使いまくりだから
あとよく見たらそれProc.newで囲う必要なくて
counter=0
@count_proc = lambda{ counter+=1 }
だろ
0734デフォルトの名無しさん
2012/06/18(月) 19:11:58.28> counter=0
> lambda{ counter+=1 }
>この2行だけなのに、そのクラス定義は冗長すぎる
それの前後を Proc.New{ ... }.call で囲むだけだろ。
それだけで独自領域を持ったlambdaが作れる。
確かにちょっと冗長だが、我慢できる範囲だと思うが。
0735デフォルトの名無しさん
2012/06/18(月) 19:12:28.350736デフォルトの名無しさん
2012/06/18(月) 19:13:22.520737uy
2012/06/18(月) 19:17:15.91いや・・・考え方としては1個のクラスに1個のメソッドしか定義しちゃダメだろ
そのCounterClassにrecursion を追加したりはしない
recursion が欲しくなったらRecursion_classを定義してrecursion を実装する
この時点で
CounterClassとRecursion_classで二つもそんな冗長したソースコードが生まれる事になる
あと、状態を持った変数はちゃんと外部からも見れるようにさせないといけないから、本当はここまでやりたい
class CounterClass
attr_reader :count_proc
def initialize
@c=0
@count_proc = lambda{ @c+=1 }
end
def c
@c
end
end
counter2 = CounterClass.new
p counter2.count_proc.call
p counter2.count_proc.call
p counter2.c
0738デフォルトの名無しさん
2012/06/18(月) 19:21:36.500739デフォルトの名無しさん
2012/06/18(月) 19:31:13.64それなら普通にクラスで書いたほうが速い。
class CounterClass2
attr_accessor :counter
def count; @counter+=1 end
end
0740uy
2012/06/18(月) 19:34:00.37けどソースコード量的にはゴミカス
カウンターの定義など本来これでいいはず
counter =->{c=0;->{c+=1}}.call
p counter.call
p counter.call
ネームスペースが欲しい
0741デフォルトの名無しさん
2012/06/18(月) 19:34:29.75cls CounterClass
c = 0
count = { c+=1 }
0742uy
2012/06/18(月) 19:38:42.38たかが数文字のスタティック変数の代用品として
クラス定義をしなくちゃいけなくなってるから
別に完璧じゃなくてもいい使い捨てスクリプトでは
def func
@a ||= なにか
end
こういう事も普通にやってしまう
0743デフォルトの名無しさん
2012/06/18(月) 19:39:30.98仕事ができない奴が多い。
0744uy
2012/06/18(月) 19:40:19.59俺は1万行に抑えたソースコードを管理する
0745デフォルトの名無しさん
2012/06/18(月) 19:42:22.61つまり大規模開発の話でなく使い捨てスクリプトの話だと
スレタイ読んで落ち着いたらLispに行けばいいよ
0747デフォルトの名無しさん
2012/06/18(月) 19:52:51.970748デフォルトの名無しさん
2012/06/18(月) 19:53:06.47大規模なゴミを作る uy style
テスト工数が増大ってレベルじゃないなw
0749デフォルトの名無しさん
2012/06/18(月) 19:54:41.740750デフォルトの名無しさん
2012/06/18(月) 19:57:12.690751デフォルトの名無しさん
2012/06/18(月) 20:02:36.68c=0
lambda{c+=1}
end
counter = newcounter
p counter.call
p counter.call
0752デフォルトの名無しさん
2012/06/18(月) 20:03:38.230753uy
2012/06/18(月) 20:04:58.13それもひとつの手
$iroiro_ireru_hensuu = Hash.new
とかやって状態を保存してしまう
俺様はC++をやっていた頃
スタティック変数は全てのポインタをグローバル変数で保持し(おそらく最近の言語でいうリファレンスっていうのと同等の機能)
それらがいらなくなったらスマートポインタのようなもので0初期化する仕組みでやっていた
ようは「寿命つきスタティック変数」が欲しいのだよ
俺はrubyではその寿命をオブジェクトに束縛する為に
a.extend A
などという方法でスタティック変数(意味的にを持ったメソッドに寿命を作ってる
0754デフォルトの名無しさん
2012/06/18(月) 20:05:24.190755uy
2012/06/18(月) 20:08:07.19これだよ
http://e-words.jp/w/E382B9E382BFE38386E382A3E38383E382AFE5A489E695B0.html
関数やブロック内で宣言された変数で、そのブロックが終了しても値を保持しているもの。静的変数とも言う。「static」というキーワードを用いて宣言する言語が多い。
オブジェクト指向のプログラミング言語の場合は、生成されたオブジェクトの個数や状態をそのブロック内に格納しておく変数として使うと便利である。(キリッ)
グローバル変数のように、他の関数から使用することはできない。
(↑ポインタすら知らないのか)
0756デフォルトの名無しさん
2012/06/18(月) 20:10:48.730757uy
2012/06/18(月) 20:10:58.67クロージャで解決できるの?この問題?
>>754
精神衛生上の問題
クラス変数で
def test
@@__(メソッド名)__ ||= でーた
end
とかいう風に使っておけば多分名前衝突はしないけど
それでも「多分」だよ 動的言語には変数宣言が存在しないから
0759デフォルトの名無しさん
2012/06/18(月) 20:13:45.380760デフォルトの名無しさん
2012/06/18(月) 20:18:35.480761デフォルトの名無しさん
2012/06/18(月) 20:18:52.16メソッドだけなのか外部からも見えるようにするのか
どっちなの
0762デフォルトの名無しさん
2012/06/18(月) 20:20:54.790763デフォルトの名無しさん
2012/06/18(月) 20:23:00.35クラス変数 → メソッド内に限定したい
統合失調症
0764デフォルトの名無しさん
2012/06/18(月) 20:23:36.180765uy
2012/06/18(月) 20:24:37.83外部から見えるように(裏方)でやってくれるのがベストだよ
>>762
メソッド内にクラスかモジュールが定義できればevalでもいけた
0766デフォルトの名無しさん
2012/06/18(月) 20:27:54.47f = lambda &block
g = nil
g = lambda{|*h| f.call(g, *h)}
g.call(*h)
end
a = recursion 6 do |rec, n|
if n == 0
1
else
n * rec.call(n-1)
end
end
p a
0768デフォルトの名無しさん
2012/06/18(月) 20:46:25.93(let ((c 0))
(defun counter ()
(incf c))
(defun c ()
c))
(let (vvv)
(defun recursion (h &optional block)
(when block
(setf vvv (lambda (i)
(funcall block i))))
(funcall vvv h)))
(defun a ()
(recursion 6 (lambda (n)
(if (= n 0)
1
(* n (recursion (1- n)))))))
0769デフォルトの名無しさん
2012/06/18(月) 20:47:53.600770デフォルトの名無しさん
2012/06/18(月) 20:59:32.02まず動的言語なのにオブジェクトと実行コンテキスト(フレーム)に区別がある時点で。
あとはシンボル名の検索チェーンをプログラマが勝手手前に制御できるようにしておけば、
継承だろうが多態だろうがラムダだろうがクロージャだろうが、自由が利くのにな。
0771デフォルトの名無しさん
2012/06/18(月) 21:00:25.80>ttp://webos-goodies.jp/archives/50678637.html
0772uy
2012/06/18(月) 21:24:42.83とりあえず、ローカル変数以外は取得できる
n=0
@t=4
@@ttt=4
p instance_variables
p instance_variables
p Object.class_variables
class Aaaaaaaaa
end
p Object.constants.sort
0773デフォルトの名無しさん
2012/06/18(月) 21:40:20.36恥ずかしいやつ
0774デフォルトの名無しさん
2012/06/18(月) 21:41:39.15uy的に分かりやすく言えば、
子オブジェクトから、親オブジェクトのメンバを透過的に
見えるようにする仕組み。
0775デフォルトの名無しさん
2012/06/18(月) 21:42:52.310776uy
2012/06/18(月) 21:55:51.00継承関係の事?
self.class.ancestors[-1].send(:print , 33)
こういうのじゃなくて?
マジプログラマの使う日本語は不可解だからソースコードで喋って欲しいんだけど
0777uy
2012/06/18(月) 22:02:43.64Rubyソースコード上だけで実装する為の何かって事?
もう無理だ
0778デフォルトの名無しさん
2012/06/18(月) 22:04:48.81oya.ko.method{ oya_member OK }
0779uy
2012/06/18(月) 22:09:56.42attr_accessor :x
def initialize
@x = 3
end
def ko
yield self
end
end
Oya.new.ko do | o |
p o.x
end
これ?
0780デフォルトの名無しさん
2012/06/18(月) 22:11:19.48俺に言わせれば、クロージャやラムダで出来るのに、
オブジェクトで出来ないのはおかしい。動的言語の癖に。
0781uy
2012/06/18(月) 22:18:44.77attr_accessor :x
def initialize
@x = 3
end
def ko
yield self
end
end
def func o
p o.x
end
Oya.new.ko &method(:func)
じゃなくて?
Rubyはクローヤじゃラムダもオブジェクト
0782uy
2012/06/18(月) 22:19:14.290783uy
2012/06/18(月) 22:23:56.460784デフォルトの名無しさん
2012/06/18(月) 22:31:17.29attr_accessor :x,:ko
class Ko
def func
@x
end
end
def initialize
@x = 3
@ko = Ko.new
#koのメソッドチェーンにOya(self)を追加する処理
end
end
p Oya.new.ko.func #=> 3
0785デフォルトの名無しさん
2012/06/18(月) 22:56:45.30グローバル関数は良いけどグローバル変数は駄目ということにしたいからですよ
0786uy
2012/06/18(月) 23:00:33.94moduleにしていいなら出来るけどクラスは多重継承とか、クラス宣言した後に継承も出来ないしな
class Oya
attr_accessor :x,:ko
module Ko
def func
@x
end
end
def initialize
@x = 3
@ko = self.clone.extend Ko
end
end
a = Oya.new
p a.ko.func #=> 3
p a.func # => err
0787デフォルトの名無しさん
2012/06/18(月) 23:26:49.37そのコードだと、親側の更新が子側に反映されないから微妙。
a = Oya.new
a.x=1
p a.ko.func #=> 3
0788uy
2012/06/18(月) 23:42:57.81module Oya
attr_accessor :x,:ko
module Ko
def func
@x
end
end
def init
@x = 3
@ko = self
@ko.extend Ko
end
def self.extended mod
mod::init
end
end
a = Object.new.extend Oya
p a.ko.x #=> 3
a.x = 9
p a.ko.x #=> 9
0790デフォルトの名無しさん
2012/06/19(火) 00:05:36.39ついつい邪悪なコードに走りがちになるな。
静的言語なら真っ先に>>766に行き着くのに。
0791デフォルトの名無しさん
2012/06/19(火) 00:26:59.530792デフォルトの名無しさん
2012/06/19(火) 00:42:36.670793デフォルトの名無しさん
2012/06/19(火) 06:04:50.810794デフォルトの名無しさん
2012/06/19(火) 07:17:46.28Haskellで書けばこうだし
recursion h f = f (flip recursion f) h
0795デフォルトの名無しさん
2012/06/19(火) 07:26:52.93連動しあうとか…それデバッグしにくいじゃない…
0796デフォルトの名無しさん
2012/06/19(火) 07:47:45.40状態持たせたり連動させたりする必要無いだろ
依存関係が多い方がデバッグもテストも大変
0797デフォルトの名無しさん
2012/06/19(火) 11:18:09.65> そっか、再帰の場合は引数に与えてしまえば状態変数いらなかったね
マジ常識だからw
0798デフォルトの名無しさん
2012/06/19(火) 11:19:00.89初心者にそれを要求するのは酷だと思う。
0799uy
2012/06/19(火) 11:43:23.56それよりも、そのg変数の挙動は素直に凄い
確かに考えてみればそれで動くわけだけど
g = nil 消しても動くというキチっぷり
0800uy
2012/06/19(火) 12:33:26.47def combinator &b
lambda do |f|
lambda{|x|lambda{|y| f[x[x]] [y]}}[
lambda{|x|lambda{|y| f[x[x]] [y]}}]
end[ lambda{|f|lambda{|n| b[n , &f] }}]
end
a = combinator do | n , &f |
if n == 0
1
else
n * f.call(n-1)
end
end
p a.call 6
Yコンビネータ(笑)を何とか使えるレベルに書き直した
あとは&f消せれば完璧だけどブロック内じゃyieldがつかえね
0801uy
2012/06/19(火) 13:25:27.09さて同じ処理をかいて並べてみると
combinatorよりも
recursionのほうが明らかに短い実装だとわかったわけだけど
Yコンビネータ(笑)どうしたらいい? Yコンビネータ(笑)定義した奴だれだよ
え?ハス・・・ハスケル?カリーwwwwwww
このYコンビネータ(笑)って。大学とかで教えまくってるんですか?
へえ・・・・
0802デフォルトの名無しさん
2012/06/19(火) 13:26:40.87combinator f = f (combinator f)
g = combinator (\f n -> if n == 0 then 1 else n * f (n - 1))
main = print $ g 6
0803デフォルトの名無しさん
2012/06/19(火) 13:32:59.580804uy
2012/06/19(火) 13:36:32.67まぁその考えはいいけど、
lambdaの再帰ではrecursionで置き換えだろこれは
所詮lambdaを使っている時点で見えない変数のオンパレード
100000回のループをさせたところ
user system total real
com 11.750000 0.344000 12.094000 ( 12.109375)
rec 2.250000 0.047000 2.297000 ( 2.296875)
お話にならない速度差がでたわ
はいYコンビネータ終了
lambdaの再帰はrecursionで置き換えられます
0805uy
2012/06/19(火) 13:53:07.03そんだけ大勢が考えててこの答えにたどり着かないとかw
本当にコピペ厨しかいねーんだな
0806デフォルトの名無しさん
2012/06/19(火) 13:59:38.31a.call 6 か a.call 7 で 100000回のループ?
それでそんな時間かかるの?
0807デフォルトの名無しさん
2012/06/19(火) 14:12:14.83p comb 7 #=>5040
proc = lambda{|n| if n==0; 1 else n*proc.call(n-1) end }
p proc.call 7 #=>5040
バカス
0808uy
2012/06/19(火) 14:15:29.810810uy
2012/06/19(火) 14:26:15.49結局変数を外で宣言するかブロック内に宣言するかの違いだった
lambda内でlambda.callとかで再帰できるようになるのが一番良い
所詮言語側が実装するまでの遊びにしか過ぎない
0811uy
2012/06/19(火) 14:46:54.11f = ->n{ b[ n , &f ] }
end
a = rec do | n , &f |
if n == 0
1
else
n * f.call(n-1)
end
end
p a.call 7 # => 5040
やはりブロック外の変数は無理に参照しないのが好ましい
0812デフォルトの名無しさん
2012/06/19(火) 16:00:13.01それって、ラムダの引数の数が変わると、recの流用ができなくなる。
素直に
a = Proc.new{
f = lambda{|n|
if n==0; 1 else n*f.call(n-1) end
}
}.call
p a.call 7
って書いたほうがまし。
0813uy
2012/06/19(火) 16:00:29.23f = lambda{|x| lambda{|y| y}}
bool = lambda{|b| if b then t else f end}
bool.call(3>4).call(2).call(5) # => 5
bool.call(3<4).call(2).call(5) # => 2
つうか気になってlambdaを調べてみたけど、lambdaのIF文って
バッカじゃねーの?
>bool = lambda{|b| if b then t else f end}
>bool = lambda{|b| if b then t else f end}
>bool = lambda{|b| if b then t else f end}
>if b then t else f end
>if b then t else f end
>if b then t else f end
>if b then t else f end
>if >if >if >if >if >if >if >if >if >if >if >if >if >if >if >if
>if >if >if >if >if >if >if >if >if >if >if >if >if >if >if >if
>if >if >if >if >if >if >if >if >if >if >if >if >if >if >if >if
IF使ってるじゃん、IFの定義にIF使うとかバカじゃないの?
これもどうせハスケル(笑)カリー(笑)が定義したものなんだろ
ほんとにゴミしか作ってねーな
0815デフォルトの名無しさん
2012/06/19(火) 16:21:30.680816uy
2012/06/19(火) 16:48:37.40出来るとかいってる奴はそんなのはハードウェアの条件分岐の仕組みがわかってない
四則演算とループは再帰で直せる
Yコンビネータはとりあえず認めてあげよう
ゴミではあるけど遠い将来に役立つかもしれないゴミだ
0817デフォルトの名無しさん
2012/06/19(火) 16:51:23.18それは真偽値t,fがそのままif式も表すんだよ
import Prelude hiding (and, or, not)
true = \x y -> x
false = \x y -> y
x `and` y = x y false
x `or` y = x true y
not x = x false true
main = do
putStrLn $ (not true) "True" "False"
((not false) `and` (false `or` true)) (putStrLn "True") (putStrLn "False")
0818uy
2012/06/19(火) 17:07:01.58一応出来るな
あー・・・これあれだ
0819uy
2012/06/19(火) 17:40:07.57Rubyで書き直してみたわ
きんも
0820デフォルトの名無しさん
2012/06/19(火) 17:46:35.050822デフォルトの名無しさん
2012/06/19(火) 18:24:12.850823デフォルトの名無しさん
2012/06/19(火) 18:58:26.88337 デフォルトの名無しさん 2006/05/18(木) 03:31:05
小説全体を全部一つの文で書くのが関数型。
分かりにくいのは当然。
0824デフォルトの名無しさん
2012/06/19(火) 19:00:30.09しかし、RubyとRailsの限界に気がついてしまいRubyのランタイムは
非常に遅いため、Rubyで作成したアプリケーションの納品をためらったことがあり
Rubyはプロトタイプ作成用に使い、納品用にJavaで作りなおさなければならなく
RubyとRailsのプロジェクトが数千行の規模を超え、チームに新しいメンバーを追加したときに、
動的言語の問題が明らかになって来て私たちはコーディングの時間の半分をテスト作成の
費やさなければならなりRailsによって得られた生産性の向上は、テスト作成の作業に
失われ作成したテストの多くは、Javaであれば不必要なものでテストの大半は、
リファクタリングによってメソッド名やパラメータの数を変更した際に、呼び出し元が
正しく変更されているかを確認するためのもので
また、Rubyでもチームメンバーが2名から4名であれば、メンバー間のコミュニケーションは
非常にスムーズでしかし新しいメンバーをチームに参加せせようとすると、
これまでチームで培ってきたノウハウを新しいメンバーにうまく伝えることが出来なかったのです。
0825デフォルトの名無しさん
2012/06/19(火) 19:18:44.740826デフォルトの名無しさん
2012/06/19(火) 19:33:05.290827uy
2012/06/19(火) 19:56:10.07大学行かなかったことに後悔しかねえよ
アホか
まぁ大学で何日もかけて授業してたであろうラムダ計算は今日一日で覚えた
俺が考えてた構想にラムダ計算はかなり近い
ただしやっぱ出来るとはわかってもIFは冗長な気がするな
プログラミングにおいて条件分岐そのものがやはりいらないのではなかろうか
0828デフォルトの名無しさん
2012/06/19(火) 20:12:27.89○馬鹿だった
0829デフォルトの名無しさん
2012/06/19(火) 20:17:30.08さっさとラクになっちまえよ
0830デフォルトの名無しさん
2012/06/19(火) 20:25:21.350831uy
2012/06/19(火) 20:28:59.30人生の別ルートが少し気になっただけで
大学なんていっていたら今の広域の知識は得れていない事は事実
少なくとも俺が大学にいっていれば、世に役立つものばかりを作り
多大な時間を他人のために使っていき、今のようにはなっていなかっただろう
そこは救われた所でもある
他人行儀に生きた瞬間に人生終了
0833デフォルトの名無しさん
2012/06/19(火) 20:32:43.36今までの五年でしてきたことを思うと…
あのコにはやっぱ気付いてもらえないかなw
0834デフォルトの名無しさん
2012/06/19(火) 20:36:18.88下らないコード書散らして日銭稼いでるドカタが
上から目線ってのもなんだかなぁ
0835デフォルトの名無しさん
2012/06/19(火) 20:40:30.64えともしかして、自分はできる子だって
勘違いしてる?
0836デフォルトの名無しさん
2012/06/19(火) 20:46:38.51ドカタだって税金や年金は払ってるからね
0837デフォルトの名無しさん
2012/06/19(火) 20:51:53.300838uy
2012/06/19(火) 21:14:53.28人間の通う学校にはもういけない
0839デフォルトの名無しさん
2012/06/19(火) 21:18:49.380840デフォルトの名無しさん
2012/06/19(火) 21:32:51.510841デフォルトの名無しさん
2012/06/19(火) 21:35:51.380842デフォルトの名無しさん
2012/06/19(火) 21:36:38.19俺は、人ではないから
人間の通う学校にはもういけない
971 名前:uy[sage] 投稿日:2012/06/19(火) 21:30:59.90
お前らが言うように、俺は確かにゴミカスだ
0843uy
2012/06/19(火) 22:51:43.640844uy
2012/06/20(水) 01:54:44.180845デフォルトの名無しさん
2012/06/20(水) 04:20:24.720846uy
2012/06/20(水) 11:04:30.49大学いっていたらそうなってた可能性の方が強い
0847uy
2012/06/20(水) 11:54:21.25お前らのような下級ゴミカスとは格が違う
0848uy
2012/06/20(水) 12:11:10.990849uy
2012/06/20(水) 15:56:41.450850デフォルトの名無しさん
2012/06/20(水) 16:08:45.500851デフォルトの名無しさん
2012/06/20(水) 16:10:58.630852uy
2012/06/20(水) 16:45:14.930853uy
2012/06/20(水) 18:39:39.03一々言葉を説明しないとわからないとか会話が不可能なレベルを超えてるわ
二度と話かけんなよ
0854uy
2012/06/20(水) 18:45:22.46お前らのような下級ゴミカスとは格が違う
0855デフォルトの名無しさん
2012/06/20(水) 18:45:47.000856uy
2012/06/20(水) 19:04:51.84レスしてるだけだ
0857uy
2012/06/20(水) 19:07:43.980858uy
2012/06/20(水) 19:18:43.64俺はエリートゴミカスだぞ
0859デフォルトの名無しさん
2012/06/20(水) 19:31:09.000860uy
2012/06/20(水) 19:33:24.91もう一回言ってみろ
0861デフォルトの名無しさん
2012/06/20(水) 19:45:44.890862デフォルトの名無しさん
2012/06/20(水) 19:48:25.250863uy
2012/06/20(水) 19:49:27.880864デフォルトの名無しさん
2012/06/20(水) 19:55:38.21むしろあのコがいない世界で認められたくなんかない、いくら俺にチカラがあっても。
ってかぁwwwwハラいてぇwwww文春wwww
0865デフォルトの名無しさん
2012/06/20(水) 19:56:45.69がんばれがんばれuy
0866uy
2012/06/20(水) 21:39:13.52それを知らずに死んでいく事だけは避けろよ
この世界には何も残らない
人は死んだら何も残らず、
もっと抽象的に言えば、この星は数千万年後に星ごと消滅する
では、何も残らない中で何をするか?
現実から目を背けろよ
0867uy
2012/06/20(水) 22:35:27.30お前らのような下級ゴミカスとは格が違う
この現実だけ受け入れればいい
0868uy
2012/06/21(木) 00:25:53.110869デフォルトの名無しさん
2012/06/21(木) 02:05:16.63どこが抽象的なんだろ?
0870uy
2012/06/21(木) 04:26:14.680871uy
2012/06/21(木) 04:44:53.530872uy
2012/06/21(木) 05:42:39.320873デフォルトの名無しさん
2012/06/21(木) 19:22:41.06つか相手の声もまともに聞かんで愛もクソもたいして変わらんって。
0874デフォルトの名無しさん
2012/06/21(木) 20:12:31.81飽き飽きだったが、この流れは流石に...
0875デフォルトの名無しさん
2012/06/21(木) 20:22:02.670876uy
2012/06/21(木) 20:28:10.82動的言語(Ruby)の問題点ベスト5
1位 どんどんオーバーライドされていく
2位 変数宣言がない(利点でもあり欠点でもある)
3位 コンパイル時型チェックがない
4位 実行してみないとわからない事が多すぎる
5位 静的言語よりは速度が遅い
別項目として、開発前や開発後の問題
・まともに動的言語を扱える技術者が少ない、集まらない
・仕様変更や処理系のバージョンアップによってその瞬間、全ての動的言語のソースコードは正しく動くという保証をなくす
0877デフォルトの名無しさん
2012/06/21(木) 20:38:28.08ちょっと待てw初っぱなからおかしいだろソレ。
0878デフォルトの名無しさん
2012/06/21(木) 21:14:43.11Javaこそが至高の言語ということに気付いたか……
0879uy
2012/06/21(木) 21:41:47.14俺はこのまま行くとrubyでのプログラム開発の人柱になるんだろうけど、
今のままでは絶対に後続がついてこない
0880デフォルトの名無しさん
2012/06/21(木) 21:55:01.850881デフォルトの名無しさん
2012/06/21(木) 22:13:50.260882uy
2012/06/21(木) 22:20:08.49作業効率20程度しかでない言語を扱える奴が
世界で一番人口が多ければその言語が優れている優れていないかにかかわらず使われるようになるんだよ
世界で最も大勢に使われることを目標に作られた言語ならば、それでいいんだろうが
頭のレベルが平均以下の人間にも扱える言語にしてやらないと言語の人気を取れないから
効率的プログラミングとは程遠い言語が出来上がる
何をしたいかによる
俺は世界のプログラミングの効率水準を上げたいだけ
0883uy
2012/06/21(木) 22:28:04.18みたいな妄想に酔いしれたがる層もいる
BrainFackで何かプログラム作ろうって意欲と、C++で何かプログラム作ろうって意欲は同じだと思える
別の例でいえば、使いこなすのが難しい技法や道具であえて競技しようとするスポーツ選手など。
あえて逆側に突っ走る奴もいる
もはや、まともに考えるだけ無駄である
0884デフォルトの名無しさん
2012/06/21(木) 22:29:45.890885uy
2012/06/21(木) 22:32:12.84お前らのような下級ゴミカスとは格が違う
0886デフォルトの名無しさん
2012/06/21(木) 22:44:30.82要するに自分基準で分類してるだけじゃねーか
uyにとって丁度良い難易度の言語がRubyだったってだけだろ
0887uy
2012/06/21(木) 23:16:28.93俺は効率の出る概念なら難易度関係なく理解する
それが出来ない奴らは身の丈にあった言語を使えで結論付いた
0888uy
2012/06/21(木) 23:45:29.260889uy
2012/06/21(木) 23:46:48.34お前にuyの名は背負えない
0890uy
2012/06/21(木) 23:58:49.61そもそも言語に難易度などない
それすら分からない奴らは下級ゴミカス
0891uy
2012/06/22(金) 00:15:21.650892uy
2012/06/22(金) 01:06:36.660893uy
2012/06/22(金) 02:11:30.490894uy
2012/06/22(金) 04:55:44.310895デフォルトの名無しさん
2012/06/22(金) 05:51:17.97質問なりこれすげぇ言ったのがいることやら。
流されちゃ人柱にもならねぇよ、役立たず。って本望だからいいのかw
0896デフォルトの名無しさん
2012/06/22(金) 05:59:06.02http://engawa.2ch.net/test/read.cgi/poverty/1340306216/
どんなプログラム作っても
人間が馬鹿だから意味ないな
0897デフォルトの名無しさん
2012/06/22(金) 07:24:27.180898デフォルトの名無しさん
2012/06/22(金) 08:03:41.86それぞれのタイプ別に
有能で勤勉: Lisp, Python
有能で怠惰: Haskell, OCaml
無能で勤勉: Ruby, PHP
無能で怠惰: Java, C#
に代表される言語を使うのが向いている
0899デフォルトの名無しさん
2012/06/22(金) 08:21:15.580900デフォルトの名無しさん
2012/06/22(金) 09:10:34.32どんな言語を知らないのか良く分かる。
0901デフォルトの名無しさん
2012/06/22(金) 09:45:37.61前にも書いたけど、C++だろうがJavaだろうが、
辞書クラス使えば、簡単に動的言語相当のことは出来るからな。
動的言語は、実行時に色々なことを解決するから動的なわけだけど、
そういうコードは静的言語でも書けるんだよ。
実行時の動作を制御するのはプログラミング言語の本分だからな。
逆に
静的言語は、コンパイル/リンク時に色々なことを解決するから静的言語なわけだけど、
そういうコードは動的言語では書けないんだよ。
コンパイラ自体にそういう機能が無いことには、どうやっても無理。
0902デフォルトの名無しさん
2012/06/22(金) 09:55:55.31テスト期間10日が10分に!日本IBMが仮想テスト環境ツール 2012年06月22日 06時00分更新
ttp://ascii.jp/elem/000/000/703/703943/
6月21日、日本IBMは仮想的なテスト環境を自動構築するソリューション
「Rational テスト仮想化/自動化ソリューション」を発表した。
Rational テスト仮想化/自動化ソリューションは、テスト対象となるシステムへの入出力を
仮想的かつ自動的に再現する機能を持つ。これにより、テスト対象システムと接続するシステムの
完成を待ったり、稼働を停止する必要がなくなり、テスト環境を実際に構築することなく接続テストを
実施できる。結果として、テスト時間の短縮やテスト環境構築への投資と手間の削減が実現する。
また、仮想化環境での接続テストが可能になることで、システム開発工程の早い段階で
不具合の修正ができるため、開発の最終段階での大幅な変更や品質問題発覚による開発遅延の
低減が可能となり、顧客へのサービス開始の遅れや追加コストの発生を防ぐとしている。
たとえば、海外の金融機関では、テストの大部分を自動化できたことで、手作業による
テスト期間を10日から10分に削減したという。また、ある製造企業は、従来6カ月かかっていた
システム構築を2カ月短縮し、4カ月で完成させたとしている。
IBM Rational テスト仮想化/自動化ソリューションの使用料金は、4000万円(100PVU)から。
0903デフォルトの名無しさん
2012/06/22(金) 10:10:41.21コンパイル時にできると思ったがよく考えると実行時でしかできないことがある。
両者を区別すると、どちら側に分類するか判断を誤ることがある。
よく似た例として
動作が変わらない修正 (リファクタリング) と動作が変わる修正を区別すると混乱する。
すべての修正を同じものとして扱うなら混乱しない。
0904デフォルトの名無しさん
2012/06/22(金) 10:22:31.57両者を区別すると、どちらを使うか判断を誤ることがある。
ってことですか?
それはちょっと低脳過ぎやしませんか。
0905デフォルトの名無しさん
2012/06/22(金) 10:30:20.150906uy
2012/06/22(金) 14:39:46.35お前は効率を理解できないなら黙ってれば?
俺はあのソースコードと3つほどの概念を公開してから1年ネット全体の様子を見た
質問者には全ての知識を与えるつもりで教えた
しかし何も変わった様子が無いから、仕方ねーから俺がやってやるかってだけ
完璧と非完璧と擬似完璧がわかるまで二度と話かけるなよ
0907uy
2012/06/22(金) 14:41:48.92どうてみてもPython用だぞアレは
しかし他の部分おいてrubyがPythonを凌駕しているから仕方なく
endの数十連続にもコメントをつけて耐えているだけ
やれなくは無い
0908uy
2012/06/22(金) 14:43:29.71ここまでいえばわかると思うが
そういう事なんだろ
チャーチ数でプログラム組めない奴はだまれかす
0909デフォルトの名無しさん
2012/06/22(金) 15:01:25.080910デフォルトの名無しさん
2012/06/22(金) 15:12:34.06よかったじゃないか、uyを相手にしないのがあのコだけじゃなくてよww
0911デフォルトの名無しさん
2012/06/22(金) 15:14:32.370912uy
2012/06/22(金) 15:23:36.81これは認めよう
だが俺はエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
0913デフォルトの名無しさん
2012/06/22(金) 15:29:54.310914デフォルトの名無しさん
2012/06/22(金) 16:42:13.84それはそれとして、そういうの書くのが苦手な言語って
ようは処理を抽象化する能力に劣るってことだよな。
0915uy
2012/06/22(金) 17:32:45.34どう使ったらいいか人間がバカすぎてわからないだけ
人は数字に弱く、再帰構文にはもっと弱い
0916デフォルトの名無しさん
2012/06/22(金) 17:39:00.780917uy
2012/06/22(金) 18:00:59.76人を使うより人にこき使われる存在でありたい
0918デフォルトの名無しさん
2012/06/22(金) 18:25:39.900919デフォルトの名無しさん
2012/06/22(金) 19:50:44.730920デフォルトの名無しさん
2012/06/22(金) 19:57:38.720922デフォルトの名無しさん
2012/06/22(金) 20:00:18.140923デフォルトの名無しさん
2012/06/22(金) 20:07:12.91ruby_eval("...");
}
0924デフォルトの名無しさん
2012/06/22(金) 20:19:46.63デザインパターンを否定されたら
顔真っ赤にして怒りそう
0925デフォルトの名無しさん
2012/06/22(金) 20:22:35.410926デフォルトの名無しさん
2012/06/22(金) 20:23:50.180927uy
2012/06/22(金) 20:24:33.470928デフォルトの名無しさん
2012/06/22(金) 20:24:42.48抽象化ってのは、関数を使って同じ処理を纏めたり、
インターフェースを使って、データを抽象化したりすることだから、
テスト工数が増大したりはしないよ。むしろ減るはず。
動的言語を使うと、「インターフェースが適切に抽象化されたか」の
テストが必要になるからテスト工数が増えるけどね。
ダックタイピングだから、メソッド名typoしててもコンパイラが指摘してくれない。
0929デフォルトの名無しさん
2012/06/22(金) 20:27:46.92デザインパターンを否定されて顔真っ赤にする奴も
デザインパターンを抽象化の文脈で出す奴も
どちらも勘違いしたアホだということ
分からなくておk
0930デフォルトの名無しさん
2012/06/22(金) 20:31:30.20そのパターンをマクロやメタプログラム等で抽象化できずに
繰り返すアホ的行為が多々見られるときに
そのパターンに付けられる名前
ちゃんと抽象化に反している
0931デフォルトの名無しさん
2012/06/22(金) 20:36:19.10その雛形をテンプレート化してしまえば、
パターンじゃなくて、クラスライブラリだからな。
パターンって言葉は反復重複って意味合いを内包しているわけだから、
プログラミング的には悪い意味だわな。
0932uy
2012/06/22(金) 20:42:51.650933デフォルトの名無しさん
2012/06/22(金) 20:48:36.210934デフォルトの名無しさん
2012/06/22(金) 21:06:49.420935uy
2012/06/22(金) 21:07:24.90普段から使ってる奴が、使っていく上で気づいた欠点指摘ならまだしも
0936uy
2012/06/22(金) 21:10:24.90妄想を垂れ流され続けられても迷惑である
0937デフォルトの名無しさん
2012/06/22(金) 22:07:40.90こうですよね?
たしかに、アルゴリズムが決まりきった雛形なら、
その雛形をテンプレート化してしまえば、
パターンじゃなくて、アルゴリズムライブラリだからな。
パターンって言葉は反復重複って意味合いを内包しているわけだから、
プログラミング的には悪い意味だわな。
0938デフォルトの名無しさん
2012/06/22(金) 22:11:20.53後半のパターンって言葉に対する突っ込みは正しくパクれてないんじゃ。
しかもアルゴリズムも有名どころは関数化もしくはテンプレート化されてるだろ。
クイックソートとか。
0939デフォルトの名無しさん
2012/06/22(金) 22:13:01.60デザインパターンってのは、実装コードを
どう組み合わせるかという話で実装コードではないから
的外れだな。
同じパターン書いたって、同じコード書かないし。
0940uy
2012/06/22(金) 22:25:22.17>>641
こういう「リファクタリングを世に広めた人」とかいう感じの
「デザインパターンを世に広めた人」とかいう奴
でてくるの?
0941デフォルトの名無しさん
2012/06/22(金) 22:29:29.49広めた人はいるだろうね。
0942デフォルトの名無しさん
2012/06/22(金) 22:30:09.34アルゴリズムを広めた人だっているよ。
そういう人は素直に尊敬するべきである。
0944uy
2012/06/22(金) 22:50:09.79その根拠をこれから説明していく
耳をかっぽじってよく聞けよ
0945デフォルトの名無しさん
2012/06/22(金) 22:54:02.11/─ ─\ ホジホジ
/ (●) (●) \
/::::::⌒(__人__)⌒::::: \
| mj |ー'´ | 穴をかっぽじるんだな
\ 〈__ノ /
ノ ノ
0946uy ◆pdu1UZmweE
2012/06/23(土) 00:06:01.900947デフォルトの名無しさん
2012/06/23(土) 03:41:21.660948デフォルトの名無しさん
2012/06/23(土) 04:48:44.60> 同じパターン書いたって、同じコード書かないし。
もし比較関数を引数として渡せなかったら
ソートアルゴリズムもこう言われてただろう
比較関数は毎回違うからな
0949デフォルトの名無しさん
2012/06/23(土) 04:57:46.010950デフォルトの名無しさん
2012/06/23(土) 05:04:15.20比較関数を渡すだけでも冗長なコードが必要になる
当然そのコードは決まりきったパターンを持つ
Strategyパターンである
0951デフォルトの名無しさん
2012/06/23(土) 05:42:32.60たかだか100バイト程度だろ?
そんなに何度も比較するのか?
冗長な部分はコピペでいいよな?
0952デフォルトの名無しさん
2012/06/23(土) 05:48:36.43もし比較関数を1000個書けば、
8時間以上も差がつくわけだが。
0953デフォルトの名無しさん
2012/06/23(土) 05:53:58.480954デフォルトの名無しさん
2012/06/23(土) 05:55:03.27設定ファイルからの読み込みか作るわw
下手に短く書ける言語って
その場で書いて関数にしようとしないよな。
で同じようなコードがたくさんできると。
0955デフォルトの名無しさん
2012/06/23(土) 06:01:46.01> 設定ファイルからの読み込みか作るわw
そして行き着いたのがXML地獄ですね
0956デフォルトの名無しさん
2012/06/23(土) 06:04:27.67頭が硬いね。
0957uy
2012/06/23(土) 06:09:49.52「短く書く為の」構文が既に最初から処理系に備わっているわけで
それは静的言語使ってる奴が一生懸命使いやすいように作った関数が、最初からあるみたいな、そういう次元
静的言語はよく動的言語には最初からあるものの車輪の再発明をしている
設定ファイル(笑)
って
プログラミングにおいての最終手段だよな
ああ、こういうのを無能な働きものっていうのか、確かに言語の機能内で上手に出来ない事があるからって
ソースコード外まで安易に散らかすような奴は処刑するしかない
0958uy
2012/06/23(土) 06:13:16.57頭悪いね。
0959デフォルトの名無しさん
2012/06/23(土) 06:14:59.42そんなものに設定ファイルなんて不要な
短く書ける言語を使った
0960デフォルトの名無しさん
2012/06/23(土) 06:21:52.73-> どうせなら設定ファイルにプログラムも書けるようにしよう
-> 凄く短く書けるようになったので、設定ファイルに全部書くようにしよう
-> 動的言語の誕生
0961uy
2012/06/23(土) 06:27:25.48それ俺がC++しか使ってない頃に設定ファイル使って、そこから動的言語に辿り着いた時の思考だわ、懐かしい
静的言語厨はリアルでその頃の俺のレベルで停滞してる奴がいそうだからかかわりたくない
0962uy
2012/06/23(土) 07:01:51.830963デフォルトの名無しさん
2012/06/23(土) 07:13:17.05Cの課題ができなくて泣いた前かw
0964uy
2012/06/23(土) 07:20:05.360965デフォルトの名無しさん
2012/06/23(土) 07:22:31.83uyを攻撃してウヤムヤにする
というデザインパターン
0966uy
2012/06/23(土) 07:43:39.59お前らのような下級ゴミカスとは格が違う
0967デフォルトの名無しさん
2012/06/23(土) 08:54:41.92辞書クラス使えば静的言語でも動的言語相当なプログラミングできるんだから。
静的言語⊃動的言語
0968uy
2012/06/23(土) 09:06:18.340969デフォルトの名無しさん
2012/06/23(土) 09:10:02.430970uy
2012/06/23(土) 09:12:50.970971デフォルトの名無しさん
2012/06/23(土) 09:16:24.810972デフォルトの名無しさん
2012/06/23(土) 09:18:03.45動的言語の機能を持った、ハイブリッドな静的言語ってあまり見ない。
あってもよさそうなのに。なぜ無いか。
それは、辞書クラス使えば簡単に同等のことが出来るからwww
逆に動的言語ではどう逆立ちしたって静的言語と同等のことが出来ない。
なぜならコンパイラにそういう機能が備わってないから。
手抜きコンパイラww
0973デフォルトの名無しさん
2012/06/23(土) 09:19:14.930974デフォルトの名無しさん
2012/06/23(土) 09:23:57.02Javaでコンビネータを書こうとしたが
あまりの冗長さに断念した……
「原理的に出来る」と「簡単に出来る」の差をまざまざと見せつけられた……
0975デフォルトの名無しさん
2012/06/23(土) 09:24:34.18動的な制御は静的言語でも出来る。
静的な制御は動的言語では無理。
分かりやすく言い換えれば、
実行時の制御は静的言語でも出来る。
コンパイル時の制御は動的言語では出来ない。
コンパイル時の制御をしようと思ったら、
コンパイラに元々静的に制御する機能がないと無理。
その機能を端折った手抜き版が動的言語。
0976デフォルトの名無しさん
2012/06/23(土) 09:28:18.69書こうとする前に気付けよw
Cプリプロセッサで関数型プログラミングモドキを試みるくらいアホだな
0977デフォルトの名無しさん
2012/06/23(土) 09:29:07.920978デフォルトの名無しさん
2012/06/23(土) 09:30:34.14Javaが抽象化能力に劣ってるのは有名だろww
型注釈がうざいだけじゃ、あんなに冗長にはならないっつーの
0979デフォルトの名無しさん
2012/06/23(土) 09:31:46.550980デフォルトの名無しさん
2012/06/23(土) 09:33:37.07obj["name"]
0981デフォルトの名無しさん
2012/06/23(土) 09:40:48.60これらコードジェネレータは言語が抽象化能力に劣るという欠点を補うもの
一方、動的言語は抽象化が高いことによるパフォーマンスの低下や
コンパイラによるチェックの不在を補えないのであった
結果、世界で広く使われるのはCを初めとする静的言語
0982デフォルトの名無しさん
2012/06/23(土) 09:41:10.84Javaが1/10の生産性だとしても、10分で書けるな
さあ、ideone.comにコードを貼るんだ
0983uy
2012/06/23(土) 09:43:31.620984デフォルトの名無しさん
2012/06/23(土) 10:57:44.38Objective-Cくらいじゃね?
型付きのLisp変種とか
0985デフォルトの名無しさん
2012/06/23(土) 11:05:00.870986デフォルトの名無しさん
2012/06/23(土) 11:24:35.59じゃあコンパイル時と実行時だけでなく起動時に大規模な処理をする言語は偉いのか?
0987デフォルトの名無しさん
2012/06/23(土) 11:32:51.950988デフォルトの名無しさん
2012/06/23(土) 11:38:45.74終了時「最弱」
コンパイル時「」
0989uy
2012/06/23(土) 12:21:10.53そのネタ飽きないよな・・・
俺はまず学校にはいった時点では既にC,C++,少量のPerlの知識まではあったわけで
宿題や課題とか一瞬で終わるから1つも家に持って帰った記憶が無いし
何のことを言ってるんだコイツ
ガキの書いたネタレスに釣られちゃったのか?w
batとPerlでCの宿題用のソースメタしてた記憶しかない
0990uy
2012/06/23(土) 12:23:00.35uy言語とかOS作ってた時期だったな ruby入る直前にやってた
ある意味その頃が一番の全盛期
そこでお前らとの差が一気に広がってしまった
お前らみたいに何年間も同じようなプログラミング続けてる奴と違うから俺は
今でこそrubyだけどほんの数年前はガチでC++/WinAPI、アセンブラ、Perl
そこを通過した俺が動的言語を是としているんだから察しろよ
いつまでも同じ場所で立ち止まってないで
成長が遅いゴミカスはまずは黙って先人に従え
0991デフォルトの名無しさん
2012/06/23(土) 12:26:32.06そして、静的言語の機能縮小版のRubyの出番はないわ。
0992uy ◆xVOGOO9ev6
2012/06/23(土) 12:26:57.94最近、静的言語厨の書き込みが悲鳴にしか見えない・・・w
違うだろwww
仕事で使うプログラミング言語がwww
効率がでるとかwwでないとかwww関係ねーからwww
コードジェネレータwwwwww
関数にまとめるwwwwwwwwww
現実を見ろとしかいえない
関数にまとめるwwwwwwwwwwwwwwwwwwwwwwワロタwwwwwwwwwwww
関数にまとめてろwwwwwwwwwwwww
0993デフォルトの名無しさん
2012/06/23(土) 12:28:15.500994uy ◆xVOGOO9ev6
2012/06/23(土) 12:29:56.27設定ファイルwwwwwwwwwwww
そもそも設定ファイルはアルゴリズムには直結しないデータを入れろよ
普通は定数関係のみだろwwwwww
設定ファイル内にアルゴリズムが必要になったらそれはもう「プラグイン」だから
バカが>>954
セッテイファイルカラノヨミコミカツクルワw
とかいってるけど
ソースコード外まで散らかす奴は追放したほうが良い
そんな案を出す奴も追放したほうが良い
初心者だと自覚のないこういう奴は追放したほうが良い
0995uy
2012/06/23(土) 12:30:48.96お前らは黙って俺について来い
0996uy ◆xVOGOO9ev6
2012/06/23(土) 12:31:59.37設定ファイルwwwwwwとして関数にまとめるwwwwwwwwwwwww
時代が止まってんだな
発想の問題なのかもなぁ
俺はC++で一度設定ファイルフルに使わざるをえないプログラム作成した時に
真っ先にスクリプト化がよぎって、すぐに動的言語に着ちゃったけど
ここのプロセスに10年かけるやつもいるって事だ・・・
0997デフォルトの名無しさん
2012/06/23(土) 12:33:05.77動的言語で出来ることは静的言語でも出来るわけだから、
いつまでたっても静的言語の優位性は揺るがないんだよ。
0998uy ◆xVOGOO9ev6
2012/06/23(土) 12:34:36.16プププwwwww
そう思うなら動的言語使わなくていいからwwww黙って静的言語使ってろよwwww
プッギャアアアアアアwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
マジ素で言ってそうだから面白いwwwwwwwwwwwwwwww
0999デフォルトの名無しさん
2012/06/23(土) 12:34:57.201000uy ◆xVOGOO9ev6
2012/06/23(土) 12:35:29.68静的言語よりはマシだと確信してるわwwwwwwwwwwwwwwwww
静的言語の問題点をなぜ挙げないかって??
見放してるから、問題点を指摘さえしないってことだよwwwwwwwwwww
気づけバカwwwwwwwwwwwwwww
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。