1 :
デフォルトの名無しさん :
2012/04/24(火) 05:02:52.54 しかし、RubyとRailsの限界に気がついてしまったのです。Rubyのランタイムは 非常に遅いため、Rubyで作成したアプリケーションの納品をためらったことがあります。 Rubyはプロトタイプ作成用に使い、納品用にJavaで作りなおさなければなりませんでした。 RubyとRailsのプロジェクトが数千行の規模を超え、チームに新しいメンバーを追加したときに、 動的言語の問題が明らかになって来ました。私たちは、コーディングの時間の半分をテスト作成の 費やさなければならなかったのです。Railsによって得られた生産性の向上は、テスト作成の作業に 失われてしまいました。作成したテストの多くは、Javaであれば不必要なものでした。テストの大半は、 リファクタリングによってメソッド名やパラメータの数を変更した際に、呼び出し元が 正しく変更されているかを確認するためのものでした。 また、Rubyでもチームメンバーが2名から4名であれば、メンバー間のコミュニケーションは 非常にスムーズでした。しかし新しいメンバーをチームに参加せせようとすると、 これまでチームで培ってきたノウハウを新しいメンバーにうまく伝えることが出来なかったのです。
馬鹿な上司が「JavaからRubyへ」を読んで Javaで作ったプログラムをRubyで書き直し プロジェクトが大きくなりメンテナンス不能のなって 結局またJavaで書き直し
数千行?
数千行がRuby+Railsの限界ってこと?
>>1 これは「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へと乗り換えたときに似た、開放感を覚えました。
直後の記述: 私は、新しい言語と開発環境を探し始めました。 Rubyの豊かな表現力と、Javaの高いパフォーマンスを併せ持つ言語を探していました。 そして2006年11月、出会ったのがScalaです。 Scalaは表現力とパフォーマンス両方を兼ねそなえているだけでなく、 それ以上の可能性を感じさせてくれたのです。 (中略:Scalaは高速でJavaと互換性がある) 最も重要な事は、Scalaはこれまでと違ったプログラムの方法や考え方を教えてくれたことです。 Scalaを知ったおかげで、バッファーや構造体、オブジェクトの割り当てや、 これらのメモリ操作について考えるのをやめました。 その代わり、私の作るプログラムのほとんどは、 インプットからアウトプットへの変換ととらえられることを学びました。 Scalaは、簡潔でモジュール化されたコードを、 メンテナンス可能な形でまとめられるツールを与えてくれました。 しかも、JavaやRubyを使う場合よりも、はるかに複雑なロジックを記述できます。 2年以上Scalaを使いつづけ、愛し続けた結果、後悔していることが1つだけあります。 それは大学時代にLispを学ばなかったことです。 大学院時代にプログラミング言語理論についてのコースをとっておくべきでした。
ああ、カルト宗教の文句に似てるんだな
>>1 筆者の考えがより正確に伝わるように引用します。
「テストの大半は、リファクタリング」
今カウントしたら、redmineの*.rbの行数が2万行なんだが、数千行ってどんだけ小さいプロジェクトなんだ?
原文がどうなってるか知らんけど 数千→数万になったって意味じゃね?
これ、上司が糞であって動的言語とか関係なくね?
単に開発環境が変わったためのコストを払い切れなかったというケースだな 移行とかに慣れないうちはよくある
これで言語(のユーザー)を煽れると思ってしまうということはつまりその人は働いたことがな
>>8 Javaに対するEclipseのような修正漏れが限られているリファクタリングツールが
Railsにないからテスト工数が増大したという事ですね。
Ruby+Railsだと修正漏れの少ないリファクタリングツールを作るのは難しいですが、
今後ツールが自動的に修正できる範囲が増えれば必要なテストは減るでしょう。
つまり、Rails用リファクタリングツールの性能向上で解決できる問題だと思います。
>>14 オブジェクト指向で何か修正したい場合
メンバーの継承と追加はできるが削除はできないというのが基本です
これはツールではなくパラダイムです
メソッド名やパラメータの数を変更するのも、ツールではなくパラダイムの問題です
新手のruby disスレ。 そんなにrubyが憎いか。
YARVの登場で時代は変わったろ いつの時代の人間だ
>>17 > メソッド名やパラメータ数を修正した時に呼出側も漏れなく修正されるかどうかはツールの問題です。
言語の問題であることも多いよ。
RubyわからんのでPerlの例でいうけど、
たとえばPerlだと
{
package Class1;
sub new { ... }
sub foo { ... }
}
↑このfooというメソッド名を修正した時、
my $c = $flag ? Class1->new() : Class2->new();
$c->foo();
↑ 呼び出し側のfooを変更していいかどうかなんて判別不可能だしね。
Rubyも変数に型がないから、同じじゃない?
>>17 断言が気に入らないようだが、宣言的なパラダイムをどう思う?
そもそも「修正する」というのは手続き的だよな
>>19 静的型付言語のJavaが静的コード解析で修正箇所を特定できるのに対し、
動的型付言語でダックタイピングを採用したRubyと
黒魔術レベルの動的プログラミングを実現したRailsの組み合わせに対して
必要な修正を網羅するリファクタリングツールを非常に作りにくいのは確かですね。
それでもRailsのバージョン別のツールにするとか
ホワイトボックステストで実行フローを枝刈りするとか
ツールのアルゴリズムを工夫する余地はあると思います。
>>21 手続き的か宣言的かオブジェクト指向かというのはプログラムの設計の話です。
リファクタリングは無駄に複雑でわかりにくいコードを全体的に整理するという話です。
あなたは全然関係ない話をごちゃまぜにしています。
>>23 あなたは「設計と全然関係ないことをするのがリファクタリングだ」と言っています
>>22 余地があるのは、今のRubyのリファクタリングツールが貧弱なだけ。
少しはまともになるかもしれないが、まあ期待するだけ無駄でしょう。
Scalaのおかげで、コードを短く書くのに、動的言語である必要性はないのが証明されました。
これからは静的言語かつコードを短く書けるScalaのような言語が
主流になっていくでしょう。
プログラマだというのに、プログラミングを楽にするためにコンピュータの力を
生かせる言語を作ろうと発想が出てこないのが不思議でなりません。
Scalaは理想の言語ですね。
コードは「人に読ませるために」あるんだよ 誰も読めないようなperlの魔法的変態記述の反省でもあるのに なぜ性懲りもなく繰り返すのか perl知らない素人じゃあるまいに
>>26 ScalaでHello World
↓
println("Hello, world!")
これだけ。
public static void mainなどいらないのです。
Smalltalkはテキストを読み書きすることにあまり興味がない Perlはものすごく読み書きに詳しい では、読み書きに詳しくない人に読ませるという立場はどこから出てきたのか
高度にチューンされた静的言語に動的言語がどうやってもかなわないのは事実だが、 Rubyが遅いのは動的だからって短絡はほんといいかげんやめてほしい。 Rubyが遅いのは単純にまつもとやささだの技量不足ってだけの話しで、 やつらが作れば静的言語だって遅くなる。LuaやV8の実装者に申しわけなさ過ぎる。
>>31 > 技量の差とどうやって
動的という観点に絞れば、LuaやJavaScriptはRubyよりはるかに動的だからでFA
> コンパイラは同じだから、コンパイラ作者の技量の差などありません。
それは1行目の話。型情報を使って最適化できる静的型が有利なのは当たり前。
なぜ遅いって、jit積んでないからやろ
それも技量や知識の無さの証左。
コンパイル処理には時間がかかります。 さて、次の三つのうち実行時間が一番遅いのはどれでしょう? 1.コンパイル処理を実行開始前に完了しておく 2.コンパイル処理を実行開始時に行う 3.コンパイル処理を実行されるたびに行う
Java vs Ruby か どっちもウンコ言語だから良い勝負だな
行ごとにコンパイルする場合、コンパイルしなかった行に文法違反があっても すどおりしたようにみえる
動的型付けってすごいよな 初めて見たときは衝撃だよな
俺がはじめてみた動的型付け言語は BASICだ。
「動的」の対象が話者によって食い違ったままの隔離スレではあるが、せめて「実行時に型を動的に生成出来るか」ぐらいはチェックしようぜ。
PHPでコードを書いてて、 $loginId を $loginid ってスペルミスして、デバッガで追いかけないと それに気づかなかったり、rubyでendをうっかりendifって書いていて、ミスしたのはコードの 最初のほうなのに表示されるエラーの行番号はコードの最終行でミスを見つけるのが困難だったり ほんと動的言語はダメだわ。
camelCaseを止めて、variable_name形式にすれば少しはいいかも。 あとlint的なものを使えば、その手の間違いを検出できる場合もある。
静的言語だと「文脈と間違え方から見ておそらくこの部分がこう書きたかったスペルミスだと思われます」とか言ってくれるのか アホ
Rubyはifだろうが繰り返しだろうがメソッド定義だろうが例外捕捉だろうが全部endだからな 動的かどうか全く無関係に区別は不可能 っていうか着色とキーワード改行インデントするエディタ使え
>>47 静的型付け言語だと、変数の宣言が必須でコンパイルエラーになるから検出が容易
誰が静的型付けの話をしている
…とりあえず、「静的」「動的」のとこで語句区切るの今後一切禁止で
定義厨はいいよ
>>52 時間潰しでレス欲しいだけならVIPやニュー速や嫌儲へどうぞ
>>47 IDEがサポートしてる静的言語ならエディタで入力した時点でそんな変数ないって指摘してくれる。
動的型付でも動的定義でも、98%くらいは静的に(代入子で)定義された名前だろうから、 頑張れば大部分は検知できそうな気もするが、流行らないのはなんでだろう
"login_id = param"のつもりで"loginId = param"と書いてしまったときの話だよ?
全然違った。 "loginId = param"のつもりで"loginid = param"と書いてしまったときの話だよ?
>>55 グローバル変数の使用状況を見れば、頑張らなくてもチェックできるんだが
グローバル変数が無い言語が流行っている
Javaの視点で動的言語がダメだというのは、その通りなんだな 全然違う視点を持つと結果は変わってくるが クラスベースOOとかJavaに近い動的言語はダメになる
つーかミスをする人間は 動的言語を使うなという話。
ミスをしない人間なら直接バイナリを書けるよな
CにGCつけたら書ける ただしGCが改良される度にソースの互換性がなくなる気がする
名前をトレースできないように出来る言語は総じてカオス 現行のほとんどの言語がやれちゃうのでどうしようもない あきらめてスクリプト言語で作ろうぜ 俺は絶対にやらないけど
ボイルの法則とかシャルルの法則とかボイルシャルルの法則とか 名前をつけても何も解決しないな
., i! / ハ , i! ヽ V | | i l 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! |
お兄ちゃん、型付け型付けとうるさいけど自分のお部屋を片付けられないんだね・・・
>>68 現実には型付けがなくて片付けられないんだよ
誰が面白いこといえと
71 :
uy :2012/05/12(土) 12:20:05.59
>>67 でっていう
ライブラリ側は全て静的言語でやって(速度も速いし)
その速度の速いライブラリを動的言語から呼び出したり、
型情報とかいちいちつける意味のない
実装コードは動的言語でさっさとやるんだよ
「intとか核のめんどくせぇ!」っていうなら型推論使えよvarとか
ミスを指摘されるのを嫌う人間が好んで使うらしい
コメントを付けなくちゃいけない規模になったら もう動的型付け言語ではやっちゃいけないってことなんだよ。 この変数は○○型です。なんて コメントをつけ出したら末期。
システムハンガリアンでおk と言うかシステムハンガリアンが活きるのって CやJavaやC#じゃなくて動的言語だよなあ
C++ with Boostにシステムハンガリアンで脳死
動的言語なのにシステムハンガリアンって、悪いところ取りになってないか。
動的言語でも、この変数には互換性のない型を いれても正常に処理しますってのは無いんだから。
疑わしきは罰せずってのが有る つまり、コード自体のミスよりも 悪いコードに罰を与えようとする側の判断ミスの方が深刻な問題になる
テストの大半は、リファクタリング
>>77 動的型付けだからシステムハンガリアンが必要になるんじゃないの?
違う型突っ込んでもシステムがエラーを拾うわけじゃないんだろうけどさ
83 :
デフォルトの名無しさん :2012/05/22(火) 14:17:06.25
>>71 > ライブラリ側は全て静的言語でやって(速度も速いし)
> その速度の速いライブラリを動的言語から呼び出したり、
> 型情報とかいちいちつける意味のない
> 実装コードは動的言語でさっさとやるんだよ
ブラウザだと逆になってしまいそうだな。
ライブラリは速いJavaScript、それを使うユーザーは静的型言語から変換。
どうしてこうなった
ブラウザがVM向け中間コードのI/Fを公開していないという欠陥
85 :
uy :2012/05/22(火) 16:13:17.91
これ 動的言語はダメだ ってふうに勘違いされやすいけど そうじゃなくて 今まで静的言語でプログラム開発していた部分に やっと動的言語が1歩踏み込んだけど、まだ色々と足りなくてダメだったね ってだけだからね いずれにしよ、小規模なプログラム開発では動的言語に静的言語が勝てるわけないから そのうち大規模開発でも動的言語は使い物になると思うよ 今は、「え?別に動的言語で大規模開発できるでしょ?」って無理して発言する事ではなく 「なぜ出来ないのか?」「どうすればいいのか?」 それを考える時期
uyがまともなこと言うなんて、どうなってんだこの世の中。
「小規模なプログラム開発では動的言語に静的言語が勝てるわけない」 からどうして 「大規模開発でも動的言語は使い物になると思うよ」 につながるのかが、さっぱりワカラン。
クソコテuyが初めてまともなこと言った。 世界が滅びる兆しのようだ。
愛されてるな
心配しないでも、動的言語の問題点は関数型言語が克服したよ。 動的言語に近い簡潔さで型安全なプログラムが書ける。 動的言語:小規模書き捨てスクリプト 関数型言語:中規模少数精鋭 静的手続き型言語:大規模ドカタ開発 こんな感じで棲み分けされるよ。
91 :
uy :2012/05/23(水) 18:12:53.30
関数型の時代は来ないと思うよ 概念が中途半端
中途半端ってことは、何らかの軸の中間辺りに関数型が位置するって意味になるが その軸の両端には何の概念が来るんだ? 中途半端さが理由で流行らないってことは 中途半端でない概念をベースにした言語は流行ってるのか? ってここまで書いて気付いたがuyかよ
両端は、アマチュアの趣味と、プロのぼったくり
真ん中はアマチュアのぼったくりか。 やっかいだな。
うわぁ頭悪そう
彼らは人間ではない。また、動物でもない。 だが、その醜い身体の中には正義の血が隠されているのだ。
97 :
uy :2012/05/25(金) 00:17:48.59
OO < 関数型 << 俺様
↑クズ度の指標です
動的言語ってのは実行時に決めることが多いんだけど 本当に実行時じゃないと決まらないことって少ないんだよね。 実はコードジェネレータでコンパイル時に定義ファイルなどから コードを動的に生成するだけで十分ってことが多い。
100 :
uy :2012/05/25(金) 13:43:17.47
アプリ開発なんてほとんどがテンプレ化してるしね 普通にかいてればバグとかはいる箇所って全然少ない気がする バグが存在しないとわかってるコードを利用する分には、問題はなくて 動的言語で困るのは、自分でソースコードを大量に書かなきゃいけない時か それでも a = nil a.push 2 とかかいてて、こういうののせいで誰かリアルで死んだら 声高らかに動的言語は間違ってる!とか言われるから やっぱり型チェックは存在していないとまずい もしや動的言語からevalがいらないんじゃね evalさえなければコンパイラも作れる可能性は高い気がする
uyは空気読めない まで読んだ
102 :
デフォルトの名無しさん :2012/05/26(土) 01:08:10.32
MSとGoogleとMozillaが手を組んで、型指定出来るJS代替言語のプラグインをブラウザに仕込めば、それで解決だよな。
104 :
uy :2012/05/26(土) 11:36:28.40
jsいらね jsが重いんだよ、ブラウザは。
そんな中途半端なことしないでブラウザにCLR仕込んでくれよ
106 :
uy :2012/05/28(月) 00:44:40.23
つーかコンパイル済みのコードをページに組み込んで それ動作させればブラウザ側がHTMLパーサもjsパーサもいらなくなって超高速になるんじゃないの js高速化(笑)とかいいから、それやれよって思う
JavaApplet「ガタッ」 Silverlight「ガタッ」 Flash「スッ」
立ち上がる擬音の違いが木になります
NaCL「」
それってブラウザじゃなくラウンチャだろ。
HTML5って、要するにオープン規格のActiveXだよな。
俺とおまえが兄弟ってことならば、要するにそういうことになる。
プラグインなんて捨てて全部ブラウザでやっちまおうぜ ってことじゃね?
ラウンチャ
ようするに、jrubyで書けと?
>>115 JRubyもX
TypeSafeではない言語ではだめ。
優れたIDEなしに生産性の高い開発は語れない
は? 型安全て、どの程度の型安全の意味で言ってる? もしかしてダウンキャストがいくらでもできるザルザルな言語の信者が、 「型安全」(きりっ とか言ってるんじゃないのwwwwwwwwwww
C++系はもうダウンキャストやめられないだろう
>>117 ダウンキャストがいくらでも出来ることに問題はない。
ダウンキャストしても安全に動くならば問題ない。
所で動的型付け言語、あれダウンキャストの嵐だよね。
変数はすべて基底のObject型。だからどんな型でも入れられる。
そしてメソッド呼び出しの時はObject型から具体的な型にキャストして呼び出す。
やっていることはコレと同じ。
このスレだとObjective-Cってどっちになるんだ? JSXみたいな型付け言語->Javascriptへのコンパイラとかも
そもそもコンパイルなのか?
トランスレータだよな
>>119 > ダウンキャストしても安全に動くならば問題ない。
それってつまり型安全な言語じゃなくても良いってことだよな。
>>118 C++/C#/Javaは外部ライブラリが絡むような所以外
ダウンキャストなんて使わないよ
もしかして、外部ライブラリを積極的に使うと本体は動的で小規模になるのに対して 外部ライブラリを使わないと静的大規模開発になるのかな
> ダウンキャストしても安全に動くならば問題ない。 動的言語でも安全に動くならば問題ない、って言ってるのと全く同じなんだが。
積極的に使う外部ライブラリが枯れてなくて バグやバージョン管理に振り回されるなら テスト工数もへったくれもないな
でもSTLやboostに振り回されたくないなんて言ってたらテンプレートは普及しないよね
>>127 レガシーの部分を持ち出して何が言いたい?
>>123 > それってつまり型安全な言語じゃなくても良いってことだよな。
>>126 > 動的言語でも安全に動くならば問題ない、って言ってるのと全く同じなんだが。
ぜんぜん違うよ。
ダウンキャストは最後の手段として仕方なく用いるもの。
使わないですむなら使わないほうがいい。
動的言語は、常に最後の手段を用いているからダメダメ。
>>131 常にダウンキャストというのは人間がそう思ってるだけだ
(そもそも継承関係自体がないならアップもダウンもない)
そういう風に人間が自分で判断してよいという前提になれば動的言語は強い
アップキャスト
ぬるぽの代入はアップキャスト
スーパーキャスト ハイパーキャスト
>>132 > 常にダウンキャストというのは人間がそう思ってるだけだ
それが一番重要なんじゃないかw
コンピュータよりも人間主体で考えましょう。
面倒な事はコンピュータにやらせる。
面倒な事をやりたくないのも分かるが、一番ではないな やらないのが一番の目的というのは変じゃないか
だから、実行順を決める、なんて面倒なこともコンピュータにやらせればいい、 というのがHaskellやPrologなのに、なぜかJava厨はそっちに踏み込むことはできず、 必死に2ちゃんねるでRubyをdisるだけに終わる。
遅い
Java厨は動的言語使いには型安全性の重要さを説くくせに 関数型言語使いに型安全性の不備を指摘されると そんなに型安全じゃなくても良いとか言い出すから面白い
型安全性に不備などない
>>138 > だから、実行順を決める、なんて面倒なこともコンピュータにやらせればいい、
実行順を決めることに文句をつけてる人はいないと思うけど?
文句はコード的に静的に型が決まってるはずのに、
言語の都合で動的になってるような所の話。
(たとえば、obj.method() というコードを書いたら、実行せずとも、
このオブジェクトはmethod()を持っているはずなのです。)
>>140 型安全は重要だよ。だから型安全でないコードを
減らすべきだと説いている。
"「ほげ」言語のパラドックス"を思い出すな ほげ言語が持っていない、より高度な機能は ほげ言語プログラマには理解できない
>>143 Javaにはobject型のように
動的な型機能は付いているが、
動的言語には、静的な型機能がついてないね。
そうか、そういうことなんだね。
どこがパラドックスなのか
しーっ、カタカナ使って頭いいつもりなんだからw
聞いた事無いならぐぐれば良いのに
148 :
デフォルトの名無しさん :2012/06/06(水) 23:52:29.76
動的言語の問題点 1. パフォーマンスが悪い。モッサリ 2. 効率よくリファクタリングできない 3. 効率よくデバッグできない 4. 他の言語に変換できない(しにくい) 5. ソースコードの可読性が落ちる 6. パフォーマンスが悪いので使用用途が限られる。学習時間の無駄
○言語を使ってみろよ!って言っている奴が 実は△言語をかたくなに否定しているってやつか。
>>148 言語Aから言語Bへの変換が難しいケースとは
Bが持っていないAの機能を使ってコードが書かれていたとき。
だから異なるパラダイムの言語間での変換は難しいし、
一方でAの持つ機能がBのサブセットならA->Bの変換は容易だ。
もし「自分の使ってる言語は他言語に変換し易い」と感じるのならば、
その言語はおそらく機能的に劣ってる。
機械語最強ってことか
C++はC言語に変換しやすいというか、 実際昔は、C++はC言語に変換されていた。
副作用の塊でできたコードを 関数型言語に変換するのは難しいだろうね。 関数型言語は、手続き型言語に変換しやすだろう。 その言語はおそらく機能的に劣ってる。
>>153 変換されてたけど、簡単じゃないよ。
びよーんすっぽすっぽ先生が書いてるけど、cfrontという実装があるから
というのを「簡単に変換できる」と思うのは、よくある誤解。
>>154 の論理に従うと、あらゆる言語は機械語に変換できるから、
あらゆる言語は同じくらい劣っている、ということになるな。
>>155 じゃあお前は、何から何が簡単だと思うんだ?
日本語は、韓国語に変換するのが難しい なぜなら、韓国語は日本語にない機能を使って記述されるからである ゆえに、日本語は機能的に劣っている
>>155 Cでオブジェクト指向プログラミングができる人なら、C++ -> C は簡単。
>>157 よく韓国人に「日本語でおk」ってレスをされるw
>>158 例外は?RAIIは?テンプレートはどうすんの?
>>152 コンパイラが実装しやすい言語は機能が少ないってことだろ
>>145 理解できない機能はカウントされないから
「理解できない機能が多い」という事実を「機能が少ない」と認識してしまう
>>160 例外は戻り値(引数)を使う方法で機械的に変換可能だし、
RAIIは単に処理を割り込ませればいいだけ。
テンプレートはただのマクロにすぎない。
ある言語からある言語への変換の話は
元の言語が何かは全く関係なく、
変換後の言語が、手続き的に記述できる言語ならなんでもいい。
副作用が簡単に記述できない言語には変換しにくい。
Haskellだってモナドとdo記法使えば、副作用だって簡単に記述できるのに
もしかして、背景にあるものが理解できない=記述できない、とでも 思い込んでるのかな、このJava厨は。 だったら、自分がHotSpot VMの実装についてどれだけ理解しているか、 考えてみればいい。
Java厨って言葉が気に入ってるようですけど 今の話の流れはC++っすよw
>>157 一行目と三行目の間に論理の飛躍というか崩壊があるんだが?
>>167 157と同じ主張のプログラミング言語版が少し上にあるわけだが?
そいつに言えよ
>>150 の主張は
A言語がB言語に変換し易い ⇒ A言語は機能的に劣ってる。
A言語は機能的に劣っていない ⇒ A言語がB言語に変換しがたい。
正しく使うと
日本語は韓国語に変換しがたい。
なぜなら、日本語は機能的に劣っていないからである。
韓国ネタとかどうでもいい ネトウヨはニュー速にでもいけ
逆に韓国語も劣ってないことになるからおかしな話
互いに劣らない(優劣は付けられない)ではダメなのか。
「他の言語に変換できない(しにくい)(
>>148 )」と
「ある言語からある言語への変換の話は 元の言語が何かは全く関係なく、(
>>163 )」が
Java厨の頭の中では矛盾無く両立するわけ?
>>150 >だから異なるパラダイムの言語間での変換は難しいし、
これが正しいなら、
>もし「自分の使ってる言語は他言語に変換し易い」と感じるのならば、
>その言語はおそらく機能的に劣ってる。
じゃなくて
>その言語はおそらくパラダイムに大きな違いが無い
だろ?
同じオブジェクト指向パラダイムでも Java ⇒ Ruby は簡単 Ruby ⇒ Java は困難 なぜならクロージャもダックタイピングも無いJavaは機能的に劣ってるから RubyのところはSmalltalkでもPythonでも同じだよ
同じ機能を持つ処理を記述できるんじゃないのか?
>>175 機能は関係ないだろ
タイプセーフでコンパイラが型がわかるから別の言語に変換できるんだろ
機能が違ったら変換できないなんていう理論は、
特定のロジックをかけないプログラミングがあるといってるようなもんだ
意味がわからない。
>>177 おいおい、同じロジックが原理的に書けるなら
簡潔に書けるか冗長にしか書けないかの違いは無視できるってか?
>>178 入力文字数だけみて開発の生産性を語るバカがおおくて驚く。
高機能なIDEなしに、効率よく開発できるわけがないってのに
コードの短さ至上主義の宗教がRuby
>冗長にしか書けないかの違いは無視できるってか?
もっさりなのは無視できるってか?w
クロージャすらないゴミ言語で開発効率高いとかワロスwww みんなが簡単にクロージャ生成して メソッドの引数に渡したり戻り値で返したりしてるとき、 Java厨だけはしこしこインターフェース定義して 型書いてんでしょ?馬鹿じゃね?
>>180 JavaやC#の文句言うのは
まともな速度でうごくプログラムかけるようになってからにしろよな
Rubyでは一生無理だろうがw
クロージャーは、いちおうどちらにもある。 あれではダメというなら、処理系書くやつが悶絶しながら実装することになる
IDEといえばEclipseはバージョン上がるごとに 順調にゴミ化していってるな
動的言語はC/C++と組み合わせて適材適所で使うと 開発効率も実行効率も良いんだが、 これって複数の言語を使える事が最低条件だからなー。 単一言語しか使いこなせないボンクラにはJavaがお似合い。
>>175 > 同じオブジェクト指向パラダイムでも
>
> Java ⇒ Ruby は簡単
> Ruby ⇒ Java は困難
>
> なぜならクロージャもダックタイピングも無いJavaは機能的に劣ってるから
> RubyのところはSmalltalkでもPythonでも同じだよ
ダックタイピングなんてリフレクションで簡単に実装できる。
>>180 Javaにクロージャーがないと何が出来ないと思ってる?
無名クラスでできないことを5つあげてみよ。
大規模開発なら静的言語の圧勝。 小規模使い捨てスクリプトなら動的言語の圧勝。 これでいいじゃんか? 公平な結果だろ。
Ruby厨は、最高の言語だと思い込んでるからなw イテレータがRubyだけのものと思っている奴もいたww まつもと氏も各所でRubyは開発の効率がいいとか嘘ついてるから 初心者はかんたんにだまされてしまう
日本語化 地域化しにくい時点でゴミ以下
>>186 5つも上げる必要無いよ
「簡潔なコードが書けない」これがJava最大の欠点
Java厨はコードの簡潔さが重要でないかのように言うけど
本当に重要じゃなくて、無名クラスで問題ないなら
Java8でクロージャを入れようなんて議論してない
>>190 おまえがコードの短さしか見てないだけだろw
そんなに簡潔なコードがかけるのなら、
なぜ実行速度が速くできないんですかwww
裏で冗長なコードが走ってるから遅いんだろ
RubyはJavaの11分の一以下のスピードだ
静的な言語の足元にも及ばない。
PHPやPythonの半分以下の速度しかでないのはどうするんだ
intがオブジェクトだから遅いのかな
>>190 お前の言うことからはっきりしたのは2点
無名クラスはクロージャの代わりになる。
Java8で簡潔なコードが書けるようになる。
Javaで関数型言語のfoldを実装、使用するとどんな感じ? Pythonのreduce()やRubyのinject()でもいいけど 勿論あらゆる型に対して使えるようにジェネリクスは必須ね
無名クラスでクロージャの例 import 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()); } }); } }
うはww Javaウンコすぎるwww
f.func(i)はf(i)としてほしいが、Rubyでもf.call(i)だ つまり静的と動的の問題ではなくオブジェクトの問題だ
つ python
うん、やっぱクロージャ入れるべきだな…
型推論が無いからクロージャ(もどき)にまで グダグダと型を書く必要があって コンパイル時チェックまでしたあげくに 実行時型エラーで落ちるクソ言語Java
ぬるぽですね わかります
後で代入する変数にとりあえずnullを入れるわけですが これを止めるには時間の概念や代入の概念をガラガラポンしないといけないですね
概念は人間の頭の中にあると信じるなら言語を変える必要はないです でも人間を信用しないなら言語を変えるしかない
最新のJava7なら少し削れるのかな。 Ordering<String> byLengthOrdering = new Ordering<>() { public int compare(String left, String right) { return Ints.compare(left.length(), right.length()); } };
>>205-206 これぐらいの量なら充分小さといえるね。
しかし、書く人によってここまで
説明の量が違うとはw
>>209 > クロージャのところのコード量は
>>196 も
>>205 も変わらん。
うん。知ってる。
だからこそ短く書いてみせた。
これでJavaはコードが長いと勘違いしている人が
単に読んでないだけだってあぶり出されるw
あと、
>>196 は外部スコープの変数の参照(書き換えも含む)が
Javaの無名クラスで出来ると言いたいんじゃないかと。
クロージャの重要な特徴のひとつだし。
>>196 が長いのは
・メソッドfooの振舞いをポリモーフィズムで入れ替え可能
・クロージャは呼び出すたびに結果が違う(副作用有り)
・クロージャが外部スコープの変数を書き換え
と色々やってるからで、意外と他の言語で書いても長くなりそうだ。
副作用が在るから関数型でもすっきり書けないし。
逆に
>>205 >>206 は動的言語派が凄く喜びそうだ。
例えばPythonで同じコード書いたら凄く短い。
byLengthOrdering = lambda x,y: cmp(len(x), len(y))
だけど、
>>196 は代入があるからPythonのラムダじゃ(たぶん)書けない。
> それよりも
>>196 は型安全じゃなくてループ回数を増やすと
> 例外で落ちる。
wwwwwwww
長々と説明したのに「で?」と返された気分?
java厨もといC++系統厨だけどjavaのSAM Type用の構文糖衣くらい
java5くらいの時点で入れとけよって思うよ
ジェネリクス使用クラスを可変長引数にしたときのアレも
さっさとどうにかして欲しい
でも静的言語の方が気が楽
>>90 の静的手続き型言語:大規模ドカタ開発に同意だわ
経験浅い要員にJavaScriptとかやらせるとこっちが死ぬる
あのな、クロージャがある言語では
>>206 はもっと圧倒的に短く書けて、
sortBy ((.length).(compare.length)) xs
とか
sorted(xs, cmp=lambda x,y: cmp(len(x),len(y)))
のように使ってるわけよ
上のコードのクロージャのところに
>>206 のような冗長なコードを
ぶち込んだら可読性落ち過ぎだろ
高機能なIDEがあればカバーできるレベルの話じゃないわ
220 :
デフォルトの名無しさん :2012/06/09(土) 09:25:47.31
おまえらアホじゃないの?
Java8までクロージャの機能がないんだから、
コードの長短を比較するのはナンセンスだろ。
>>219 多少、短くかけても実行時に遅かったら意味がないだろ。
冗長とバカにしてるそのコードよりもスクリプト言語は遅い。
java8でSAM Type用の構文糖衣が導入されたら Collections.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() ); と書ける
呼び出し側はそれで良いけど、定義する側は相変わらず 異なる型のラムダ式毎にSAM Typeを定義する必要があるんでしょう?
a -> b -> c SingleAbstractSingleArgument< A, SingleAbstractSingleArgument< B, C > >
>>222 既存interfaceやjava.util.functionsで対応出来ないものはそうなる
ただの構文糖衣だし
>>222 > 異なる型のラムダ式毎にSAM Typeを定義する必要があるんでしょう?
今まで何種類の「異なる型のラムダ式」を書いたことがある?
ラムダ式ってのその用途から、引数の型は単純で
ライブラリとGenericsを使えば、すでに定義済みであることが多いよね。
そこ、気にするところじゃないよ。
ユーザ定義型不要論ワロタ
クロージャーは外にある変数にアクセスできるから 引数や戻り値はあんまり必要ないしね。 必要な場合っていうのは例えば、 Collections.sort(ls, ← これのこと。 コレクションが渡された時にそのコレクション内の項目ごとに クロージャーを呼び出すってときに、引数を伴ったクロージャが必要になる。 で、項目一つを引数に呼び出すとき(map等)は、クロージャの引数は一つ で、項目二つを引数に呼び出すとき(compare等)は、クロージャの引数は二つ 引数三つ、四つもどこかのライブラリで定義されていたと思うが忘れた。 型の違いはGenericsで吸収できるし、まあ要するに、 異なる型のラムダ式毎にSAM Typeを定義する必要があるということは 気にすることではないということ。
>>230 バカですか? genericsで数個に統一できます。
バカのみがJavaをダサいと言う。論破完了w
>>230 はネタで言ってるだけだろ〜
馬鹿って言ったら可哀想だよ。
本気で言っているとしたら、馬鹿だけどね。あはははは。
>>230 はGenericsを使って"アレ"なんだけどね
職業プログラマとしては
>>230 はアリだな
C++のテンプレートやC#のジェネリクスとは異なるJavaのジェネリクスで
コストに折り合いを付けるならこうなる
>>234 無理しなくていいよw
そんなこといってもJava使いには見えないからw
Java使いじゃなくて、
>>234 がそう思ってるだけだろw
馬鹿が自分定義のJavaはこうだって言ってるだけ。
誰も使ってないものを持ってきてもな。
それじゃJavaを貶められないよ。
いやいや、馬鹿すぎるのは
>>235 だろ
馬鹿過ぎて痛々しいレベルだわ
>>234 がコスト持ち出してフォロー入れてる時点で気付けよ
はいはい、自己フォロー乙 恥ずかしい奴だ
進化がとまっているJavaと比べるのは酷だ。 比べるならC#
俺の中ではJavaはJDK 1.0.2の時点でもう終わってた
・Javaのジェネリクスは型パラメータにプリミティブ型を指定できない
・オートボクシングによるプリミティブ型からオブジェクト型への変換は
コスト的に許容できないケースがある
という理由によって
>>230 の定義になってるわけだが
>>231 >>232 >>235 >>236 はプリミティブ型にもジェネリクスが使えると思ってるアホ
>>241 オートボクシングを使えばいい。
コストに関して言えば、オートボクシングを使ったとしても
動的言語よりも速い。
論破完了www
このスレで分かった事 ・Javaはヌルポあるし、それ以外でも実行時型エラーを簡単に起こせるよ! ・ラムダ式の糖衣構文はJava8まで待ってね!今はJava7だよ(ドカタ開発では未だにJava4の場合すら……) ・プログラマのレベルは底辺だよ!まともなプログラマはScala使ってるし! というわけで、静的型付け言語の比較するときにJavaを使うのは辞めましょう 弱い者いじめは良くない事ですよw
>>243 実行時にしかわからないエラーがあるのだから
当たり前の話。
実行時にしかわからないエラーってのは
対応に時間が掛かる。
だから静的に分かるようにし
減らすってのが重要なんだよ。
お前は論点がわかっていない。
245 :
234 :2012/06/09(土) 13:02:53.34
>>242 >オートボクシングを使ったとしても、動的言語よりも速い
Javaの中の話なのに完全に意味不明。
>>246 それはJavaは他の言語と比べて
速いのは当たり前ということか。
>>246 Javaが他と比べてダサいって話なんだから
Javaの中の話ではない。
よってオートボクシングを使えばぜんぜんダサくないし、
それでも他の動的言語よりも速い。
そういう話にしないと気が済まない?w スレタイ見ろよ。
ああ全てのレスがスレタイに沿ってると思ってるわけか。
658 名前:デフォルトの名無しさん[sage] 投稿日:2012/06/09(土) 14:30:03.83 実行前にわからないことをなくせというがね。 小さいスクリプトなんてのは実行前にわからない事だらけなんだ。 小さいから書き捨てもする。小さいからぱっと見ればすべてが分かる。 だからそんなのまで静的がどうとか言ったりはしない。 ただ大規模(何人もの人が何ヶ月もかかって作るもの)で動的言語はねーよ。 コードのほんの数行(全体の0.01%ぐらい?)を見せられて、 ここに変なオブジェクトが入る可能性はありますか? ここを変更するときに影響が及びそうな部分はどこですか? 聞かれてもすぐには答えられんでしょ。
動的言語で大規模開発してる人って居る?
開発者の人数が知りたいね。 ちょっとしたパッチ送る人いれないで、 それなりの時間を割いて開発してる人の数。
>>223 >>213 でも結構読みづらいんじゃないかと思ってたところをwww
とりあえずdoが{なのかな・・・?w(講義はいりません、自分で調べるからw)
なんか、他の言語のクロージャも見たくなってきたな。
>>213 と同じ、ローカル変数にクロージャ経由で何らかの数を足すプログラム。
関数型言語は、まあ適当にやる方向でw
Haskellだとこうなるのね・・・ なれない言語は辛い。
http://ideone.com/6qeYD
> とりあえずdoが{なのかな・・・?w(講義はいりません、自分で調べるからw) 先に調べてからかけ
>>256 うわぁ……www
Haskell理解できてないなら無理して書かなくていいぞ
FooのサブクラスBar,Bazが定義されてないが、Haskellでは部分型は駄目なんだっけ?
>>260 >>259 は次のような関係になってる
HaskellのFoo (data) <=> JavaのFoo (interface)
Haskellのbar,baz (関数) <=> JavaのBar,Baz (class)
これを一段持ち上げて
HaskellのFoo (型クラス) <=> JavaのFoo (interface)
HaskellのBaz,Bar (型) <=> JavaのBar,Baz (class)
とすることも出来るけど、この例だと必要無い
部分型を上手く使う例があるならやってみるよ
ていうか面白い例プリーズ
いや
> まあ、Fooクラス等のJavaの冗長な所まで無理に
>>196 を真似るなら
とあったのにそうなってなかったので聞いただけです
Pythonで挑戦してみたけど まともな方法じゃ無理だった
>>260 シグネチャが同一の関数を定義するのに何で二つも三つも型を定義するのか。
部分型は駄目っていうか部分型は不要。
おーすばらしー Javaじゃなければ静的型でも短く書けるのかー(棒読み
>>268 信じてない口ぶりみたいだけど、
Scalaとか見ると、本当に短く書けるよ。
っていうかJavaもJava8なら短く書けるわけで。
最初のバージョンで勝負するのが大規模開発であって 後で機能を増やしていいのであれば小規模でいい
272 :
uy :2012/06/10(日) 13:50:30.79
全然短くない件について
rubyだとこうだけど、
x=0
->n{x = n % 2 == 0 ? Object.new : Object.new }
>>267 よくそんなゴミ構文に耐えられるよね
Scalaや、ましてJava8(笑)で短いと言ってる連中と LL使ってる連中で議論になるわけ無い件について
>>273 でもさ、文字数が半分になっているからといって
大規模アプリを半分の時間とコストでやれますか?と
聞いたらNOっていうだろ?w
>>274 その前に、スクリプト言語はパフォーマンスが悪くて却下される
その前に、パフォーマンスが問われるようなシビアなシステム作らせてもらえないから大丈夫。
277 :
uy :2012/06/10(日) 17:48:53.06
大規模開発で動的言語の問題に本当の意味で直面した奴とか 本当はそんなにいないだろ 聞き捨ての知識で知ったかぶって「あ〜そういう問題あるのか〜」ってなって適当に叩いてるだけ 本当にその問題に直面して、それを知っていれば解決策を考える議論にシフトするはずだから
>大規模開発で動的言語の問題に本当の意味で直面した奴とか >本当はそんなにいないだろ そうだろうね。だって、選択肢に入ってこないもん。
279 :
uy :2012/06/10(日) 18:54:35.35
そう、そして直面したらそのプロジェクトは破綻しかけるんだ そんな大変な目にそこらの名無しが会っていると思えない 俺はいま破綻しかけてる ゆえに俺さまのゲーム開発はプログラム面が一度ストップしてる 次の開発では 直面しないように最初から策を講じるか 静的言語でやるかの2択 このスレタイ。テスト工数が増大とは、ずいぶん控えめに書いたものだと思う 激増の間違いだろ、で結局最後は完全なテストなどしきれず「多分動くんじゃね?」といって俺様はリリースするんだろう
最近はスクリプト言語でも関数型言語の真似したいのか mapだのinjectだの高階関数だの使いまくってるけど そんなの動的言語でやったら大規模になったとき破綻するに決まってる
Railsに限らず、決められたとおりに作れば楽だけれども、 それを超えると急に難しくなる系は受託開発に向いてないと思う
最近の若者にはLispも知らずにでかい口を叩くのが流行なのか?
老人が想像する「大規模」の規模の小ささは異常
Lisp は研究だけでやってろ。あとで構築し直す破目になる。
時代はProlog
Prologってどーやってテストするんだ?
Adaが最強だろ Ada厨が本気になったら世界が終わる
>>272 があんまりなので改めて
>>196 をrubyで。
def bar(n); proc{n + 1} end
def baz(n); proc{n * 2} end
def run(&f); (0..9).each{ |i| f[i] } end
x = bar(0)
run{ |n| p x[]; x = n % 2 == 0 ? bar(x[]) : baz(x[]) }
型安全性のためのコードが追加で増えてるだけで 本質的なコード量は大差ないね。
>>280 高階関数の乱用が大規模開発に向かないのは静的動的関係無いと思うな
イテレータ的機能は逆に大規模開発だろうと積極的に使っていくべき
>>292 だって変なコード入れられるよね?
実行しないとエラーがわかないよね?
数行程度のコードならいいけど、
こんなコード、アプリからすれば
全体の全体の0.01%ぐらいのコードだよ?
294 :
uy :2012/06/11(月) 02:56:38.33
>>280 そこは破綻する原因じゃないんだけど
もしかしてmapやinject使えない人ですか
破綻する原因は
>>293 で言ってることの積み重ね
どんな優秀なuyでも100000個もメソッドかけば1箇所くらいはタイプミスとかしてる可能性がある
それは人よって違う
自身の書いてるソースコードに、バグの混入の可能性が低い奴じゃないと動的言語で大規模は無理
動いてたはずのコードのから、いきなりバグが見つかったとき
そのバグをチェックする技法が存在しないことを知る
そしてそれは静的言語では解決できる問題だったりする
「本当にこれリリースして大丈夫なの?」そんな不安ばかりがソースコードとともに増え続けるのが動的言語
295 :
uy :2012/06/11(月) 03:31:12.83
Tracemonkeyの発想を借りる事になるけど、 最初は型情報をソースコード中に書いてなくても 一度でも実行すれば少なくともメソッドの引数の型くらいは分かるわけだし 型情報を実行してからメタすればいいんじゃねとか思う 最初にメタされた型以外が渡されたら警告でも出す 型が分かってるなら部分的にネイティブコンパイルも可能になる 型安全性を高めたい時のみ .rbのソースコード本体とは別に .rb_neitive とかいう型情報のファイルをおいて .rb_neitiveの型情報を見ながら.rbを実行させていく .rb_neitiveはスクリプト本体をテスト走行させた時に実行したメソッドに渡された型などを集積して生成する そしてネイティブコンパイル出来るメソッドは引数型固定してネイティブにしてしまう これによって失うものは def func a end func 1 func "test" とかいう最初と2回目以降で違う型の引数を(基本的に)渡してはいけなくなる事 もし渡された場合は、そこでエラーとして扱って実行をとめるか、ネイティブではなくインタプリタ側のコードを実行するか 得られるものは、 .rb_neitiveに集積できたメソッドに関してだけは速度と型安全性が高まる事
296 :
uy :2012/06/11(月) 03:49:52.32
他に動的言語で問題になるのは n = 1 n = [] if rand(2)==0 とかだろけど、こういうのもやっぱソースファイルと行数をメモって 既存の型から変更されたらその都度ログ出力させるしかないと思う やはり出来るとはいっても、基本的にあとから変数の型を変えるという処理はやるべきじゃないんだろ 特に一番どうにかしたほうがいいのは obj.foo とかやったときにobjがなんらかの要因によって型がnilになってるときにでるエラーだ 一度nil以外のオブジェクトが格納された変数が、再びnilになったらなんらかのエラーをだすべき つうか、ユーザーが扱えるnilと言語処理系側で扱うnilは区別しなくちゃダメだろ ユーザーがnilの代わりにfalseを扱うのでもいいけどさぁ 一度nil以外が格納されたオブジェクトに、falseの代入は許しても、次にnilが格納されたら何かあっても良いと思うよ そもそも obj というオブジェクトを生成したのちに if obj という式において偽という結果が欲しいのであれば obj = nil とするのではなく obj.vardelete とかやって変数を消滅させて それ以降にobj.foo とかいう記述があったらエラーくらいだすべき
>>295 君が考えるような馬鹿な手法よりも
HM型推論でも実装して推論できないときにワーニングでも出したほうが1000000倍有効
>>296 ぬるぽは静的動的関係ない
>>296 型はすぐ横に書いてあるからこそ可読性が高くなる。
別の場所に型の情報を保存するとかナンセンス
ぐだぐだ毎日、長文を書く時間あったら、
C#4.0とVS2012でGUIアプリでも作ってみろ
実行時パフォーマンスと開発生産性のバランスの良さがわかる。
いやいや、型は省略しておいて(またはIDEで隠しておいて) カーソル置いたとき等に何時でも見れるっていうのが 一番可読性高い
300 :
uy :2012/06/11(月) 08:55:47.18
>>298 可読性の話はしてない
グダグダ他人の意見を否定してるくらいなら代案を出してみろよバカ
>>297 TraceMonkeyでググレカス
動的言語使ったことねーだろお前
obj =nil
obj.foo
301 :
uy :2012/06/11(月) 09:22:52.78
思ったけど
>>295 は実際、.rb_nativeっつうか、開発時にIDEが組み込んでいるべき機能か
開発中にIDEが.rb_naitiveファイルを見ながら.rbの動きを監視して
実際に公開するときは、.rbファイルだけで良い
それでバグの何割かは発見できる
ただRubyの自由度を僅かに下げる
本質的な解決になってない
やっぱアレか、あまり変数宣言をしないようにコード書くしかないな
動的言語が病院の医療機器に使われてますとかなったら、早めにそれかいたプログラマを血祭りにすべきだが
一体mrubyがどこで使われるのか興味がある
企業とかよりもこういうのは先に工学系の大学生が何か作るんだろうな
はーーー大学生は楽しそうでいいな
302 :
uy :2012/06/11(月) 09:29:06.60
静的言語で書こうとプログラムにバグは入る たとえば、アルゴリズム的なバグとかは動的静的関係ない 動的言語で書いていると、実はそこら辺のバグ混入率は 静的言語よりも減っていると思うが、あまり言及されていない アルゴリズムの思考に型は不必要だから 違う種類のバグが入るようになるに過ぎない しかし、動的言語が叩かれる要因は「頑張れば」出来るだろっていう事が、 実装されていない事によるストレスだろう 基本的にネット上に存在する動的言語リソースは静的言語を下回るからしょうがない 実際、静的だろうと動的だろうと、どちらも進んでいけば同じ右から中央に近づくか、左から中央に近づくかの差でしかない ただ俺は、左から(動的)から中央に近づいたほうが楽だよって言ってる 人は苦労をしたがる生き物だから仕方ないか バカは効率を理解しない のではなく、わざわざ効率の悪いほうへ行く それによってなんらかの精神的バランスを取っちゃってるんだから、周りがなに言ってもだめだ
>>291 お前そういうことは、
>>196 みたいにまともに動きやしないコードでも
コンパイル時点でエラーをきちんと出せるようになってから言えと。
動的言語で型宣言なんて動的言語を使う意味ない。
部分的な型宣言はあってもいいと思うよ それができると動的、静的のカテゴリーがつながった言語が誕生する
それVBやんけ
>>300 > 一度でも実行すれば少なくともメソッドの引数の型くらいは分かるわけだし
> 型情報を実行してからメタすればいいんじゃねとか思う
これじゃテストで見つかるような型エラーしか見つからないだろう
まったく型安全性が向上していない
最適化と型検査の区別がつかないなんて、君は本当に馬鹿だな
> 動的言語使ったことねーだろお前
> obj =nil
> obj.foo
Object x = null;
x.toString();
308 :
uy :2012/06/11(月) 12:54:23.05
本当にズレたバカだな
レスするんだったらまともに全文読んで意味を理解してからレスしろよ
>それでバグの何割かは発見できる
>思ったけど
>>295 は実際、.rb_nativeっつうか、開発時にIDEが組み込んでいるべき機能か
309 :
uy :2012/06/11(月) 13:00:14.70
C#、C++の言語仕様を改めてみてみると、 静的言語で開発効率が〜とか、やはりネタだと思ってしまった ネタじゃないとするならば、よほど何も知らずに語っているとしか考えられない 動的言語と静的言語を見比べて何も思わないのであれば、 もう いいんじゃねえかな まともな判断できない常時酔っ払いみたいな奴に一々教えてやるほど優しくないよ俺 それが効率良いと思ってるなら勝手に使ってろw 俺は一段上のフィールドの問題の解決に勤しむから、LL論外未経験の初心者はレスしてこないでよい しつこいようだが、もう一度いう Tracemonkey でググレサル
君はHindley-Milner型推論でググらなくていいよ どうせ理解できないから 無学低能は哀れだね
>>302 > 動的言語で書いていると、実はそこら辺のバグ混入率は
> 静的言語よりも減っていると思うが、
データがないならそれはお前の妄想。
uyは性能を考慮しないバカだし、議論にならないな 可読性もまったく気にしないようだしただのアホだわ 言語仕様ながめたくらいでわかった気になってるしw
313 :
uy :2012/06/11(月) 13:17:19.28
社畜からしてみれば、動的言語が使いたくなったって 仕事では静的言語で開発するしか道がないから必死になるのもわかる そもそも、動的言語の方が効率が出る!とかいうことを認識してしまったら 今日、今やってるこのプログラミングとはなんなのだろうか、と考えてはじめちゃうんだろうからな まぁ無様で可愛そうな人たちだよね そうやって、気づかないように気づかないようにやっていくしかない ああ いいよ やってろ そして、せいぜい「同意者」の多いこの社畜だらけの低レベルbbsで騒いで 名無しからの同意を得て安心感に浸れ ただ、俺を巻き込むな 罪知らぬ夢の壁に僅かに爪を立てよ
でもね。Linuxとか静的言語で作られてるからね。
315 :
uy :2012/06/11(月) 13:23:45.36
だーから、 <<初心者>>でお前らは、 俺に 二度と話かけんなよ Linuxが静的言語で作られているからなんだ? お前らの人生にそれが何か関係あるのか? 関係ねーものばかり見てんじゃねえよ お前らのような論外初心者は、俺にとっても関係ない、 以上だ
たいていの有名なアプリは 静的言語で作られてるね。 開発しやすいからだろうね。
動的言語が効率が悪いのは 修正するときなんだ。 短いコードをさくっと書くときは 修正はほとんどしないから楽だろうね。 でも大規模開発だとそうはいかない。 一回リリースしてそれで終わりじゃないから。 最初に作った人と違う人が修正しないといけないことも多い。 そういったときにすぐに影響範囲が調べられる静的言語が強い。
ちょいと仕事の効率上げる(俺様)ツールは動的言語で ちゃんとしたアプリは静的言語で
>>315 型を宣言する必要性も理解できず、やりたくないといっている奴が
なんでダラダラと長文書いてるのwwww
320 :
uy :2012/06/11(月) 13:40:19.43
え。 >二度と話かけんなよ
型を省略したからって 型がないわけじゃないからね。 例えば。コードの中で obj.foo()、obj.bar(123) なんてコードを書いていれば このobjに入るのは、fooと数値引数を取るbarがあるものだけ。 つまり、fooとbarを持った型であるということ あとは、コメントを書いておけばわかりやすいよね。 このコードでobjのfooとbarを使いますって 書いてなければ何を使っているのか目で追って調べなきゃならない。 これが動的言語の効率の悪さ。
>>320 可哀想に。お前の要求は
ことごとく破棄されるw
323 :
uy :2012/06/11(月) 13:45:01.02
322は俺に嫌われる事にも気づけずに馴れ合いしようとしてくる 気持ち悪い 動的言語の問題点、何も考えられない奴はいいから静的言語使ってろ もう一生使わなくていいから
uyさんは寂しがり屋なツンデレだからな
>>323 お前は道端のアリが
俺のことをなんて思っているのか
いちいち気にするのかい?
326 :
uy :2012/06/11(月) 13:48:35.80
せっかく良レスかいてんのに埋もれてるからメモあげ
> どんな優秀なuyでも100000個もメソッドかけば1箇所くらいはタイプミスとかしてる可能性がある
> それは人よって違う
> 自身の書いてるソースコードに、バグの混入の可能性が低い奴じゃないと動的言語で大規模は無理
> 動いてたはずのコードのから、いきなりバグが見つかったとき
> そのバグをチェックする技法が存在しないことを知る
> そしてそれは静的言語では解決できる問題だったりする
> 「本当にこれリリースして大丈夫なの?」そんな不安ばかりがソースコードとともに増え続けるのが動的言語
>>294 ,
>>295 ,
>>296 さて、この問題をどうするか
道端のアリでもおもちゃになる。 でもそいつが俺のことをどう思おうが気にもしない。
>>326 > さて、この問題をどうするか
余計に時間をかけるしか無いな。
329 :
uy :2012/06/11(月) 14:01:51.75
ひとつは、外部ツールによって型チェックをどうにか行わせる技法 もうひとつは、これかなり別の方向で大変だけど 雛形つうか、特定のメソッド郡を持つクラスをまず定義し、 アルゴリズムの全てをそのクラスの組み合わせのみによって記述する それによって、全てのクラスとその全てのメソッドをテストが可能になるようにさせる これをやろうとすると、動的でも静的でもなく違うものになる このプログラミングの条件としては、 ・ソースコード中に条件分岐を入れない事 っていうありえない制約を作る 条件分岐なんてあるからテストが上手くいかない つまり、HTML
短いプログラムだと動的言語のほうが効率がいいが 大規模になるとその効率の良さが目立たなくなる。 (逆に型がないから修正の効率の悪さが目立ってくる) その理由をわかりやすく説明する。 例えば文字列の中に含まれている数値を配列で取得する処理が必要だとする。 正規表現がある言語ならぱぱっとかけるが、 ない言語では長いコードが必要になる。 だけどこれが大規模開発だとコードの圧縮が可能になる。 つまり長いコードをまとめて関数にしておけば、 nums = getnums(str) 正規表現がなくても、たったこれだけのコードで処理がかけるようになる。 さらに意図が明確で、毎回正規表現をコピペする必要もない。 大規模開発の時間があれば、ライブラリを作ったり使ったりすることで、効率の差が簡単に埋まる。
>>329 あと何レスあれば
そこまでやるのなら、最初から静的言語を使ったほうが良い
という答えにたどり着きますか?
332 :
uy :2012/06/11(月) 14:10:07.16
ソースコード中に制御構文なしでどこまでのプログラムが作れるか? という方向性に進んでも良いと思ってる でもまだその時期じゃないんだろうな ならば、動的言語をいかに使えるものにさせようかというよりも、 プログラミングの概念に制御構文が不必要という事実に世界を気づかせ その方向に導かせるための最短ルートの提供が最も好ましい
至高のノードプログラミングで自分の開発にお入りなさい
>>329 まさに動的言語の欠点だね。
変数の中身がAという型と決まっていれば、
Aという型の状態のみを考慮すればいい。
しかし変数の中身が、Aの場合もあるし
Bの場合もあるし、Aにちょっと手を加えたものの場合もある
なんてことになると、いろんな状態を考慮しなければならない。
要するに状態の数、条件分岐の数だよ。
動的言語だと、オブジェクトの取りうる
状態が多いからテストも大変になる。
335 :
uy :2012/06/11(月) 14:14:39.91
>>330 一理ある
>>333 それは2世代先、今話してるのは1世代先
空欄となっていた1世代先の技術が今埋まった
336 :
uy :2012/06/11(月) 14:18:53.10
テストも大変になる(キリッ) じゃなくて テストできねーんだよカス 実行させて正しく動くかどうか確かめる目デバッグしか、動的言語は出来ない 至極単純
静的言語でも動的言語でも テストコードを書いてテストは出来る。 まあ、動的言語の方だと修正の時の 効率が悪いのはいつものことだが。
338 :
uy :2012/06/11(月) 14:23:31.17
しかしRubyになれたら今更静的言語とかかなり無理なんだろう
Redmineに、金にもならないというのに毎日必死に様々なレポートが来るあたりに
もうあの頃に戻りたくないみたいな必死さを感じる
>>329 1、外部ツールによって型チェックをどうにか行わせる技法
2、ソースコード中に条件分岐を入れない、つまりHTML化
3、3つ目
「大規模プログラムを作らない」
プログラムは多機能なものであろうと、どうにかして「小規模」にさせ
動的言語でも管理できるソースコードサイズに抑える。
uyがuyにレスしてんなw 事故レス化www
340 :
uy :2012/06/11(月) 14:29:22.92
個人的に、100%ソースコード全体を掌握できるのは 俺の場合2000行だと思う 空行とか、冗長なアルゴリズム抜いた2000行な 変数名やその他、全ての処理を覚えきれるのが俺はそのくらい ちょっと多めに見積もっても1万行 これ以上はきつい。共通処理は抜き出して、ライブラリ化して欲しい 現時点、この範囲内で何を作れるか、だろう Windowsは作れない 人はおそらく今の20歳よりも、10年後の20歳の方が頭が良い。 人間のスペックが高くなれば動的言語でも大規模普通に書けるようになるはずだから、 こっち側が伸びるのは時間の問題という気もしなくもない
スペックが高くなれば静的な関数型を使うので動的言語なんて使いません
342 :
uy :2012/06/11(月) 14:35:11.36
結局は、俺がITを進化させなくても、今後100年間の間に 俺以外の誰かがITを進化させるだろうよ 結局、俺自身がどうしても命や生涯を削ってこのITっつう分野に 金にもならない無償の努力を注ぎ込む価値はないものだと思う 勝手にやっててくださいよ 人は何かやってないとダメだ 「毎日ちょっとずつ前進してる、成長してる」っていう、その思い込みみたいな、高揚感が大事 それを得る為に、今2012年は ITという分野をオモチャにして、「成長感」を感じて、 生に意味を見出そうとしてるだけにも思える なればこそ、あまり速い速度でゲームクリアさせる意味も、実際のところないのかもしれない つうか、それよりもふと思うのは、科学が発展した事によって 戦争兵器開発などで人を殺してきた数と、医療機器などの開発で人を生かしてきた数、はたしてどちらが多いのであろうか 俺のやっている事はめぐりめぐって、誰かを殺すことになる可能性も考慮したい
老兵(uy)さっさと消えてくれ
344 :
uy :2012/06/11(月) 14:45:44.34
>>341 残念ながら関数型はありえない 夢から覚めとけ
無償のボランティアで俺が何かITの世界へ貢献する価値をやはり見出せない
結局は遊び
効率の悪い事やってる奴を見つけては晒しあげる遊び
俺はなんと性格の悪い事か
俺はただ、自分の力で何か世の中の一部が動いていく様子を見ているのが面白いから
リソースをばら撒いたりするだけで、社会貢献などは考えていない
駄文書きながらでも、3つも案がでただけ、よしとする
1、外部ツールによって型チェックをどうにか行わせる技法
2、ソースコード中に制御構文を入れない、つまりHTML化
3、大規模プログラムを作らない
uy君は趣味の範疇のたいしたことないプログラムしか書いたことがない
uyは就職できてないんだろ はよ働け
348 :
uy :2012/06/12(火) 04:18:36.80
悪いけどマジで貢献しない 世の中に金儲けの手段なんて良い事から悪い事までいくらでもあると思うよ ある奴が「 金儲けをする事は悪い事ではない 」 と言った、 俺はそいつのその意見を否定する
鬱転
350 :
デフォルトの名無しさん :2012/06/12(火) 11:23:54.71
uyははよ働け まじでゴミカスになるぞ
352 :
uy :2012/06/13(水) 05:01:20.79
俺はニートの気持ちを知っている 社会にでても、ニートをネット上で叩くことはないだろう マジレスするとそんなに長生きするつもりもないし したくもないし できるとも思っていないからやりたい事だけやって生きるのさ
ようするにやりたいことがないんだなw
時間があるようだから、 オセロの起こり得るコマ配置を数えろよ rubyとやらで
355 :
uy :2012/06/13(水) 05:14:48.05
356 :
uy :2012/06/13(水) 05:25:48.11
Goとか見てると、確かに既存の言語よりはよくなってるんだけど また言語構文を1から覚えないと扱えないんだよな 基礎的なif、forの扱いは変わらないだろうけど、 if,forだけ使えたってそれはC言語レベルのプログラミングが出来るってだけで、全然言語扱えていないし 覚えることが増える原因はソースコード内に型宣言があるからだと思う 型のある言語ってやっぱダメじゃね つうかね、一度決めた決まりごとを「こうしたほうがいい(キリッ」とかって変えていくなら天下をとれって話 「こうしたほうがいい(キリッ」とかいってObjectve-CやScalaやGoみたいに、今まで言語とは違ったシンタックスでやられると 迷惑でしかないんだよ { } このブロック括弧が [ ] とか | | や "" だったり 文字リテラルが $test$ .aaaa. とかで表現する言語でてきたら、発狂するだろって話 さっさと統一しろと それが出来ないならrubyくらいにリファレンス読まなくてもなんとなく言語仕様が読み取れるような言語設計で言語作れと思う
どんだけオセロ好きなんだよ!
rubyのどこがなんとなく言語仕様が分かるんだよ。 ほぼ全てが「rubyならこう書けるんです。分かりやすいでしょう?」とか、はてな民がほざいて 馬鹿が「うわールビーは凄いなー。全く気付かなかったけど、言われてみれば分かりやすい」とか追従する、 驚き最大化の原則に基づいてるだろ。
はぁ? たいていの言語で、エキスパートの書くコードはそんなもんだろ。 だらだらと書いたコードを、わかりやすいと勘違いして信仰してる奴等については知らんが。
Rubyが難しいとか、素で言ってるならよほどだろ 意図的にアンチし続けてもそろそろ他の動的言語と歴然な差はついてきてるが
361 :
uy :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) { }
362 :
uy :2012/06/13(水) 07:47:52.02
そこへきてrubyはこれ、 def func a , b end 適当に感でかいたって動くわ
c void f(const char* s){ } c++ void f(const std::string& s){ } java void f(String s){ } C# void f(String s){ }
>>362 > 適当に感でかいたって動くわ
そのテキトー感がリスクなんだよな。
結局、ハイリスクハイリターンを取るかローリスクローリターンを取るかの考え方の違いじゃね?
365 :
uy :2012/06/13(水) 08:12:01.77
>>364 言ってる事が曖昧すぎる
「リスク」は何をさしてるか言ってみろ
func c(a, b string , c , d int) {
fmt.Println(a,b,c,d)
}
どうせGOはほうっといても勝つから、何年後かにはこういう形のメソッドの型宣言が一般的になってるよ
型がある時点でどんどん変わっていく
ついてくる?
>>358 ゴルファーは確かに多いし変なコード書く輩も多いけど
言語そのものはそこまでヘンテコでもないよ
>>365 どうでもいいけどすごくobject pascalっぽい文法
368 :
uy :2012/06/13(水) 13:37:39.11
どうでもいい
そのカンで書いて誤変換とか馬鹿だな 感じゃなくて、勘だろハゲ
Go + Ruby = Goruby 統合しちまえよ
適当に勘で書くアホを排除することができる すばらしい
372 :
uy :2012/06/13(水) 14:15:13.67
お前らの頭が悪すぎて話にならない じゃあ一生静的言語を使っていろって 二度と動的言語触らなくていいから
最新流行の捨て台詞はこうだ。すぐ使えるようにちゃんと練習しておけ 「いいんですか、俺は必要悪ですよ?」
長生きするつもりは、ってもう25にもなるのになぁw ノンビリしとらんでもうちょっと生き急げよ。
375 :
デフォルトの名無しさん :2012/06/13(水) 15:09:45.22
結局動的言語のほうが効率でるのは揺るがない事実だよ 仕事で言語選択権の無いドカタにはあまり関係の無い話 これからも静的言語でがんばってくださいよ…
376 :
uy :2012/06/13(水) 15:44:54.87
GoRubyってゴルフ用のrubyじゃん みちゃならんものを見た気がするこわ
まだ完成してないのかよ
動的言語的処理を静的言語で処理させれば問題解決。
LISPコンパイラの出番か
使えば使う程にRubyって駄目だなと痛感することになる。 Rubyを学習し始めた頃は誰でもRubyは素晴しいと思うのだが、 数年も使えばそのどうしようもない互換性のなさにウンザリする。 1.4時代のコードが1.6になった途端に互換性がなくなり動かなくなることはあったが、 1.6→1.8ではそれが顕著になり、 1.9など何のエラーも出さずに前のコードが動く方が珍しいほど それどころか1.9に行かずREEが海外ではデファクトになりつつある現状、 そして始まるPlain RubyとREEの方言問題
381 :
uy :2012/06/13(水) 17:00:14.02
だから、一生静的言語使ってればいいじゃん Rubyを叩いて変わりにPython使ってますみたいな奴ならまだわかるけど Rubyを叩いてC#使ってます!!! とかお話にならない なんでそんなレベルでレスできるのか神経を疑ってしまうな 俺は未解決問題について思考をまとめているだけなわけで 有用レスを返せないのであればお前たちのレスはただのゴミでしかない 邪魔だ失せろ
ゴミuy消えろ
>>381 パフォーマンス考えないバカはお話にならない
Rubyはもっさりで用途限定
こんなクソ言語はおぼえるだけ時間の無駄
Rubyは宗教団体だから、パフォーマンスの話題はタブーなんだろうな
モッサリ言語のくせに、エレガントだの自画自賛して笑える
>>380 MRIがひどすぎるから、他のRubyがでてきてるのか。
後方互換性の問題は同意。
バージョンあげるとすぐ動かなくなるから、きわめて開発生産性が低い
uyはたいしたプログラムも書けないクズだから言っても無駄
386 :
uy :2012/06/14(木) 05:05:36.64
だから、一生静的言語使ってればいいじゃん Rubyを叩いて変わりにPython使ってますみたいな奴ならまだわかるけど Rubyを叩いてC#使ってます!!! とかお話にならない なんでそんなレベルでレスできるのか神経を疑ってしまうな 俺は未解決問題について思考をまとめているだけなわけで 有用レスを返せないのであればお前たちのレスはただのゴミでしかない 邪魔だ失せろ 静的言語よりも開発効率のでる動的言語から、どうやって 静的言語よりも時間が長くなってしまう可能性のある「デバッグ時間」を削減するかって部分の話なのに 話について来れないならお前たちは邪魔すぎる ろくな思考アイディアをだしてこないゴミであれば こいつらの使用目的も薄くなったか
387 :
uy :2012/06/14(木) 05:20:29.45
ゴミはただのゴミでしかない ゴミに対し何かを教えてやるつもりもない ゴミが効率の悪いゴミグラミングをしていても 俺は教えてやらない 勝手にやってろ 以上
初心者スレで教えてもらう一方です、とw
>>386 いつまで頭の中が静的、動的の2分類なんだ?
ルーピー言語の狂信者はやっぱりアホだなw
強く型付けされた言語+型推論、が最強なのは明らかだろ
開発の効率、性能、無駄な記述の排除、これ全部満たすのはこれしかない。
C#は型推論も関数型の要素もありかなり現代的
やっと型付けされた言語の重要性に気づいたかとおもいきやGoかよ
いまどきGenericsもない言語とか終わってんだろww
Python? Rubyよりましだがどっちもモッサリだからどうでもいいな
どんぐりの背比べ
Ruby Pythonは目糞鼻糞
Java C#は目糞鼻糞
>>389 で、こいつは自分がHaskellを理解できないルーピーだということには、
いつ落とし前をつけるのかねwwwwwwwww
393 :
uy :2012/06/14(木) 09:33:15.40
だーから、 静的言語一生やってろよゴミ Haskellってモナド(笑)とかいうゴミカス概念の元でプログラミングしてるあれでしょ 面白いことやるよね 「ぼくのかんがえたモナド(笑)」の上でプログラム組ませるとかさ・・・ Haskellって本当にEsoteric programming languageなんだなって思った バカしか使わない 関数型言語はLisp以外はゴミ 良く覚えておけゴミ
394 :
uy :2012/06/14(木) 10:02:43.63
何度もかいたけど rubyをディスってる奴、Python使ってるんだよね? またはLispやPerlという選択肢もあるにはあるか? rubyディスってC#やJAVA使ってます!! とかマジで面白すぎなんだけど じゃあ日ごろのPC操作やプログラミング上でたまに必要になるバッチ処理は何言語でかいてるっていうんだよ 本気でC#やJAVAで書いてるわけはないと思うから やっぱ手動でやっちゃうのかな rubyやPythonや動的言語なんていらない!C#、JAVAあれば十分! 静的言語でも効率がでる! とかいう意見、これ絶対に議論で勝てるわけがないのにw よほど頭が知恵が浅いんだろうか・・・ いくら俺がふざけたコテだからって 俺と逆説唱えるために動的言語が嫌いになってをこれから一生動的言語を触らずに プログラミングやっていくとか哀れすぎる まだ気づかないのか
395 :
uy :2012/06/14(木) 10:08:26.50
つうか教えてやらないよ 情弱のゴミのくせに態度が悪すぎる お前らゴミは人に教わる態度ではないよね 苦しめ
>たまに必要になるバッチ処理は何言語で スレタイ「動的言語の問題点、大規模開発でテスト工数が増大」
>>394 C#は汎用だし小さなプログラムにも使えるだろ
後方互換性に配慮しないルーピー言語で書くと、バージョンあげたら
すぐに動かなくなるからトータルで見ると生産性が低い
小規模のプログラムはシェルのコマンドの一つになるだけだよ 動的言語のライブラリを作っているようなものだ
1.4から使い続けてるRuby使いだけど uyだけはこの板からとっとと出てって欲しい Rubyの良さも悪さも何も解っちゃいない
いや、解ってないだけならいいが、自分のために周りを邪魔扱いなのが問題 ここはお前の私物じゃねえんだよと
uy君はアレだなぁ
動的言語の問題点、宗教戦争に巻き込まれる 動的言語の問題点、uyが現れる
動的言語好きな連中がHaskellやモナドを嫌うのは分かる。 コンテクストを引き回す = 型でコンテクストを強制だから 動的言語好きにはそこが窮屈なんだろう。 俺だって適当に書散らすときはPythonの方が楽だ。 良く分からないのは静的言語好きなのに嫌う連中。 静的型でバグ減らせる方が良いんじゃないのか?
>良く分からないのは静的言語好きなのに嫌う連中 tiobeでの上位はC,Java,C++,Objective-C,C# ×静的言語好き ○C系列言語好き
405 :
デフォルトの名無しさん :2012/06/14(木) 14:52:27.21
>>404 多くの開発者が移行しやすいようにsyntaxを似せて
あるだけであって、内部のアーキテクチャはまったく違う。
C系列とひとくくりにしないように。
syntaxの話や
>>403 俺はこのスレでは動的側だけど、型推論のある言語は否定しないよ
必要なところだけ指定すればいいからね
全部手で指定するタイプが嫌なだけ
静と動を兼ね備えたVB.NETが最強ということか。
ブラック企業が持つと逆に頭がおかしくなって死ぬ
意味論?それって食べられるの、みたいな奴が世の中多いから、 シンタックスがCっぽければなんだってC系列、って言って騙せるんだよw で、世の中でそうであったほうが儲かる、って奴がいるから、変わらない。
ちょっと前のC#はDelphiそっくりだった、っても納得しないやつも多そうだしなぁ
>>410 それを分かっていながらユーザーの移行性を軽く見た結果流行ってない言語ってあるよな
まぁビジネスライクとアカデミックの違いだな
Algol系って言えばDelphiもC#も同類だし静的言語って言えばC#もHaskellも同類だ そうやって競争したくない相手を同類にして勝てそうな相手だけを仲間外れにするんだよ
その昔はJavaScriptでさえ、構文はCに似ているので云々と宣伝されてたもんだ。
JavaScript(旧名LiveScript)さんは売り込むためだけに名前すら変えたもんな
>>412 流行った結果しがらみだらけになる、という馬鹿の実例があるのに、
それをご丁寧に真似する馬鹿も世の中いるからなw
w付けても漏れ出る必死さ
>>415 今じゃJSのことをJavaよ呼ぶ輩がいる始末…
つまり型安全性や型推論のメリットなんて、 使い慣れた文法を捨てて 言語を乗り換えさせる程の価値は無いってこと? C#使いが慣れた文法を捨ててまでHaskellに移行しないのと同様、 Ruby使いは慣れた文法を捨ててまでC#に移行する必要は無いってこと?
人によるんじゃね でも割と居る気がする Pythonのインデント方式に拒否反応を起こす奴とかもいるし
型推論は文法を変えなくても出来ることがあるだろ コスパ無限大のメリット
422 :
デフォルトの名無しさん :2012/06/14(木) 22:40:37.58
>>422 プロトタイプ作成用途はそれでいいかも知れんね
ただ、テキスト処理や高級計算機としての用途がメインの俺は
移行というほどのことにはならんだろなあ
>>419 > つまり型安全性や型推論のメリットなんて、
> 使い慣れた文法を捨てて
> 言語を乗り換えさせる程の価値は無いってこと?
どの言語でもしばらく使っていれば慣れるので
それは理由に成らない。
型安全性や型推論のメリットだけが残る。
>>424 当たり前でしょ?
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の型がわからない以上推論できる要素が何もないじゃないか。
haskellは+演算子だと数値になるんだっけ?
http://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;
>>430 オーバーロードした演算子だって戻り値決まってんだから推論すべきだと思うが
>>431 上の例は具体的に何の型に推論されるべき?
+演算子を定義したインターフェース型(的なもの)があって、 それをintとStringが継承してれば、その型を推論するのが良い
>>428 それは演算子で推論してるだけじゃん。
+が数値扱う演算子として定義されてるから推論できる。
逆に言えば、+演算子が使われている時、+の左右は数値でしかありえない。
(標準の+を隠して自分で定義すれば話は別だが、同時に複数使えない)
C# なら xは数値以外の好きなオブジェクトにすることができる。
言語仕様の違いでしかないよ。
>>433 インターフェース型的なものをintとStringが継承するとして、
その型と推論して、じゃあ演算自体はどうするんだよw
>>433 それはねーわwwJavaのジェネリクスに退化するわw
<String>と<int>でJIT後のネイティブコードはそれぞれ生成されるんだからさ
高速化のために
> +演算子を定義したインターフェース型(的なもの)があって、 > それをintとStringが継承してれば、その型を推論するのが良い つまり、objectという基本クラスがあって、 objectを継承した、Int。 objectを継承した、String。 この場合は、objectと推論して、 object + object をするのか? んで、その結果は?
話をまとめると、こんな場合でも型推論できるというけれど、 そのかわり型に応じた演算子オーバーロードが出来ないhaskell。 ということだね!
>>438 Haskellの + は Int, Integer, Float, Double 等や、
Num型クラスをインスタンスとなる任意のユーザ定義型でオーバーロードできる
>>442 f :: a -> a
aはただの多相型
ね?こうやって議論して、Haskellの型推論が優れていると分かっても
全く移行する気にならないでしょ?
やっぱり
>>419 は正しいんじゃない?
人によるんじゃね
C#に型推論あるっていうから Ruby辞めてC#使おうと思ったのに なーんだウンコじゃん
Ruby辞めてHaskell使ったらいいよ
448 :
デフォルトの名無しさん :2012/06/15(金) 01:52:33.51
言語の選択はエコシステム全体で見る必要がある。 Syntaxのみで選ぶのはナンセンス。 パフォーマンス(性能)は高いか? スクリプト言語はモッサリすぎて用途が限定される 開発生産性は高いか? クラスライブラリが充実しているか? ドキュメントは充実しているか? ネットと書籍 高機能なIDEは使えるか? 高機能なIDEなしに高速なデバッグとリファクタリングは不可能 英語が苦手な人限定:日本語情報は充実しているか? コンパイルの時間は高速か? C#は2回目以降は瞬時。エディット&コンティニュー機能 後方互換性に配慮されているか? 頻繁に破壊的仕様変更がある言語では、開発の生産性が落ちる。 例えば、RubyやRubyやRubyなど。 嵌ったときに質問できる場所はあるか? マイナー言語だと英語圏でもレスポンスが返ってこない 結論: C# 最 強 !!
Rubyはクズ 何も考えずに作ってる証
450 :
uy :2012/06/15(金) 05:53:42.61
>>396 お前みたいに理解してる奴もいるが、後ろを見てみろ
マジで
>>397 こういうのがいるんだよ、どうにかしろ
>>399 古参だと何が偉いのか知らないけど
少なくとも2chにおいて重要なのはお前よりも俺
俺がスレ引っ掻き回したらこのスレは1日で50もレス進んだ
同じ事出来る?
マジレスするとインターネット上に同じコミュニティはせいぜい1、2年しか持たない
昔はよかったなんていっても昔の様子には二度ともどらない
3年目にもなると新しい層がやってきて、元いた層は別の場所へ移動していくか、駆逐される
俺も俺の属したコミュニティを新しい層に駆逐された事もあるが、今回は俺が侵略し駆逐する側であるだけ
Haskellはゴミ、夢から覚めろ
451 :
uy :2012/06/15(金) 06:20:51.04
つうか俺はrubyに何の思い入れもないし、ただ効率がでるから使っているだけで 俺がrubyを布教する事によって俺に利があるわけでもないし ルビリスト(笑)界隈が賑わうだけの事、そういう集団に混ざるのもいやなんだよね こんなゴミbbsでコテ1人が騒いだ程度で何かがどうにかなってしまうなら よほど基盤が弱いか よほど他のruby使いがヘタレなんだろ あと、俺は名無しでレスをする事もある 根本的にはuyで書き込むのと同じ内容のレスをしているにもかかわらず 同意を得られるところをみると・・・w お前らは条件反射でuyという名をみてとりあえず否定レス返してるだけなんだなぁと思った この板でまともな議論は不可能である ただの遊び
452 :
uy :2012/06/15(金) 07:20:09.04
と思ったけど 人1人の影響力は知ってた ム板の奴らがuyを邪魔だと思うように俺にとってはプログラミング界すべてが邪魔だ どちらがどかされるかだよね Rubyの良さを教え煽った後に意地を張らせRubyを今後そいつが使えなくする とか狙ってやってたわけじゃないが、そういうやつが増えてきた印象をもつ かわいそうにな けどこれでいいよ別の何かを作るんじゃないか?静的言語厨が、無駄なものをな 結局は金でしょうプログラミング、俺はプログラミングで利益を持たないからすべての言語宗派の味方であり敵である 被害を被るのは、プログラミングを食い物にして生活してる層だけだろ 知るかよそんなものこんなデジタル媒体でいつまでも商売続くと思うのが間違い 俺の通った後が焼け野原だと感じるなら、uyの影響力を認め自分の無力を理解したことになる 負けを認めたなら次は負けないように励めよカス 俺はプログラミングの技術をプログラミングをやっているやつをからかうためにも使う、からかわれてると感じたなら、レベルの低さを自覚しろ
453 :
uy :2012/06/15(金) 07:35:38.56
俺の存在感を消したいなら簡単な手段がある おまえ等がコテを名乗れよ そんで俺よりもRubyと2chのスレ進行に対し有益なレスをしろよ 名無しからくる多種多様な質問を悉く返せよ それを出来る奴がいないからいつまで経っても2CHのム板はuyの天下のようなものなる おまえ等はこの板でコテを名乗れない コンピューター全般の広域の知識が俺よりも圧倒的に劣るから、レス出来るものが圧倒的に限られて話にならない 結局uyよりも総合的に力がないから、邪魔だと思っても消せないのではないか 自分が有象無象の1人ではないと自信があるならコテでも名乗って俺の存在感を凌駕しろよ 名無しという名前に隠れてこそこそやってるだけなら中身なんて中学生レベルでもごまかしは利く
454 :
デフォルトの名無しさん :2012/06/15(金) 07:43:23.57
JavaScriptで頑張って数万行ほど書いて、その後CoffeeScriptでも数千行ほど書いて 動的言語は駄目だ、つーかあらゆる意味で無理と確信しましたわ 砂上に楼閣建ててる感がヤバイ コードサイズ膨らむほど幾何級数的にデバッグコストが上がる。 それも断片化のために検証が困難なブラウザで。 初心者受けはいいぶんあちこち入り込んできて本当にタチが悪い。 JSXなりHaxeなりGWTなり何でもいいが、とにかくJavaScriptはヤバイ 中規模以上のプロジェクトにおいては即刻使用を禁止すべき
>>453 型宣言は冗長だといっていたのに、
あいかわらずゴミ長文を連投してるなww
その駄文を書かなければ、毎日数千個の型を宣言できるよwwww
ログ流したら偉いという発想が既に荒らしの発想でしかないな
457 :
uy :2012/06/15(金) 11:03:41.61
砂上に楼閣なんて知った事じゃないしな 色んな建物を建てては崩れて立てては崩れてやっていけば 砂の上にもガレキが積もってまともな建物建てられるようになるから、もう少しの辛抱だろ 今、その動的言語で書いているソースコードは本当に自分で書かなければいけないものか? もしどこかに既に安定したライブラリがあるなら、その部分のソースコードを丸ごと消せるのではないか 最初のスタートが大変なだけだよ 後から楽になってくるって、動的言語コンパイラやIDEの開発者を信じろよ 俺は覚悟を決めた
たいしたプログラムも書けないくせに長文乙
459 :
uy :2012/06/15(金) 11:24:47.68
動的言語の問題点は実際にプログラミングしてる時以外にもある Rubyで例えるなら Ruby1.8で動いてたコードを Ruby1.9で動かそうとすると、いくつかエラーはでるものの直していけばすぐ動くんだけど 本当の意味では正しく動いてない いくつかの廃止された構文、仕様の変わったメソッド それらは何をどうやったって抽出できない 実行すると、処理系は何もエラーメッセージを出す事もなく、ソースコードのどこかで意図しない動作をし続ける 目デバッグやprintfデバッグしきれないくらいに膨大なソースコードだったらそこで詰み 互換性がないとかいう問題じゃなくて つまり中規模だろうと大規模だろうと、 バージョンが変わったら過去のソースコードはゴミ、基本的にその時に全部捨てなきゃならないんだろう どうしても捨てられないって奴だけが、必死にデバッグする 確かにrubyは泥沼 今後1年〜2年限りしか使わないプログラムだったら、別に仕様変更なんて怖くない 今後5年〜10年と使っていくプログラムの作成をrubyなんかでやったら死ぬ でも今後5年〜とか長期的に使用するようなプログラムを俺は作らないので、俺関係ないし 泥沼なのしっててお前らを泥沼rubyに突き落としたい!
460 :
uy :2012/06/15(金) 11:33:43.47
ただし応急手当の策もある 大部分をオープソースのライブラリで書いて、 ライブラリのバグを見つけ次第、ライブラリ作者に報告 仕様変更時のバグ発見なんて人海戦術でやってれば 一人でPrintfデバッグしてるよりはよっぽど早期対応が出来る けどフリーライブラリの作者なんて金で動いているわけでもないし、対応が遅いかもしれない 所詮焼け石に水 結局動的言語は仕様変更というものがなくなって、開発がとまらない限り永久に泥沼 しかしrubyはまだまだ完璧とは程遠いのでこれからも仕様はどんどん変わっていくよね 泥沼rubyの中でも上手に動ける奴だけが生き残る 下手に泥沼rubyで動き回った奴は入った瞬間に溺れ死ぬ
たいしたプログラムも書けないくせに長文乙
462 :
デフォルトの名無しさん :2012/06/15(金) 12:14:50.70
>>460 わかってるようでわかってないな
最後の3行で結局Ruby擁護してるし
アプリは1年しかつかわなくとも、Rubyが非効率なのは変わらない。
おまえの知識が仕様変更のたびに無駄になってるという非効率に
なぜ気がつかない。
上手に動ける奴というか、賢い奴はもうRuby捨ててる
Rails系フレームワークが増えた時点でRubyの必要性がなくなった。
9割を超えるWindows環境でまともな速度で動かないランタイムも致命的。
いつまでたっても低品質なまま
463 :
uy :2012/06/15(金) 12:44:04.58
rubyを擁護してるっつうか
現時点、0から開発しようって場合にrubyは最高効率なのは変わらない
少なくとも、「俺が」rubyを使った場合にはそうなる
ただし死後都で使うには向いていない、品質は低い
過去からのソースコードを流用すればするほどに品質は下がる
バージョンアップごとに
毎回書きなおさなければならないくらいにキチってる
しかし2.0で100%互換性を持つとの宣言してる、さてどうなるか
http://jibun.atmarkit.co.jp/lcom01/special/nicocho/01/01.html リリース日はRuby2.0、2013年2月24日予定らしい
ruby程度の仕様変更のたびに無駄になってるという非効率は
静的言語の
>>361 これよりはマシだろう お前は今まで何個の静的言語を覚えてきた?
静的言語の型宣言の仕方は言語ごとにどんどん変わっていく
しかも最近になって型推論とかいうブームを引き起こしたようだから
数年後にはガラっと変わっちゃうぞ
たいしたプログラムも書けないくせに長文乙
rubyしか使えないまで読んだ
466 :
uy :2012/06/15(金) 13:03:13.73
2002〜2007年くらいにやたらrubyは盛り上がってた印象を持つ Railsの影響なんだろうな もう既に動かなくなった大量rubyリソースがその年代のログにある まぁちょっと変えれば動くけど 初心者や面倒くさがりには、それが出来ないから、動かないゴミソースとして扱われる数々のソースたち たまに更新のとまってHPに残されたソースコード 古くてそのままじゃ動かないけど有用なものを見つけたときに思う これはやばいと思うよw 技術ある奴から見放されすぎ でもプログラマなんてものは腐るほど次の世代が出てくるから、rubyを見限った老害というか ruby言語の礎となった奴らが今何をわめこうと 過去の資産など何一つもっていない初学者は、過去にその言語に何が起こったかなんて知った事ではないんで 効率いい言語を使う 結局よほど恵まれた職場でなければ本職になったとしても、効率のいい言語は使えないし 効率のいいプログラミングもさせてもらえない 数々のしがらみによって、古いコードを継ぎ足して使い続ける 職業マというのは自分の使っている開発環境の効率の悪さ、死後都の効率の悪さに気づいてしまったら どこかの地点であきらめる必要がある
はいはい、たいしたプログラムも書けないくせに長文乙
468 :
uy :2012/06/15(金) 13:12:53.85
やはり今は大規模開発を動的言語で行う事について その「動的言語」をrubyで語るのであれば仕様が安定したのを見定めてからが本番だろ 2.0で本当に互換性が保たれているのか、全てはそこを確認してから それまでの議論なんていうのは、ただの机上の空論の飛ばしあいに近い 動的言語の概念そのものに根本的な問題があるのに、動的言語自身の仕様さえ安定していない現状では ろくに資産は作れない、仮に大規模な安定したプログラムを作ったとしてもそれはrubyの仕様変更によってぶっ壊れる まずはとにもかくにも仕様の安定した言語があって、全てはそれからだ Ruby2.0でたら本気出す、もし揺らぐようなら俺はLispにいく
勝手にしろ
仕様が安定した言語が欲しかったらAdaでもやってろよ
動的言語は建築で言うなら足場の立ち位置 簡単・短時間で組立・撤去できる足場は 建築現場で無くてはならない存在 当然、細かい強度計算なんていらない でも足場材料で建物自体を作るやつはいねーんだよ
それでもC#は無いわー あれうんこだわー
uyは掘っ立て小屋暮らし
474 :
uy :2012/06/15(金) 14:58:58.77
>でも足場材料で建物自体を作るやつはいねーんだよ 世の中にはプログラミングでそういう事を率先してやりたがる奴もいる そういう他人には出来ない変わったことを達成する事で 周囲の注目を集めハッカー(笑)みたいな呼ばれ方をするから 俺は別にそういう目的ではないが、普通に動的言語の方が効率出るだけだよ 俺が触った場合には。
もうちょっと人生の効率を考えた方がいいぞ。 もう25にもなんだし、uyって30まで生きないんだろ?
遠大集団にRubyが買収されたら本格的に使ってやろう
477 :
uy :2012/06/15(金) 16:13:15.24
何いってんのか理解不能だけど、 お前らが物欲、食欲、性欲に身を任せている間に 俺はお前らに背を向けて、お前らには理解の及ばない倫理観の元に誰にも侵されない場所で幸せを勝ち取るのが大好きだよ
睡眠欲に身を任せているんですね分かります
479 :
uy :2012/06/15(金) 16:30:44.42
人は歩みを止め闘いを忘れたときに老いていく 俺はこのセリフが身にしみるよ 立ち止まってはいけないと、何度も思い知らされる 動かなくなれば、そこらの石と同じだ 何かを求め、何かを嫌うメリハリこそが生きるという事 ゴミグラマは死ね
人を見下すことでしか優位性を保てないって本当屑過ぎる
>>479 お前が一番立ち止まってるじゃないか、老化だな
uyが消えるのを求め、uyを嫌うメリハリ
無能な働き者は銃殺
484 :
uy :2012/06/15(金) 19:30:58.56
>>480 プログラミング程度のゲームに向きになっちゃうほうが愚かなんじゃないの?
俺はゲームの対戦相手は煽りまくるほうだけど、これゲームじゃなかったらなんだと思ってるの?
485 :
デフォルトの名無しさん :2012/06/15(金) 19:32:30.15
馬鹿には無理
486 :
uy :2012/06/15(金) 19:33:09.71
>>480 プログラミング程度のゲームに向きになっちゃうほうが愚かなんじゃないの?
必死にやっても必死にやっても俺に満たない奴が大多数なのは知ってるけど
力の差に気づかないで突っかかるから反撃されて泣かされてるんじゃないの?
487 :
uy :2012/06/15(金) 19:34:52.06
>>480 「プログラミング程度のゲーム」に向きになっちゃうほうが愚かなんじゃなかったら何?
何がしたくてプログラミングしてんの?
たいしたプログラムも書けないくせに何言ってるの
uyはやくゲームリリースしてよまだなの
スクリプト言語でゲームつくるとかuyは本当にアホだなww しかも一番遅いRuby
ヒント:uyは無職
uyは気付いてしまったんだよ rubyより優れた言語があるのに、アホすぎて自分には習得出来ないってことに だから発狂してるのさ
493 :
uy :2012/06/16(土) 06:34:59.30
作っていくにあたり気づいたのは動的言語の未解決問題だなぁ これがある限り、「普通の奴」は 周りが何いっても動的言語で大規模開発はやろうとしない ゲームプログラムっていうのも ソースコード量は増えずとも、基本的な機能をもったSTG程度は 設計レベルの話では中規模〜大規模といえるので 初心者はrubyでゲーム作れない パズルゲーカードゲーボードゲー、あるいは簡単な1000行以内に収まるようなゲーム それ以上をやろうとすると爆発する
uyはたいしたプログラムも書けないんだから、 無理して大規模開発の話をしなくていいよ
uyは自宅警備の片手間にこんなとこへ書き込むヒマがあるなら 就職して真っ当なプログラム書きなよ
496 :
uy :2012/06/16(土) 08:21:56.47
あ^^^ Ruby1.93で書いたソースコードが Ruby1.92でいくつか動かないお^^^^ ざけんなカス 直して動かしたけど、 何で細かいところをちょこちょこ変えるんだろうな つまり、これは「詳細部分」が微妙に1.92と1.93で違うというのを意味してて 1.92のコードのどっかのなんかの記述が1.93で動かなくなってる可能性をはらんでるって事だよ Rubyは大変だなー! うwwwwwwwwはwwwwwwwwwwwwwwwwwww 泥沼!泥沼!泥沼!泥沼!泥沼!
497 :
uy :2012/06/16(土) 08:33:15.00
シンタックスエラーが出る場所なら直せるけど そうじゃなくて、エラーすらださずにもし別の意味に解釈されてたら、実行して「あれ?」ってなるまで気づけないし なんか、ほんとに泥沼だな 使うけど
大規模開発で工数増大するって話が、いつの間にか 独りで開発して破綻するって話になってるじゃねーか この急速なスケールダウンっぷりは何なんだよwww 独りで開発してても破綻するなら、まずは自分の資質を疑えよ
499 :
uy :2012/06/16(土) 14:10:29.38
俺の存在が泥沼
大体JavaだろがC++だろうが、 辞書なり連想配列なり使えば、 動的言語相当の文字列ベースのプログラミングは出来るしなぁ。 ただ、あえてそうしないだけで。
ちょっとスレを斜め読みしたけど、 そもそも、動的の意味を勘違いしている人がいるね。 動的言語は型が動的って言っている人たち、それは違う。 C++でもJavaでも実行時型情報を持っているから、型は動的に解決されてる。 動的言語の動的の意味は、シンボル名の解決が動的ってこと。 シンボル名を、静的言語ではリンク時に解決するが、 動的言語では実行時に解決する。
ロードした型の定義は実行中に固定される静的言語と ロード済みの型の定義を実行中に変更できる動的言語 という意味での「型が動的」
そんで、動的言語のメリットって、実際には無いんじゃないかとすら思う。 動的言語は基底クラスをそろえなくても、ダックタイピングで多態出来るが、 とはいえ、結局はメソッド名が一致していなければならないわけだからね。 基底クラスが揃っていることと、メソッド名が一致していることは、 同程度に強い制約だよ。
504 :
uy :2012/06/16(土) 14:44:35.49
動的なのは俺の収入額
動的言語のメリット:型を書かなくていいこと 静的言語のメリット:型を書けること
rubyみたいな感じのイテレータとgemsがあるなら静的でもいいよ
507 :
uy :2012/06/16(土) 15:09:46.03
動的のメリット:収入が不安定なこと 静的のメリット:収入がないこと
>>505 VC++2010ですら既に型推論を実装しているから、
冗長な型名を書く必要はなくなってきてるよ。
型って観点から静的言語と動的言語を切り分けるのは無理があると思う。
静的言語と動的言語の差は、
シンボル名の解決が、コンパイル/リンク時か、実行時か、の差だと思う。
>>509 それに関しても、静的だけどテンプレートがあるし。
昨夜、C#の型推論は出来損ないって結論出たのに またやってるのか。
関数型はお呼びでないんで
513 :
uy :2012/06/16(土) 16:00:48.36
rubyは型推論どのくらいできるんですか?
514 :
uy :2012/06/16(土) 16:01:54.11
型なんか推論するより収入を推論してくれ
OCamlが存在する以上動的言語の存在意義が無い
516 :
uy :2012/06/16(土) 18:09:06.29
勘違いしてる静的言語厨いるけど 型推論いくらやったところで 動的に型を変えられないなら、動的言語に近づいてるのは見た目だけで 中身は全然違う別物だからなその型推論て 完璧に型推論やって一切の型をかかなくてよくなったとしても動的言語にはならないよ 動的言語 静的言語 静的型推論言語 などと分けてもいい
>>516 お前が根本的に間違ってる。
まず動的に型を変える機能はいらない。
正確に言えば、動的に”互換性がない型”に変える機能はいらない
互換性のある型に動的に変える機能であれば、静的言語にも備わってる。
どっちみち、コードは特定の型限定で書いてるんだから
そこに互換性のない型を持ち込んでも動かない。
つまり、動的に型を変える機能は不要であり
静的に型が決まってる言語の方が優れている。
ただし、その欠点として型をいちいち明示しなければいけなかった。
わかりやすく言えば、書くのが面倒だってこと
逆に言えば、書くのが面倒でなければ、静的言語に欠点はない。
とうか、静的言語でも辞書は使えるわけだから、 単純に動的言語は静的言語から一部機能を除いたものだよな。
ローカル変数、プライベートメソッドは型なし(つけても良い) パブリック変数、パブリックメソッドは型あり ぐらいでスコープに応じて型の記述が 必須になったりオプションになったりすれば良い。 ようするに広いスコープのものほど 状況を把握するのが難しくなるから ちゃんと記述しましょうってこと。
>>517 > 正確に言えば、動的に”互換性がない型”に変える機能はいらない
お前そういうことは、
>>196 >>426 みたいにまともに動きやしないコードでも
コンパイル時点でエラーをきちんと出せるようになってから言えと。
521 :
uy :2012/06/16(土) 20:20:06.47
>>517 お前が程度の低いコードしか書かないなら
>まず動的に型を変える機能はいらない。
いらないんだろうな
お前は静的言語使ってれば良いと思うよ
かくのが面倒って自問自答してんじゃねーか
静的言語で多態化メソッドだらだら書いている間にも
動的言語はそこら辺を一気に書いてどんどん次に進んでいくんだよ
OpenStructとmethod_missingは静的言語で実装できるか?
そこら辺も俺はよく使うんだけど
クラスに
var1 ,var2 ,var3 ,var4 , という変数を先に定義しといて、
その変数に後からクラスインスタンスごとに別々の型データ入れたい場合はどうする?
とりあえず最低でも、OpenStructはないとお話にならない
連想配列使えとか?
使ってらんねーよそんな言語
522 :
uy :2012/06/16(土) 20:29:10.29
動的に型を変える事によって、ポリモフィズムがいらなくなる 静的言語では書くのが面倒くさい つうか、面倒くさいから静的言語じゃ実際には書いてないんだろ あまりポリモフィズムが必要にならないように、なんか遠まわしにそういうアルゴリズムを書く だからプログラムの柔軟性が落ちて、ハードコーディングに近い物になっていく 幼稚なアルゴリズム 一瞬でint , double , string など色んな型のメソッドを静的言語が一発でかいてくれるとしても 何か新しい型が必要になるたびに、追加しなければならない 開発効率が悪い やっていられるか で、その答えは、「新しい型を追加」しない どんどんハードコーディングになって、静的言語のソースコードは柔軟性が落ちていく 結局動的言語は切り捨てられない
523 :
uy :2012/06/16(土) 20:52:44.24
誰にでもプラスとなる動的言語の使い方っていったらプロトタイプの作成、 アルゴリズムの思考
つまんねぇuyだなこいつ。
いつかの東大生じゃねぇのか
>>521 > かくのが面倒って自問自答してんじゃねーか
お前は物事をひとつの側面からしか見れないんだな。
急がば回れの言葉通り、最初に書いておけば
あとから状況を確認するのが楽になる。
動的言語だと、使い捨てならいいけれど保守が難しくなる。
ようするに汚いコードが高速で量産されるわけだ。嬉しいか?
>>522 > 動的に型を変える事によって、ポリモフィズムがいらなくなる
ポリモフィズムというのは考え方。
共通のメソッド、プロパティを定義して、
特定の型を入れ替え可能にしましょうっていうのが
ポリモフィズム。
動的に型を変えたからって、その型に共通の何かが
なければ、入れ替え可能にはならない。落ちるだけ。
その共通の何か(インターフェース)をコードの中に明記しましょう。
コンパイラもそれを知っているので効率いいし、エラーも見つけやすい静的言語の利点で、
動的言語だと、コメントで必要なメソッド等を書いてもコンピュータは参照しない。
つまり、それを読んで人間が、コードよめ。ひたすら人力で頑張れ。というデメリットになる。
動的厨「汎用のソート関数作った。どのクラスでもソートできるぞ!」 sort(list) 「俺のクラスソートできないんだけど?」 動的厨「それじゃだめだよ。compareメソッドが無いじゃないか」 「必要って言わなかったじゃないか。」 動的厨「ほら、ここにコメント書いてあるでしょ?」 「なるほどね。でもそのコメントわかりにくいよ。こうしたら?」 sort(/*Comparable*/ list) 動的厨「!?」 「ついでにクラスの方にも、ソート関数対応って書いておくといいよ」 class MyClass /*implements Comparable*/ 動的厨「!?」 「ついでに、そのコメント見て矛盾してるところがないか、チェックするツール作ったよ」 動的厨「便利だね!」 「まあそれが常識なのが静的言語なんだけどね。」 動的厨「ぐぬぬ」
たいしたプログラムも書けないくせに語るuy
結局、uyは最初にRubyみたいなクソ言語に 慣れてしまっているために移行できないんだろうなw バージョンあがったらすぐ動かなくなるようなクソ言語が 効率がいいとかwww
コメント書くのとソースコードで書くので どっちが楽だろうかね。 /* この関数には○メソッドと△メソッドのと□メソッドを 実装したクラスのみを引数に取ることが出来ます。 これらのメソッドの仕様については〜を参照して下さい。 ver2.0より□メソッドの実装が必須になっていますので この関数に渡すすべてのメソッドを探しだして修正して下さい。 なお動的言語ですので、コンパイラが自動的にエラーをだしたりはしません。 実行したらエラーになります。 */
>>533 > ver2.0より□メソッドの実装が必須になっていますので
> この関数に渡すすべてのメソッドを探しだして修正して下さい。
静的言語だってテストを書くだろ?
動的言語だって全てのテストを書く。
だからテストを実行すれば、問題があることはすぐ解る。
あとは、落ちた原因を調査すればいいだけ。
なんで落ちたか、このにはこの値が入ってるはず
なんでメソッドがないのか?などなど。
数分もあれば原因は解る。
一方静的言語なら、コンパイルするだけで
数秒で修正箇所がわかるのであった。
>>530 これ読んでわかったことは
メリットを強調してデメリットがわかりにくくなると物凄く気持ち悪い
デメリットを知らないツールより、デメリットまで知り尽くしたツールの方が安心できる
>>535 を読んで思ったことは、
中身が何もない。
なるほど細かいテストが付いてるのはそのためか その時間、他のことに使ったらいいのに
いつも同じ欠点を指摘されるから安心なんだ 思わぬ所に落とし穴があるのが一番怖いけど、それがない
Wikipediaの大規模なテンプレートにもテストケースが付いてるよ
>>529 > 動的に型を変えたからって、その型に共通の何かが
> なければ、入れ替え可能にはならない。落ちるだけ。
nullは全てのメソッド呼び出しに対応してない(例外投げるだけ)けど
nullは全てのオブジェクト型変数に代入出来る。
つまり、せっかく型を書いて、コンパイルしても
動的言語と同じように落ちる可能性がある。
動的に型を変更すら出来ないのに。
541 :
uy :2012/06/17(日) 07:49:58.70
静的言語ならデバッグが困難なバグが発生しないみたいなこと言ってるが むしろスクリプトなら落ちた時にファイルと行数教えてくれる 静的言語だと落ちてもファイルと行数は教えてくれない
それはねーよ 例外で落ちたならスタックトレース出る Cですらcore吐いたなら分かるのに
>>541 これはひどいwwwwwwww
例外処理の使い方も知らなかったとはwwwwwwww
Ocamlにはnullが無いけどな
だからOCamlやHaskellは場違いなんだって C# vs Rubyみたいな低レベルの争いだから 均衡を保ってるのに、一気に均衡が崩れちゃうだろ
C#やjavaで型にnotnull指定出来ればいいのにと思ったことはある
//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 と同じなんだよね
割合から言うとむしろnull可の方にキーワード付けた方が良いレベル。 c++は自動変数や参照の引数or戻り値でそれなりにnull不可を表せるんだよな。 代数データ型には及ばないけどさ。
最初からジェネリクスがサポートされていたら Option<T> とか Maybe<T> と書くだけ。 ジェネリクスが無い段階で商品化してしまうことが問題。
ジェネリクスとnullは関係なくね
「メンバ変数を明示的に初期化しないときはnull」 こういうアホ的仕様を無くさないと、どっちにしろnull撲滅は無理
null使わないなら初期化するし、コンテナならfinalも付けるだろう それにprivate部分は重要じゃない、protected以上の戻り値や引数の方が重要
Java8でnot nullアノテーションが入る予定だった気がする
>>550 大規模開発を推進する奴らがジェネリクス程度の規模でびびったら駄目だろ
>>553 それって実行時に例外が投げられるだけでしょ
動的言語と静的関数型言語が共存する形で残る 静的OOPLはメリット0なので死滅する
何十年後くらい?
それまでにいくつの言語が生まれて消えるか
結局どの言語を使うのが効率が良いんです?
561 :
uy :2012/06/17(日) 13:33:19.05
>>542 ,544
結局何か仕掛けなければ吐かないことに変わりは無いよ
普段使ってる「静的言語」で作られたプログラムが勝手に異常終了した時に
エラー箇所とかわかんの?
>>560 そういうこと言い出すと、日本なら日本語、世界なら英語ってことになるから。
>>561 だからコア吐くっていってるだろ、バカか。
563 :
uy :2012/06/17(日) 13:48:23.61
>>562 この前さぁIEが異常終了したんだけど
IEのソースコードの何のファイルの何行目で落ちたんだろ?
調べる方法は?
ウィンドウが出てきて、エラー情報を送信しますか?って出てくるだろ。 その中に含まれてる。
566 :
uy :2012/06/17(日) 13:53:33.04
だから、調べる方法は?
さっさとコアでも何でも吐けよクズ
>>565 スクリプト言語で書かれていれば開発者じゃなくてもエラー箇所がわかる
自分で直せる
どちらにしで、それって 静的動的でなく、コンパイルかインタプリタかの話にならない? 静的言語のインタプリタってのもあるんだけど
>>566 ユーザに改造されたら困るのはメーカーなんだけど
>>566 スクリプト言語で書かれたブラウザ使っとけww
動的言語のメリットは、 シンボル名の解決をコンパイル時にしないことに起因する、 「コンパイラの作成が楽」&「コンパイルが早い」 の二点に尽きるんだよ。 「コンパイラの作成が楽」はコンパイラの作者が楽できるだけ。 利用者側から見れば、「コンパイルが早い」ことしかメリットが無い。 逆に静的言語はシンボル名の解決をコンパイル/リンク時に行うが、 それが嫌なら、要所要所で、これを実行時に行うことも出来る。 辞書クラスなどを使って、自前で辞書を引けば済むだけの話だからな。 要するに、動的言語は、コンパイラが手抜きってだけ。 「動的言語」=「静的言語」-「静的シンボル名解決」 動的言語は、静的シンボル名解決機能の無い、静的言語。
uyが不具合だらけだからコアを吐かせたい
Null objectパターンで見る静的動的の違い 動的言語:object型に何も実行しないmethod missingを追加する 静的言語:各クラスにnull object用クラスを定義する nullを返すところを全部null objectで漏れなくラップする ラップが漏れたらぬるぽ
関数型言語: Maybe型を使う
574 :
uy :2012/06/17(日) 15:01:38.69
動的言語の利点がコンパイルが早い(キリッ)しか思いつかないのであれば そういう奴は使わなくていいな
>>572 > 静的言語:各クラスにnull object用クラスを定義する
各クラスじゃなくて各インターフェースごとだろ?
んで、インタフェースがあれば
実装の雛形を生成すればすぐに終わる。
> nullを返すところを全部null objectで漏れなくラップする こいつNull Objectパターンを良く理解してないと見た。
たいしたものも作れないuyには 使ってほしくないな
>>572 > 動的言語:object型に何も実行しないmethod missingを追加する
頭悪そう・・・
ようするに、エラーが起きて欲しい場面(メソッド名の間違い)で
エラーが出なくなるってことじゃないか。
実行時エラーどころか
実行時エラー潰しだよ。
ある意味動的言語のスタンスとしてはそれでいいんじゃない? そこはエラーじゃなくてテストで対応する そしてスレタイ通りテスト工数が増大END
580 :
uy :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"]
だから動的言語で作られたアプリは エラー出てなくても正しく動かない事が多いんだなw
>>576 お前こそ全く理解してないだろ
nullとnullオブジェクトが入り交じったコードなんて悪夢そのものだろうが
>>578 NullPointerExceptionは握りつぶして良いのか?
>>582 > NullPointerExceptionは握りつぶして良いのか?
当たり前の話するね
想定通り握りつぶしたい時は、潰せばいい
それ以外の時は絶対に握りつぶしてはだめ
盲目的に全部握りつぶすなんてコードは最悪なコードの一つ
つまりobjectにmethod missingを付けるというヤツのことだよ
NullObjectはNullPointerExceptionを 握りつぶつために使うんじゃねーぞ。 やっぱりわかってないなw
NullClassにmethod missing付けるだけだろ さらにclassboxesがあれば尚良い
>>584 つまりぬるぽは無くならないってことか
やっぱりJavaやC#はダメだな
uyか
ぬるぽさえ出なければ、 正しく動かなくても 問題ない! これが動的言語厨の本質。
>>583 まさかmethod missingでそれが出来ないと思ってる?
メソッド名もクラス名も取れるんだぜ
その結果、objectのmethod missingには 様々なクラス、メソッドごとの 処理が一箇所に依存してしまう 汚いコードが出来るのであった(めでたしめでたし)
やっぱり関数型言語以外はダメだな...
関数型はゴミ
(俺様に理解できない)関数型はゴミ(ということにしたい)
595 :
デフォルトの名無しさん :2012/06/17(日) 19:13:18.99
いつまで経っても関数型言語で何も作れないんだから 何かしらの欠点があるんだよ
問題点があろうがとにかく何か作る言語と、問題点を徹底的に議論する言語の違い
理解できないから 具体的な欠点を指摘できないんですね わかります
使えればオブジェクト指向よりほんのわずかに優れているとかいらないんだよな 誰にでも理解出来る言語じゃなければライブラリも少ないし ライブラリが少なければその言語に価値なんてないよ でノロノロやってるうちにいつの間にかオブジェクト指向側が関数型を凌駕してる、と
> ほんのわずかに優れている 「ほんのわずか」と書き加えずにいられないところに 最後のプライドが透けて見えて面白いwww
え? 本当のことじゃないの?
601 :
uy :2012/06/17(日) 19:51:44.76
ほんの僅かに優れている程度の代わりに、プログラミングの難易度を高めてしまった そして扱える人間を減らした だからライブラリ量が少ないので関数型は流行らない よかったね
スレタイに沿うと、関数型言語で開発すればテスト工数は減る コンパイル通れば動く、と冗談にしろ言われるくらいだし ライブラリはScalaはJava, F#は.net, HaskellはCのライブラリが使える ただし大規模開発が出来る程プログラマは集まらない
603 :
uy :2012/06/17(日) 20:04:41.47
Cでかかれたライブラリは、基本的にどの言語からでも使えるだろ JAVAや.NETも、呼び出せるように対応する流れはどの言語にもある 問題は個人などの有志開発のフリーライブラリの総量 ブログやサイトなどにかかれたサンプルの数 そういうものが少ない言語っていうのはGoogle検索なしで開発しろっていってるようなもの
バージョン上がるたびに既存コードが壊れて 動くか分からんゴミコードの山のRubyよりはマシだけどね
605 :
uy :2012/06/17(日) 20:51:40.82
じゃあ二度と使うなよ
PrologもCの関数を呼べる
ゴミプログラムしか書けないuyに言われても
バージョンが上がるたびに乗り換えるのは情弱だろ 2つか3つ上がるまで様子を見ればいいのに そういえば、リファクタリングするたびにテストをやり直すって話と同じだ
>>608 ぜんぜん違うどころか、真逆ですよ?
リファクタリングっていうのは、
動作を変えない修正という定義だから
テストを行なっても通る。
言い換えると互換性がある。
様子を見なきゃ成らないってこと、既存のコードが壊れるってことは
それはリファクタリングじゃない。
>>609 つまり、メソッド名やパラメータの数を変更するのはリファクタリングではない。
>>1 はデタラメということだ。
>>610 > つまり、メソッド名やパラメータの数を変更するのはリファクタリングではない。
リファクタリングだよ?
変えても動作は変わらないんだから。
もちろん動作が変わったら
それはリファクタリングじゃないけど。
>>612 最終的に同じ結果が出るように修正するから。
なんだか、最終的なバージョンが出るまでテストしなくていいような気がしてきた
なんで?w
人生は永遠のアルファ版 最終版などない
617 :
uy :2012/06/17(日) 22:26:05.26
メソッド名の変更程度でリファクタリング(キリッ)とかゴミカスバカ底辺が言いはじめるから 今まで俺は俺の中でリファクタリングと呼んでいた作業を 「ソースコードの最適化」と呼ばなければならなくなった
なにいってんだこいつ
っていうか、609と611をまとめると メソッド名やパラメータの数を変更しても既存のコードが壊れないことになるんだが
621 :
uy :2012/06/17(日) 22:34:01.96
>>608 開発中にバージョンあげるのは本当はNGなんだろうけど
まだ何とかできる範囲の規模だからRubyバージョンあげただけ
ゲーム開発もしたいけど、最新版rubyも使って最新rubyにはついていきたい
>>619 はい、そのとおり、壊れません
なぜなら、関数を修正すると共に、その関数を
呼び出している部分すべてを書き換えるからです
実際にEclipseにあるリファクタリング機能は、実行すると
関数とそれを利用している部分すべてが書き換わります
これがリファクタいリングです
623 :
uy :2012/06/17(日) 22:36:18.51
>>620 別スレでかいたソースだけど、俺の中ではこれがリファクタリングなんだよカス
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 ]
624 :
uy :2012/06/17(日) 22:37:44.41
で、
>>622 こういうやつがIDEの機能の自動なんちゃってリファクタリングをリファクタリング(キリッ)w
とかいうから
>>623 こういうのはソースコードの最適化というしかなくなった
>>623-624 それは、
> 『リファクタリング プログラミングの体質改善テクニック』
> では70種類ほどのリファクタリングが挙げられている。
の中のどれに当てはまるか言えますか?
質問の意図は、それがリファクタリングかどうかの話ではなく
あなたが理解しているかどうかの話です
>>622 それって、関数を利用している人が1人だけの場合じゃないですか
大規模開発では使えないのでは
>>626 じゃあ、お前は大規模開発で、
どうやってコードを修正するというんだよw
大規模になればなるほど、影響範囲を小さくするために コードを疎結合にする。 そうなっていれば、自分の担当箇所の修正が 他人に影響を及ばさないから、 リファクタリングもやりやすくなる。
自分の担当部分でおさまるリファクタリングなら好きにやれる 広範囲に影響が出るようなリファクタリングは注意が必要 自分の担当外だからどこでどう使われているかわからない だからどこで使われているのか素早く間違いなく知る必要がある そこで動的言語はやっぱりダメだねって話になるんだよね どこで使われているのかさっぱりわからない状況になるから
630 :
uy :2012/06/17(日) 22:56:14.93
>>625 はぁ?
>リファクタリング プログラミングの体質改善テクニック
そこら辺のゴミカスPGの書いた本なんてしらねーんだけど
じゃあお前は
>>623 これをなんだと思ってんの?
ご存知だとは思いますが一応言っておきますね。 リファクタリング―プログラムの体質改善テクニック 著作 マーチン・ファウラー マーチン・ファウラー
>>629 いや、影響が出ないんだろ
リファクタリングしても動作は変わらないんだから
>>632 はい。正しく行えばリファクタリングの結果、影響はありません。
しかし人間は間違えることもあります。
634 :
uy :2012/06/17(日) 23:13:31.84
>>631 何作った奴?
代表的な製作物のプログラムとそのソースコードPlz
口だけの奴とかいらねーから
635 :
uy :2012/06/17(日) 23:14:41.82
リファクタリング(キリッ)してる奴にもう一度聞きたい
>>623 これなんだと思ってんの?
> これなんだと思ってんの? それを聞かれたのはお前だろw 答えろよ。
>>634 PofEAA書いた人だよ?
知らない? PofEAA
638 :
uy :2012/06/17(日) 23:23:02.66
639 :
uy :2012/06/17(日) 23:23:46.87
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
リファクタリングを世に広めた人を
知らないで、オレオレ定義か。
頭が高いな。uyは控えおろうってのw
[コラム] リファクタリングとは、 最適化することじゃない。 理解しやすくすること。
http://www.tdd-net.jp/2010/10/post-85dc.html リファクタリングを世に広めた Martin Fowler 氏の言葉です。
リファクタリングとは、理解や修正が簡単になるための変更だと私は思っている。
同じ変更でも、目的が異なれば、それはリファクタリングとは言わない。
642 :
uy :2012/06/17(日) 23:28:55.77
>>640 そうじゃなくて
そいつの書いたプログラムの完成品のソースコードが見たいわけで
え、まさか無いの?
うわあ・・・・・・
書籍かいてる奴ってこんなのばっかだよな、こういう本を真に受ける奴はもっとバカだけど
644 :
uy :2012/06/17(日) 23:31:53.70
リファクタリングを世に広めた人wwwwwwwwwwwwwwwwwwww はぁ????????? プログラミングやってれば誰でも極自然に当たり前のようにやっている行為を世に広めたとかすげー勘違いだなwwww
uyは小さすぎるな・・・ 世界も人としても。
つか、モグリだろ? マーチンファウラーを知らないって。 アジャイル方面でも有名なんだけど。
もぐりもなにも…
648 :
uy :2012/06/17(日) 23:35:10.53
>>643 「最適化」って単語はコンパイラが既に使ってるんだよ
だから
>>623 がリファクタリングではないとするならば
「ソースコードの」って前置きを入れてないとコンパイラの最適化とごっちゃになる
どうでも良い作業にリファクタリングとかいう名前付けてる奴はマジでカス
ちなみに
>>623 も別に実行速度を気にして変更したわけじゃないよ
ソースコードを明らかに見やすくするために別記法を持ってきて無駄なソースコード量を減らしただけだよ
リファクタリングとは、テスト工数を最適化することじゃない
少なくとも、マーチンファウラーは まつもとゆきひろと同じ舞台にたってる人だよね。
>>648 素人さんは、基礎を
どうでも良い作業と言うよね。
プロは名前のつけかたにさえこだわっているというのに。
652 :
uy :2012/06/17(日) 23:44:37.88
>>651 へー名前の付け方にこだわってるんだ
じゃあ
>>623 は何て名前の作業?
>>650 Matzと同レベとかますます勘違いもいいところだろ・・・
マーチンファウラーの代わりなどいくらでもいる Matzの代わりは1人もいない
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
Matzは糞言語を生んだ糞
656 :
uy :2012/06/17(日) 23:54:28.63
あ、結局
>>623 こういう事をお前らはやらないから名称がわからないわけね
教えてやるよこれが本来のリファクタリングだ
Matzとまーちんふぁうら(笑)が同レベとかいうなら
そんなこといったら俺と並んでる奴がそこら中にいることになるじゃねーか
流石にそれは四捨五入しすぎ
マーチン・ファウラー >>>> Matz >>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>uy
自分がリファクタリングだと思っていたものが 違うとわかり、さらにこんなヤツ知らないと 言っていた人が、リファクタリング分野での 第一人者であることを知ったのって どういう気分なんだろうなw
まあuyは知識も経験も 人並外れて低い 一般人、もとい一般ニートですからw
uyがクズすぎて不等号が足りないだろ
まさにuy=ウンコ野郎だな 名が体を表してる
uyって誰? ウンコ界の有名糞?
663 :
uy :2012/06/18(月) 00:29:36.33
何時かにも言ったけど きたねーおっさんが下ネタいっても、きたねえだけだからな お前らは外見も思考もゴミなんだから、品くらいもてよ
ウンコ野郎まだ生きてたのかよ
665 :
uy :2012/06/18(月) 00:34:04.66
そもそも昔は高機能IDEなんて無かったんだから
手動で
>>623 これやってリファクタリングって言ってたに決まってるのに
ここまで言わないと気づけないとか流石にひねくれを超えて
酔っ払いでも相手にしてる気分だ
まぁお前らはIDEをマウスでカチカチしてリファクタリングしてれば良いと思うぞ
いや割とマジでそう思う
ソースコードをかけないお前らは、極力ソースコードを書くべきではない
俺はソースコードが書けるから、ソースコードを書くだけで
別にお前らにそれは強要しない
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uy先輩は世界を震撼させるゲームを作っておられるのだ。 rubyでw
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
669 :
uy :2012/06/18(月) 00:39:32.44
一瞬でゴミみたいなスレになったな uy>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matz>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>マーチンファウラー(笑) だって、言ってるのに Matz == マーチンファウラー(笑) などとすると不等号が一気に省略されて uy>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Matz == マーチンファウラー(笑) たったこれだけの差になってしまう これはアバウトすぎ
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
671 :
uy :2012/06/18(月) 00:43:14.85
何時かにも言ったけど きたねーおっさんが下ネタいっても、きたねえだけだからな お前らは外見も思考もゴミなんだから、品くらいもてよ きたねえおっさんと言われて カチンと来ちゃったか 事実なのだから仕方ないよ ようはそのきたねえ事実をどのように包み隠すかである それが下手な奴をゴミと言う
はいはい、たいしたプログラムも書けないクズのくせに
673 :
uy :2012/06/18(月) 00:45:18.70
あ、そっか 月曜日か さて、俺はゲーム製作の続きでもするかな
なんで、自動でできる(簡単な)リファクタリングの話をすると 自動でできるものだけがリファクタリングと思っちゃうわけ?yuちゃん。
>>623 がまったくリファクタリングになってない件。
むしろ逆のことをしているww
コテ付けろよ
持ち上げるっていうか、普通に有名な人だよね? 設計周りやっててこの人のことを知らないなら 本当にモグリだから。 世界レベルで見ればMatzよりもはるかに有名。
>>623 を正しくリファクタリングするなら
def str2hash(str)
Hash[ *str.split ]
end
p str2hash("blue 青 white shiro\nred aka")
680 :
uy :2012/06/18(月) 01:13:08.55
>>679 バカじゃないの
str2hashってメソッド自体
Rubyで宣言するアホはいない
それでも一度使われてしまった以上は、 リファクタリングでは残します。
いや、リファクタリングは残すとは限らず、 残した上で、新たなメソッドを作り、メソッドの委譲を行なってから テストもちゃんとやって、既存のコードを修正していって、 最終的にどこからも使われなくなった時に消しましょう。 という流れね。 これも絶対ではなくリファクタリングのやり方の一つでしか無いけど。
それでも関数化してある箇所を 呼び出してる箇所さがしてわざわざ関数を使わない形で展開しまわるアホは居ない。
> 最終的にどこからも使われなくなった時に消しましょう。 最終的にどこからも使われなくなったって 動的言語でどうやって判断すればいいのかな? テストを実行すればわかるというけれど そのテストが完璧であるということはわからないし。
>>683 > 呼び出してる箇所さがしてわざわざ関数を使わない形で展開しまわるアホは居ない。
これもまたメソッドのインライン化という
リファクタいリングだよ。
なぜ、アホだと思うか
その理由のほうが興味深いよねw
それはよほど特殊な場合だろ
>>686 一箇所からしか参照されてないのであればの話だろ。
>>688 複数ヶ所から参照されていても
何の問題もない。
つか、メソッドのインライン化って
機械的に出来る簡単な作業でしょ?
>>689 関数が複数個所から参照されているなら、
わざわざ手動でインライン展開なぞせんわ。
なぜなら抽象度が落ちるから。
やるやらないはともかく、変換自体はIDEで出来るよ、静的言語ならね まあ、そんなステキなIDEがあったとしても Ruby >>>>> 超えられない壁 >>>>>>> Java, C# なんですけどね、マーティン・ファウラー氏の中では
>>690 話の流れわかってないでしょw
>>623 みたいにまずいコードがあった時に
プロジェクト全体をいきなり全部書き換えるのではなく、
リグレッションを起こさないように少しづつ変えましょうねって話だよ。
メソッドの委譲を行なってからメソッドのインライン化で
消していくという作業の話。
>>691 そんなことをいうと、
uyがマーチン・ファウラーを
敵として認識すればいいか
見方として認識すればいいか
わからなくなるだろw
複数個所から参照されてるってことは、
重複したコードを纏めてあるってことだろ。
手間かけて展開して回るアホは居ないわ。
>>623 に関しても同じ。
リファクタリングは
>>679 まで。
695 :
uy :2012/06/18(月) 02:07:00.73
リファクタリングですらないものをリファクタリングと呼び続ける愚か者たち
696 :
uy :2012/06/18(月) 02:12:10.35
一度使われたメソッドを残すのはいい
俺が言ってるのは
str2hashとかいうメソッドは、たかが例題の答えとしてでも残すべきではない
俺は最初からstr2hashという無駄メソッドはいらないという主張も
>>623 のソースコードに込めてる
つうか何?結局リファクタリング(笑)厨は
>>623 をリファクタリングと認めてるわけじゃん
ほんとに矛盾した事しかいえない酔っ払いだな
無駄かどうかは分からない。 将来的にstr2hashの実装を変えたくなるかもしれない。 複数個所から呼ばれているのなら、 それだけで重複したコードを纏めているという意味がある。
str2hashという関数が無駄に見えるのなら、はじめから書かないこと。 もし、書いてしまって、そして複数個所で使ってしまったのなら、もう後の祭り。 わざわざ展開して回る価値も無い。
そもそもstr2hashなんて 名前をつけた奴が馬鹿なだけ。
結論:uyはこの上なく馬鹿
>>699 JavaならListOfStringToHashTableWithStringKeys
htmlspecialchars 何をする関数か分かりやすい関数名 読みやすいし 他言語も見習いたまえ
でも見習ったら htmlspecialcharsの第一人者が来て「これはhtmlspecialcharsじゃない」 って言い出して分かりにくくなるんですよね
どこが分かりやすいんだよ馬鹿w
型を書けばチェックされて、省略したら動的になって 全体コンパイルもインタプリタ実行も出来る言語って無いの?
配列の宣言と初期化が同時に出来ない言語なんて誰が使うかよ
708 :
uy :2012/06/18(月) 12:22:37.98
rubyの問題点はさぁ 大規模開発においてスタティック変数がバグの元になるから、スタティック変数をなくすっていう見解はいいんだけど その前にruby(動的言語)で大規模開発をするのがあらゆる側面から見てきついのに 先にスタティック変数なくして、一部の自由度だけを下げてる まだ言語が未完成である事が一番の問題 あとはスタティック変数の代わりの機能や書き方っていうのが提示されていない気がする 俺はその代用品となるモジュールを書いたら普段は使わないメソッド使いまくりでかなり複雑になった だから普通はメンバ変数などをその代わりに使うしかなくなってる 名前に気をつければ衝突とかしやしないし アルゴリズムを推敲していけばスタティック変数はなくせるわけだけど、 考えるのが面倒くさい時には結局 @変数の無茶な使い方をする しいていうなら @変数の保護機能のようなものがない気がする @vという変数をaメソッド内では変更してもbメソッド内では絶対に変更しないし参照もしないって場合においても 普通に@vが参照される 変数宣言のいらない動的言語ではこれが最も致命的 def v= nの中にcallerでも見ながら何か変数@vの使用条件を仕込めば保護機能の持った変数は作れなくはないけど、それをやるのかね?
Rubyの問題点は、uyが使ってる、という点
710 :
uy :2012/06/18(月) 15:42:54.82
なんとなくそれは俺も思う しかし本当に2ch荒らした程度で揺らぐとかだったらアホらしい 2chにきてる奴のレベルが低いんじゃなくて 本当にレベル低い奴しかいないからネットの2chのレベルも下がるんだね 少し落ち着いたら本当にLisp行く
>少し落ち着いたら 善は急げですよ
ここにも来ないでください。お願いします。本当に。
そりゃグローバル変数のことかww
オブジェクト指向言語Ruby。
715 :
uy :2012/06/18(月) 16:57:08.83
死にます
シングルトンも知らんとか
スタティック変数ってなんなのかわかってねぇ…
スタティックとグローバルの違いも知らないとか
719 :
うy :2012/06/18(月) 17:48:08.11
>>716 何の意味でシングルトンっていったかしらんけど
解決策はそれであってる
ただスタティック変数がちょっと1個ほしかっただけでも
何らかのシングルトンの仕組みを導入しないとならない
720 :
uy :2012/06/18(月) 18:33:14.19
例えば、これはlambdaの再帰をする関数です def 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を綺麗になくす事は出来る、ただしなくそうとするとおよそ数十行の特殊な術式を書かなければならなくなる 基本的に、誰もそんなものを書いたりはしないので結局は以下のようになる
721 :
uy :2012/06/18(月) 18:35:23.49
module Recursion def 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を使わざるを得ない
722 :
uy :2012/06/18(月) 18:45:55.87
しかし recursion に 状態を持たせるというのは、 バグの元になる だからMatzはスタティック変数を消した 惜しい!!! そこまではいいが、代わりを用意していない 俺様が提示するその代わりとは recursionメソッド をインスタンスとして見立て module A def self.extended ここで recursion を生成 end end class C end b = C.new.extend A b.recursion # ここでrecursion使える こうする方法 この方法まで提供してようやくスタティック変数はいらなくなる
>>708 class 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
724 :
uy :2012/06/18(月) 18:51:12.85
つまりextendする度にrecursionはその都度生成される recursionは任意の状態を持っているので、後から破棄しなければならない だからオブジェクトのインスタンスとつなぎ合わせてオブジェクトの破棄とともにrecursionと、recursionのもった状態ごと破棄する これでスタティック変数のように見える状態変数もただのインスタンス化に成功しているので スタティック変数に潜むバグは発生しない
725 :
uy :2012/06/18(月) 18:54:10.22
>>723 それで考えは合ってるよ
ただcount_procのように状態をもった関数は他にも沢山欲しくなる
そのたびに、そんなに長々と毎回書かなければならないのだろうか?
実際必要な情報は
counter=0
lambda{ counter+=1 }
この2行だけなのに、そのクラス定義は冗長すぎる
> ただcount_procのように状態をもった関数は他にも沢山欲しくなる これが根本的な間違いだろうな。 普通そんなの欲しくならない。
動的言語の問題点は グローバル変数と同じ問題点なんだよね。 動的にどこからでもあるクラスを変更可能ってことは どこで何をされるかわからない。 という点でグローバル変数が抱えている問題と全く同じ。
728 :
uy :2012/06/18(月) 19:01:22.51
>>726 作るプログラムによる
たとえばキーボードのZキーを5秒間押してみるがよい
zzzzzzzzzzzzzzzzzzzz
↑ 0.5秒程度まってから連打されただろう
↑ これと同じ動作をプログラム上で実行しようとしたら
0.5秒をカウントする状態変数が必要になる
探せばいくらでもでてくる
> 0.5秒をカウントする状態変数が必要になる 必要なのは状態変数だね。 状態を持った関数とは言わなかったね。
俺なら0.5秒に発火する割り込み使うから状態変数いらないなw
端的に言って、recursion が、
呼び出し終了後も次回に備えて状態を持つのなら、
状態を持つ=オブジェクト なので、
recursion をオブジェクトにすればよい。
特に関数としての性質が強いものなら、
関数をどうにかしてオブジェクトにすれば良い。(いわゆる関数オブジェクト)
Rubyでどうするのかは専門外なので詳しくは良く知らんが、とりあえず、
>>723 のようにすれば、状態を持つlambdaオブジェクトは作れた。
counter = Proc.new{ counter=0; lambda{ counter+=1 } }.call
上記がそんなに長いとは思わん。
732 :
uy :2012/06/18(月) 19:07:53.78
>>727 しいていうなら変数宣言がない時点で
グローバル変数の問題よりももっと上だから
・どこで変更されるかわからない
・どこで宣言されたかわからない
>>729 言葉遊びをする気はない、そもそもrubyはメンバ変数もメソッドだろうが
>>730 再帰の
>>720 も割り込みで実装してみろよ
733 :
uy :2012/06/18(月) 19:11:20.89
>>731 それじゃ長いんだよ
CやC++でスタティック変数を使わないといけなかった箇所を思い出して見るが良い
スタティック変数は使いまくりだから
あとよく見たらそれProc.newで囲う必要なくて
counter=0
@count_proc = lambda{ counter+=1 }
だろ
>実際必要な情報は > counter=0 > lambda{ counter+=1 } >この2行だけなのに、そのクラス定義は冗長すぎる それの前後を Proc.New{ ... }.call で囲むだけだろ。 それだけで独自領域を持ったlambdaが作れる。 確かにちょっと冗長だが、我慢できる範囲だと思うが。
uyのレスが長ったらしい
クロージャーに落ち着いたの
737 :
uy :2012/06/18(月) 19:17:15.91
>>734 いや・・・考え方としては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
ただのクラスだなw
>あと、状態を持った変数はちゃんと外部からも見れるようにさせないといけないから、 それなら普通にクラスで書いたほうが速い。 class CounterClass2 attr_accessor :counter def count; @counter+=1 end end
740 :
uy :2012/06/18(月) 19:34:00.37
結局うまい事かけなければクラスで書いとけば安定はするよ けどソースコード量的にはゴミカス カウンターの定義など本来これでいいはず counter =->{c=0;->{c+=1}}.call p counter.call p counter.call ネームスペースが欲しい
色々端折って短く書ける言語があったらいいねって話しなの? cls CounterClass c = 0 count = { c+=1 }
742 :
uy :2012/06/18(月) 19:38:42.38
そうだよ たかが数文字のスタティック変数の代用品として クラス定義をしなくちゃいけなくなってるから 別に完璧じゃなくてもいい使い捨てスクリプトでは def func @a ||= なにか end こういう事も普通にやってしまう
ソースコードの量にこだわっている奴は 仕事ができない奴が多い。
744 :
uy :2012/06/18(月) 19:40:19.59
100万行のソースコードでも管理しててください 俺は1万行に抑えたソースコードを管理する
>>742 つまり大規模開発の話でなく使い捨てスクリプトの話だと
スレタイ読んで落ち着いたらLispに行けばいいよ
746 :
uy :2012/06/18(月) 19:49:22.03
>>745 そう回避したか
けど使い捨てと思ってかいたスクリプトも
その断片を大規模開発で使う事もあるわけで
恥ずかしいからってムキになんなよ。もう25にもなんだからさ。
使い捨てのつもりで書いたゴミを積み重ねて 大規模なゴミを作る uy style テスト工数が増大ってレベルじゃないなw
で、お前が思ってるスタティック変数ってな具体的にどういうものなんだよw
$vvvってすればいいんじゃないかな…
def newcounter c=0 lambda{c+=1} end counter = newcounter p counter.call p counter.call
つまりRubyにも簡単に扱えるクロージャが欲しいと。
753 :
uy :2012/06/18(月) 20:04:58.13
>>750 それもひとつの手
$iroiro_ireru_hensuu = Hash.new
とかやって状態を保存してしまう
俺様はC++をやっていた頃
スタティック変数は全てのポインタをグローバル変数で保持し(おそらく最近の言語でいうリファレンスっていうのと同等の機能)
それらがいらなくなったらスマートポインタのようなもので0初期化する仕組みでやっていた
ようは「寿命つきスタティック変数」が欲しいのだよ
俺はrubyではその寿命をオブジェクトに束縛する為に
a.extend A
などという方法でスタティック変数(意味的にを持ったメソッドに寿命を作ってる
クラス変数あんだからいいじゃん。
755 :
uy :2012/06/18(月) 20:08:07.19
いや、最初からインスタンス変数ってそのオブジェクトに付いてる「寿命があるスタティックw」変数だろ。ナニ言ってんだ?
757 :
uy :2012/06/18(月) 20:10:58.67
>>752 クロージャで解決できるの?この問題?
>>754 精神衛生上の問題
クラス変数で
def test
@@__(メソッド名)__ ||= でーた
end
とかいう風に使っておけば多分名前衝突はしないけど
それでも「多分」だよ 動的言語には変数宣言が存在しないから
758 :
uy :2012/06/18(月) 20:12:02.87
uyはコード量より文章量を減らせクズ
自演乙
evalしとけばいい話?
クロージャー → 複数のメソッドからアクセスしたい クラス変数 → メソッド内に限定したい 統合失調症
ホンモノ置き去りにすんなよw
765 :
uy :2012/06/18(月) 20:24:37.83
>>761 外部から見えるように(裏方)でやってくれるのがベストだよ
>>762 メソッド内にクラスかモジュールが定義できればevalでもいけた
def recursion *h, &block f = 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
767 :
uy :2012/06/18(月) 20:32:48.94
>>766 ちょ・・・
凄いなにそれ・・・・・・・・w
そっか、再帰の場合は引数に与えてしまえば状態変数いらなかったね
できるだけuyのやつを変更せずにCommon Lispで、 (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)))))))
でもそれで全体が短くはならんよな…
確かにRubyの変数スコープまわりはダサイいとは思うけどな。 まず動的言語なのにオブジェクトと実行コンテキスト(フレーム)に区別がある時点で。 あとはシンボル名の検索チェーンをプログラマが勝手手前に制御できるようにしておけば、 継承だろうが多態だろうがラムダだろうがクロージャだろうが、自由が利くのにな。
772 :
uy :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
そんなことも知らないのかよ 恥ずかしいやつ
>>772 uy的に分かりやすく言えば、
子オブジェクトから、親オブジェクトのメンバを透過的に
見えるようにする仕組み。
まあ、これでも分からないだろうな
776 :
uy :2012/06/18(月) 21:55:51.00
子オブジェクト、親オブジェクトって、何よ 継承関係の事? self.class.ancestors[-1].send(:print , 33) こういうのじゃなくて? マジプログラマの使う日本語は不可解だからソースコードで喋って欲しいんだけど
777 :
uy :2012/06/18(月) 22:02:43.64
いや、Rubyで多重継承や多態などの存在しない機能を Rubyソースコード上だけで実装する為の何かって事? もう無理だ
oya.oya_member oya.ko.method{ oya_member OK }
779 :
uy :2012/06/18(月) 22:09:56.42
class Oya attr_accessor :x def initialize @x = 3 end def ko yield self end end Oya.new.ko do | o | p o.x end これ?
そうそう。 俺に言わせれば、クロージャやラムダで出来るのに、 オブジェクトで出来ないのはおかしい。動的言語の癖に。
781 :
uy :2012/06/18(月) 22:18:44.77
class Oya attr_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はクローヤじゃラムダもオブジェクト
782 :
uy :2012/06/18(月) 22:19:14.29
クロージャやラムダ。 俺まで日本語がおかしくなってきた
783 :
uy :2012/06/18(月) 22:23:56.46
もういいや、なんとなく言わんとしてる事はわかった気がする
class Oya attr_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
メソッドチェーンと変数のチェーンを区別する理由は グローバル関数は良いけどグローバル変数は駄目ということにしたいからですよ
786 :
uy :2012/06/18(月) 23:00:33.94
理解した moduleにしていいなら出来るけどクラスは多重継承とか、クラス宣言した後に継承も出来ないしな 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
>>786 そのコードだと、親側の更新が子側に反映されないから微妙。
a = Oya.new
a.x=1
p a.ko.func #=> 3
788 :
uy :2012/06/18(月) 23:42:57.81
それ以上いくとmoduleで全部書き直すことになってrubyじゃなくなる module 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
789 :
uy :2012/06/18(月) 23:46:08.78
寝ぼけてるわ
>>788 のコードはなんでもない
もう眠すぎる
動的言語って自由度が高すぎるから
ついつい邪悪なコードに走りがちになるな。
静的言語なら真っ先に
>>766 に行き着くのに。
変数のgがどう考えても邪悪だろ
Java, C#が真っ先にstaticおじさんに行き着くわけがない
793 :
デフォルトの名無しさん :2012/06/19(火) 06:04:50.81
その気になれば変数gは消せるだろ Haskellで書けばこうだし recursion h f = f (flip recursion f) h
いやいやスレの趣旨的に親の変数とそれに関連した別モジュールが 連動しあうとか…それデバッグしにくいじゃない…
シンプルに書けるなら 状態持たせたり連動させたりする必要無いだろ 依存関係が多い方がデバッグもテストも大変
>>767 > そっか、再帰の場合は引数に与えてしまえば状態変数いらなかったね
マジ常識だからw
>>796 初心者にそれを要求するのは酷だと思う。
799 :
uy :2012/06/19(火) 11:43:23.56
ruby、lambdaの再帰でググって誰一人やってないからソースあげてんのに何いってんだ それよりも、そのg変数の挙動は素直に凄い 確かに考えてみればそれで動くわけだけど g = nil 消しても動くというキチっぷり
800 :
uy :2012/06/19(火) 12:33:26.47
def 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がつかえね
801 :
uy :2012/06/19(火) 13:25:27.09
http://ideone.com/9Du4H さて同じ処理をかいて並べてみると
combinatorよりも
recursionのほうが明らかに短い実装だとわかったわけだけど
Yコンビネータ(笑)どうしたらいい? Yコンビネータ(笑)定義した奴だれだよ
え?ハス・・・ハスケル?カリーwwwwwww
このYコンビネータ(笑)って。大学とかで教えまくってるんですか?
へえ・・・・
うんうん凄いね、よく頑張ったね combinator f = f (combinator f) g = combinator (\f n -> if n == 0 then 1 else n * f (n - 1)) main = print $ g 6
uyがゴミカスなのが丸分かりである
804 :
uy :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で置き換えられます
805 :
uy :2012/06/19(火) 13:53:07.03
ググるとYコンビネータのゴミカスみたいなソースしかでてこないけど量は多い そんだけ大勢が考えててこの答えにたどり着かないとかw 本当にコピペ厨しかいねーんだな
>>804 a.call 6 か a.call 7 で 100000回のループ?
それでそんな時間かかるの?
def comb n if n==0; 1 else n*comb(n-1) end end p comb 7 #=>5040 proc = lambda{|n| if n==0; 1 else n*proc.call(n-1) end } p proc.call 7 #=>5040 バカス
808 :
uy :2012/06/19(火) 14:15:29.81
7で、再帰の宣言構文のdo〜endまで囲って100000回のループ
809 :
uy :2012/06/19(火) 14:19:28.54
810 :
uy :2012/06/19(火) 14:26:15.49
一瞬凄いと思ったけど 結局変数を外で宣言するかブロック内に宣言するかの違いだった lambda内でlambda.callとかで再帰できるようになるのが一番良い 所詮言語側が実装するまでの遊びにしか過ぎない
811 :
uy :2012/06/19(火) 14:46:54.11
def rec &b f = ->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 やはりブロック外の変数は無理に参照しないのが好ましい
>>811 それって、ラムダの引数の数が変わると、recの流用ができなくなる。
素直に
a = Proc.new{
f = lambda{|n|
if n==0; 1 else n*f.call(n-1) end
}
}.call
p a.call 7
って書いたほうがまし。
813 :
uy :2012/06/19(火) 16:00:29.23
t = lambda{|x| lambda{|y| x}} f = 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使うとかバカじゃないの? これもどうせハスケル(笑)カリー(笑)が定義したものなんだろ ほんとにゴミしか作ってねーな
814 :
uy :2012/06/19(火) 16:03:04.14
>>812 ああ、*nにしといて
つうかそもそも使いやすいシンタックスのlambda再帰が欲しいわけで
ゴミカスの代名詞uyが何を言ってるんだか
816 :
uy :2012/06/19(火) 16:48:37.40
lambdaでifは出来ないな 出来るとかいってる奴はそんなのはハードウェアの条件分岐の仕組みがわかってない 四則演算とループは再帰で直せる Yコンビネータはとりあえず認めてあげよう ゴミではあるけど遠い将来に役立つかもしれないゴミだ
>>813 >>816 それは真偽値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")
818 :
uy :2012/06/19(火) 17:07:01.58
見てたサンプルが悪かったらしい 一応出来るな あー・・・これあれだ
819 :
uy :2012/06/19(火) 17:40:07.57
ずっと何の役に立たないゴミ=uy
821 :
uy :2012/06/19(火) 18:02:59.35
>ruby -e 'puts "ずっと何の役に立たないゴミ=
>>820 ".insert 7 , "も"'
ゴミカス
337 デフォルトの名無しさん 2006/05/18(木) 03:31:05 小説全体を全部一つの文で書くのが関数型。 分かりにくいのは当然。
これが関数型 しかし、RubyとRailsの限界に気がついてしまいRubyのランタイムは 非常に遅いため、Rubyで作成したアプリケーションの納品をためらったことがあり Rubyはプロトタイプ作成用に使い、納品用にJavaで作りなおさなければならなく RubyとRailsのプロジェクトが数千行の規模を超え、チームに新しいメンバーを追加したときに、 動的言語の問題が明らかになって来て私たちはコーディングの時間の半分をテスト作成の 費やさなければならなりRailsによって得られた生産性の向上は、テスト作成の作業に 失われ作成したテストの多くは、Javaであれば不必要なものでテストの大半は、 リファクタリングによってメソッド名やパラメータの数を変更した際に、呼び出し元が 正しく変更されているかを確認するためのもので また、Rubyでもチームメンバーが2名から4名であれば、メンバー間のコミュニケーションは 非常にスムーズでしかし新しいメンバーをチームに参加せせようとすると、 これまでチームで培ってきたノウハウを新しいメンバーにうまく伝えることが出来なかったのです。
気がついてしまった $ 限界に $ RubyとRailsの $ しかし
ひとと比べられたくない、って理由でここまで逃げるもんなんだねぇ。
827 :
uy :2012/06/19(火) 19:56:10.07
逃げるも何も 大学行かなかったことに後悔しかねえよ アホか まぁ大学で何日もかけて授業してたであろうラムダ計算は今日一日で覚えた 俺が考えてた構想にラムダ計算はかなり近い ただしやっぱ出来るとはわかってもIFは冗長な気がするな プログラミングにおいて条件分岐そのものがやはりいらないのではなかろうか
×大学行かなかったことに後悔しかねえよ ○馬鹿だった
まだ25歳なのにもう後悔してるとか、それこそ生きてる価値ねえな さっさとラクになっちまえよ
え? この程度のλ入門なら一日どころか一コマですが。
831 :
uy :2012/06/19(火) 20:28:59.30
いいや 人生の別ルートが少し気になっただけで 大学なんていっていたら今の広域の知識は得れていない事は事実 少なくとも俺が大学にいっていれば、世に役立つものばかりを作り 多大な時間を他人のために使っていき、今のようにはなっていなかっただろう そこは救われた所でもある 他人行儀に生きた瞬間に人生終了
832 :
uy :2012/06/19(火) 20:30:38.77
>>830 別にこのスレにかきながら勉強してるわけじゃないから
30までは生きないんだからあと最高で五年か。 今までの五年でしてきたことを思うと… あのコにはやっぱ気付いてもらえないかなw
しかし、いくらuyがアレとは言え 下らないコード書散らして日銭稼いでるドカタが 上から目線ってのもなんだかなぁ
>>831 えともしかして、自分はできる子だって
勘違いしてる?
>>834 ドカタだって税金や年金は払ってるからね
まだ25なんだし、これから大学行けばいいんじゃ?遅くないよまだ。
838 :
uy :2012/06/19(火) 21:14:53.28
俺は、人ではないから 人間の通う学校にはもういけない
人でなければ人とは比べられないしな。
人n
みんな弱者だと分かったとたん優しいなw
838 名前:uy[sage] 投稿日:2012/06/19(火) 21:14:53.28 俺は、人ではないから 人間の通う学校にはもういけない 971 名前:uy[sage] 投稿日:2012/06/19(火) 21:30:59.90 お前らが言うように、俺は確かにゴミカスだ
843 :
uy :2012/06/19(火) 22:51:43.64
gomi
844 :
uy :2012/06/20(水) 01:54:44.18
死にます
他人行儀?なんでそこで?
846 :
uy :2012/06/20(水) 11:04:30.49
誰かの為や誰かに認められる為に生きたら俺の中で終わり 大学いっていたらそうなってた可能性の方が強い
847 :
uy :2012/06/20(水) 11:54:21.25
つまり俺はゴミカスだがエリートゴミカスだ お前らのような下級ゴミカスとは格が違う
848 :
uy :2012/06/20(水) 12:11:10.99
ゴミ
849 :
uy :2012/06/20(水) 15:56:41.45
ゴミ
あれ、認められたいひとはいたんじゃなかったっけ?
それを他人行儀とは言わんぞwどっから持って来たww
852 :
uy :2012/06/20(水) 16:45:14.93
とにかく俺はゴミカスだ
853 :
uy :2012/06/20(水) 18:39:39.03
お前の文章理解力がないからって 一々言葉を説明しないとわからないとか会話が不可能なレベルを超えてるわ 二度と話かけんなよ
854 :
uy :2012/06/20(水) 18:45:22.46
俺はゴミカスだがエリートゴミカスだ お前らのような下級ゴミカスとは格が違う
お前も デフォルトの名無しさん に話かけるの禁止な
856 :
uy :2012/06/20(水) 19:04:51.84
話しかけてるわけじゃない レスしてるだけだ
857 :
uy :2012/06/20(水) 19:07:43.98
仲良くしようぜ!
858 :
uy :2012/06/20(水) 19:18:43.64
誰がお前らのような下級ゴミカスと仲良くするかよ 俺はエリートゴミカスだぞ
これがホントの役立たずだな。
860 :
uy :2012/06/20(水) 19:33:24.91
何だと? もう一回言ってみろ
これがホントの役立たずだな。
イザナミだ
863 :
uy :2012/06/20(水) 19:49:27.88
ファック!!!!
いーんだよ、どうせあのコに気付かれなきゃ役立たずだって。 むしろあのコがいない世界で認められたくなんかない、いくら俺にチカラがあっても。 ってかぁwwwwハラいてぇwwww文春wwww
久しぶりに がんばれがんばれuy
866 :
uy :2012/06/20(水) 21:39:13.52
お前らは愛というものをわかっていないから それを知らずに死んでいく事だけは避けろよ この世界には何も残らない 人は死んだら何も残らず、 もっと抽象的に言えば、この星は数千万年後に星ごと消滅する では、何も残らない中で何をするか? 現実から目を背けろよ
867 :
uy :2012/06/20(水) 22:35:27.30
俺はゴミカスだがエリートゴミカスだ お前らのような下級ゴミカスとは格が違う この現実だけ受け入れればいい
868 :
uy :2012/06/21(木) 00:25:53.11
ゴミ
>もっと抽象的に言えば、この星は数千万年後に星ごと消滅する どこが抽象的なんだろ?
870 :
uy :2012/06/21(木) 04:26:14.68
ゴミ
871 :
uy :2012/06/21(木) 04:44:53.53
俺はゴミ
872 :
uy :2012/06/21(木) 05:42:39.32
ゴミ
相手に憶えててももらえないのに七・八年も引きずるのが愛なら、いらんだろそんなもん。 つか相手の声もまともに聞かんで愛もクソもたいして変わらんって。
いい加減、静的だ動的だの話題もループしてて 飽き飽きだったが、この流れは流石に...
875 get
876 :
uy :2012/06/21(木) 20:28:10.82
では大規模開発での動的言語の問題点の話に戻ります 動的言語(Ruby)の問題点ベスト5 1位 どんどんオーバーライドされていく 2位 変数宣言がない(利点でもあり欠点でもある) 3位 コンパイル時型チェックがない 4位 実行してみないとわからない事が多すぎる 5位 静的言語よりは速度が遅い 別項目として、開発前や開発後の問題 ・まともに動的言語を扱える技術者が少ない、集まらない ・仕様変更や処理系のバージョンアップによってその瞬間、全ての動的言語のソースコードは正しく動くという保証をなくす
>動的言語(Ruby) ちょっと待てw初っぱなからおかしいだろソレ。
察しの悪いuyもやっと大規模開発では Javaこそが至高の言語ということに気付いたか……
879 :
uy :2012/06/21(木) 21:41:47.14
お前たちみたいに頭の悪い奴に開発やらせるには一生C言語やらせとけばいいかな 俺はこのまま行くとrubyでのプログラム開発の人柱になるんだろうけど、 今のままでは絶対に後続がついてこない
むしろ頭悪い奴にも使えるというのことはその言語が優れているという証になると思うんだが。
確かに習得の容易さは重要なメリットのひとつ
882 :
uy :2012/06/21(木) 22:20:08.49
作業効率のレベル0〜100までの言語があったとして 作業効率20程度しかでない言語を扱える奴が 世界で一番人口が多ければその言語が優れている優れていないかにかかわらず使われるようになるんだよ 世界で最も大勢に使われることを目標に作られた言語ならば、それでいいんだろうが 頭のレベルが平均以下の人間にも扱える言語にしてやらないと言語の人気を取れないから 効率的プログラミングとは程遠い言語が出来上がる 何をしたいかによる 俺は世界のプログラミングの効率水準を上げたいだけ
883 :
uy :2012/06/21(木) 22:28:04.18
さらに「こんな難しい言語使ってる俺すごい」 みたいな妄想に酔いしれたがる層もいる BrainFackで何かプログラム作ろうって意欲と、C++で何かプログラム作ろうって意欲は同じだと思える 別の例でいえば、使いこなすのが難しい技法や道具であえて競技しようとするスポーツ選手など。 あえて逆側に突っ走る奴もいる もはや、まともに考えるだけ無駄である
お前がやってるのは他人を下げて自分を上げてるように見せてるだけ
885 :
uy :2012/06/21(木) 22:32:12.84
つまり、俺はゴミカスだがエリートゴミカスだ お前らのような下級ゴミカスとは格が違う
「平均以下の人間にも扱える言語」も「使いこなすのが難しい言語」も 要するに自分基準で分類してるだけじゃねーか uyにとって丁度良い難易度の言語がRubyだったってだけだろ
887 :
uy :2012/06/21(木) 23:16:28.93
rubyは難易度で選んでるわけでもないな 俺は効率の出る概念なら難易度関係なく理解する それが出来ない奴らは身の丈にあった言語を使えで結論付いた
888 :
uy :2012/06/21(木) 23:45:29.26
要するに、俺はゴミカスだから、ゴミカスrubyが合ってる
889 :
uy :2012/06/21(木) 23:46:48.34
お前いつまで続けんのそれ お前にuyの名は背負えない
890 :
uy :2012/06/21(木) 23:58:49.61
偽物がいるが話を続ける そもそも言語に難易度などない それすら分からない奴らは下級ゴミカス
891 :
uy :2012/06/22(金) 00:15:21.65
ゴミ
892 :
uy :2012/06/22(金) 01:06:36.66
ゴミ
893 :
uy :2012/06/22(金) 02:11:30.49
ゴミ
894 :
uy :2012/06/22(金) 04:55:44.31
ゴミ
人柱ねぇwどんだけあのクソコードをダウンロードした奴がいて、 質問なりこれすげぇ言ったのがいることやら。 流されちゃ人柱にもならねぇよ、役立たず。って本望だからいいのかw
まさにゆとり
人は、有能/無能と勤勉/怠惰の組み合わせで4タイプに分けられる それぞれのタイプ別に 有能で勤勉: Lisp, Python 有能で怠惰: Haskell, OCaml 無能で勤勉: Ruby, PHP 無能で怠惰: Java, C# に代表される言語を使うのが向いている
そこにPythonはねーわ
分類させると、どんな言語使って、どんな言語を嫌って、 どんな言語を知らないのか良く分かる。
動的言語のメリットって、つくづく無いよな。 前にも書いたけど、C++だろうがJavaだろうが、 辞書クラス使えば、簡単に動的言語相当のことは出来るからな。 動的言語は、実行時に色々なことを解決するから動的なわけだけど、 そういうコードは静的言語でも書けるんだよ。 実行時の動作を制御するのはプログラミング言語の本分だからな。 逆に 静的言語は、コンパイル/リンク時に色々なことを解決するから静的言語なわけだけど、 そういうコードは動的言語では書けないんだよ。 コンパイラ自体にそういう機能が無いことには、どうやっても無理。
「Rational テスト仮想化/自動化ソリューション」
テスト期間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)から。
>>901 コンパイル時にできると思ったがよく考えると実行時でしかできないことがある。
両者を区別すると、どちら側に分類するか判断を誤ることがある。
よく似た例として
動作が変わらない修正 (リファクタリング) と動作が変わる修正を区別すると混乱する。
すべての修正を同じものとして扱うなら混乱しない。
intで出来ると思ったがよく考えるとlong long intでしか出来ないことがある。 両者を区別すると、どちらを使うか判断を誤ることがある。 ってことですか? それはちょっと低脳過ぎやしませんか。
UTF16と思ったらUTF32だったとか
906 :
uy :2012/06/22(金) 14:39:46.35
>>895 お前は効率を理解できないなら黙ってれば?
俺はあのソースコードと3つほどの概念を公開してから1年ネット全体の様子を見た
質問者には全ての知識を与えるつもりで教えた
しかし何も変わった様子が無いから、仕方ねーから俺がやってやるかってだけ
完璧と非完璧と擬似完璧がわかるまで二度と話かけるなよ
907 :
uy :2012/06/22(金) 14:41:48.92
そもそもアレはrubyですら書けてないと何度いえばわかるんだ どうてみてもPython用だぞアレは しかし他の部分おいてrubyがPythonを凌駕しているから仕方なく endの数十連続にもコメントをつけて耐えているだけ やれなくは無い
908 :
uy :2012/06/22(金) 14:43:29.71
で、俺はラムダ計算を知った時にデジャヴがあった ここまでいえばわかると思うが そういう事なんだろ チャーチ数でプログラム組めない奴はだまれかす
THE 発 狂
で、誰も相手にしてくれなかったと。 よかったじゃないか、uyを相手にしないのがあのコだけじゃなくてよww
これで本望だな、役立たずw
912 :
uy :2012/06/22(金) 15:23:36.81
確かに俺は役立たずのゴミカスだ これは認めよう だが俺はエリートゴミカスだ お前らのような下級ゴミカスとは格が違う
ゴミカス中のゴミカスってことだろ。
チャーチ数やYコンビネータって役にたたないけど、 それはそれとして、そういうの書くのが苦手な言語って ようは処理を抽象化する能力に劣るってことだよな。
915 :
uy :2012/06/22(金) 17:32:45.34
役に立たないのではなく どう使ったらいいか人間がバカすぎてわからないだけ 人は数字に弱く、再帰構文にはもっと弱い
uyが役立たずなのは本人の言う通りだな。
917 :
uy :2012/06/22(金) 18:00:59.76
俺はゴミカスだから 人を使うより人にこき使われる存在でありたい
処理を抽象化する能力が高い→テスト工数が増大
処理を抽象化する能力の否定 = コピペプログラムの肯定
抽象化って、この星が数千万年後に星ごと消滅することだろw
921 :
uy :2012/06/22(金) 19:59:58.16
エクストリームメタプログラミングで本人以外メンテ不能END
int main(){ ruby_eval("..."); }
ここで抽象化を笑ってる奴らも、 デザインパターンを否定されたら 顔真っ赤にして怒りそう
デザインパターンが単なる名前付けに過ぎないということさえ理解してないのがバレバレ
え?意味分からん
927 :
uy :2012/06/22(金) 20:24:33.47
ゴミ
>処理を抽象化する能力が高い→テスト工数が増大 抽象化ってのは、関数を使って同じ処理を纏めたり、 インターフェースを使って、データを抽象化したりすることだから、 テスト工数が増大したりはしないよ。むしろ減るはず。 動的言語を使うと、「インターフェースが適切に抽象化されたか」の テストが必要になるからテスト工数が増えるけどね。 ダックタイピングだから、メソッド名typoしててもコンパイラが指摘してくれない。
>>926 デザインパターンを否定されて顔真っ赤にする奴も
デザインパターンを抽象化の文脈で出す奴も
どちらも勘違いしたアホだということ
分からなくておk
デザインパターンは、決まりきったパターンなのに そのパターンをマクロやメタプログラム等で抽象化できずに 繰り返すアホ的行為が多々見られるときに そのパターンに付けられる名前 ちゃんと抽象化に反している
たしかに、デザインパターンが決まりきった雛形なら、 その雛形をテンプレート化してしまえば、 パターンじゃなくて、クラスライブラリだからな。 パターンって言葉は反復重複って意味合いを内包しているわけだから、 プログラミング的には悪い意味だわな。
932 :
uy :2012/06/22(金) 20:42:51.65
ゴミ
エクストリームメタプログラミングで本人以外メンテ不能END
コピペしまくって破綻END(例:特許庁基幹システム開発)
935 :
uy :2012/06/22(金) 21:07:24.90
使いたくないならギャーギャー騒がずに、動的言語使わなければいいな 普段から使ってる奴が、使っていく上で気づいた欠点指摘ならまだしも
936 :
uy :2012/06/22(金) 21:10:24.90
いくら仕事で静的言語しか使わせてもらえないからって 妄想を垂れ流され続けられても迷惑である
>>931 こうですよね?
たしかに、アルゴリズムが決まりきった雛形なら、
その雛形をテンプレート化してしまえば、
パターンじゃなくて、アルゴリズムライブラリだからな。
パターンって言葉は反復重複って意味合いを内包しているわけだから、
プログラミング的には悪い意味だわな。
ん?アルゴリズムはアルゴリズムパターンとは言わんから、 後半のパターンって言葉に対する突っ込みは正しくパクれてないんじゃ。 しかもアルゴリズムも有名どころは関数化もしくはテンプレート化されてるだろ。 クイックソートとか。
アルゴリズムってのは実装コードなんだよね。 デザインパターンってのは、実装コードを どう組み合わせるかという話で実装コードではないから 的外れだな。 同じパターン書いたって、同じコード書かないし。
940 :
uy :2012/06/22(金) 22:25:22.17
あ、そろそろアレ出てくるの?
>>641 こういう「リファクタリングを世に広めた人」とかいう感じの
「デザインパターンを世に広めた人」とかいう奴
でてくるの?
そりゃこれだけ普及してるんだから 広めた人はいるだろうね。
コンピュータを広めた人だって アルゴリズムを広めた人だっているよ。 そういう人は素直に尊敬するべきである。
943 :
uy :2012/06/22(金) 22:41:16.86
>>942 君が尊敬してるのは何人いんの?全員名前覚えて尊敬してんの?
944 :
uy :2012/06/22(金) 22:50:09.79
リファクタリングとデザインパターンを世の中に広めたのは俺だ その根拠をこれから説明していく 耳をかっぽじってよく聞けよ
____ /─ ─\ ホジホジ / (●) (●) \ /::::::⌒(__人__)⌒::::: \ | mj |ー'´ | 穴をかっぽじるんだな \ 〈__ノ / ノ ノ
死ね
死ね
>>939 > 同じパターン書いたって、同じコード書かないし。
もし比較関数を引数として渡せなかったら
ソートアルゴリズムもこう言われてただろう
比較関数は毎回違うからな
違うのは比較関数だけだなw
ファーストクラスの関数が無い言語だと、 比較関数を渡すだけでも冗長なコードが必要になる 当然そのコードは決まりきったパターンを持つ Strategyパターンである
> 比較関数を渡すだけでも冗長なコードが必要になる たかだか100バイト程度だろ? そんなに何度も比較するのか? 冗長な部分はコピペでいいよな?
100バイト入力するのに30秒ぐらい差がつく。 もし比較関数を1000個書けば、 8時間以上も差がつくわけだが。
コピペは後に響くだろうから嫌だしなあ
そんなに入力するなら、コードジェネレータとか 設定ファイルからの読み込みか作るわw 下手に短く書ける言語って その場で書いて関数にしようとしないよな。 で同じようなコードがたくさんできると。
> そんなに入力するなら、コードジェネレータとか > 設定ファイルからの読み込みか作るわw そして行き着いたのがXML地獄ですね
XMLがいやなら、他の形式にすればいいじゃない? 頭が硬いね。
957 :
uy :2012/06/23(土) 06:09:49.52
下手に短くかける言語っていうのは、 「短く書く為の」構文が既に最初から処理系に備わっているわけで それは静的言語使ってる奴が一生懸命使いやすいように作った関数が、最初からあるみたいな、そういう次元 静的言語はよく動的言語には最初からあるものの車輪の再発明をしている 設定ファイル(笑) って プログラミングにおいての最終手段だよな ああ、こういうのを無能な働きものっていうのか、確かに言語の機能内で上手に出来ない事があるからって ソースコード外まで安易に散らかすような奴は処刑するしかない
958 :
uy :2012/06/23(土) 06:13:16.57
XMLがいやなら、他の形式にすればいいじゃないwwww 頭悪いね。
一方、頭の柔らかい人は そんなものに設定ファイルなんて不要な 短く書ける言語を使った
設定ファイルの形式をXML以外にしよう -> どうせなら設定ファイルにプログラムも書けるようにしよう -> 凄く短く書けるようになったので、設定ファイルに全部書くようにしよう -> 動的言語の誕生
961 :
uy :2012/06/23(土) 06:27:25.48
>>960 それ俺がC++しか使ってない頃に設定ファイル使って、そこから動的言語に辿り着いた時の思考だわ、懐かしい
静的言語厨はリアルでその頃の俺のレベルで停滞してる奴がいそうだからかかわりたくない
962 :
uy :2012/06/23(土) 07:01:51.83
まあ俺は停滞どころか急降下してるが
C++しか使ってない頃ww Cの課題ができなくて泣いた前かw
964 :
uy :2012/06/23(土) 07:20:05.36
ゴミ
静的言語に都合の悪い流れになると uyを攻撃してウヤムヤにする というデザインパターン
966 :
uy :2012/06/23(土) 07:43:39.59
俺はゴミカスだがエリートゴミカスだ お前らのような下級ゴミカスとは格が違う
静的言語が都合が悪くなるわけないじゃん。 辞書クラス使えば静的言語でも動的言語相当なプログラミングできるんだから。 静的言語⊃動的言語
968 :
uy :2012/06/23(土) 09:06:18.34
静的言語はゴミ
動的言語は静的言語の機能削減版でしかないのに。
970 :
uy :2012/06/23(土) 09:12:50.97
ゴミ
動的言語は設定ファイル代わり使われるのがお似合い
反論できなくなったからってww 動的言語の機能を持った、ハイブリッドな静的言語ってあまり見ない。 あってもよさそうなのに。なぜ無いか。 それは、辞書クラス使えば簡単に同等のことが出来るからwww 逆に動的言語ではどう逆立ちしたって静的言語と同等のことが出来ない。 なぜならコンパイラにそういう機能が備わってないから。 手抜きコンパイラww
設定ファイルや小物に向いているものを大規模開発に使った結果が
>>1 の有様
静的言語の素晴らしさを実証するために Javaでコンビネータを書こうとしたが あまりの冗長さに断念した…… 「原理的に出来る」と「簡単に出来る」の差をまざまざと見せつけられた……
静的言語⊃動的言語 動的な制御は静的言語でも出来る。 静的な制御は動的言語では無理。 分かりやすく言い換えれば、 実行時の制御は静的言語でも出来る。 コンパイル時の制御は動的言語では出来ない。 コンパイル時の制御をしようと思ったら、 コンパイラに元々静的に制御する機能がないと無理。 その機能を端折った手抜き版が動的言語。
>>974 書こうとする前に気付けよw
Cプリプロセッサで関数型プログラミングモドキを試みるくらいアホだな
手段が目的になってる典型
ホントだよなwww Javaが抽象化能力に劣ってるのは有名だろww 型注釈がうざいだけじゃ、あんなに冗長にはならないっつーの
え?辞書クラスで楽勝なんでしょ?
楽勝でしょう obj["name"]
CプリプロセッサやC++テンプレート、JavaやC#のIDEによる自動生成 これらコードジェネレータは言語が抽象化能力に劣るという欠点を補うもの 一方、動的言語は抽象化が高いことによるパフォーマンスの低下や コンパイラによるチェックの不在を補えないのであった 結果、世界で広く使われるのはCを初めとする静的言語
まあRubyで1分くらいで書けるコードだから、 Javaが1/10の生産性だとしても、10分で書けるな さあ、ideone.comにコードを貼るんだ
983 :
uy :2012/06/23(土) 09:43:31.62
ゴミ
>>972 Objective-Cくらいじゃね?
型付きのLisp変種とか
辞書クラスぐらい殆どの言語にあるだろ。
>>975 じゃあコンパイル時と実行時だけでなく起動時に大規模な処理をする言語は偉いのか?
何言ってんだ
起動時「やられたようだな」 終了時「最弱」 コンパイル時「」
989 :
uy :2012/06/23(土) 12:21:10.53
>>963 そのネタ飽きないよな・・・
俺はまず学校にはいった時点では既にC,C++,少量のPerlの知識まではあったわけで
宿題や課題とか一瞬で終わるから1つも家に持って帰った記憶が無いし
何のことを言ってるんだコイツ
ガキの書いたネタレスに釣られちゃったのか?w
batとPerlでCの宿題用のソースメタしてた記憶しかない
990 :
uy :2012/06/23(土) 12:23:00.35
その後さらにちょっといくと設定ファイルと動的言語の共通点に気づいて uy言語とかOS作ってた時期だったな ruby入る直前にやってた ある意味その頃が一番の全盛期 そこでお前らとの差が一気に広がってしまった お前らみたいに何年間も同じようなプログラミング続けてる奴と違うから俺は 今でこそrubyだけどほんの数年前はガチでC++/WinAPI、アセンブラ、Perl そこを通過した俺が動的言語を是としているんだから察しろよ いつまでも同じ場所で立ち止まってないで 成長が遅いゴミカスはまずは黙って先人に従え
設定ファイルにはDSL使うわ。 そして、静的言語の機能縮小版のRubyの出番はないわ。
カスは苦しみ続ければよいのではないか 最近、静的言語厨の書き込みが悲鳴にしか見えない・・・w 違うだろwww 仕事で使うプログラミング言語がwww 効率がでるとかwwでないとかwww関係ねーからwww コードジェネレータwwwwww 関数にまとめるwwwwwwwwww 現実を見ろとしかいえない 関数にまとめるwwwwwwwwwwwwwwwwwwwwwwワロタwwwwwwwwwwww 関数にまとめてろwwwwwwwwwwwww
都合が悪くなると発狂してみせる。
>>991 設定ファイルwwwwwwwwwwww
そもそも設定ファイルはアルゴリズムには直結しないデータを入れろよ
普通は定数関係のみだろwwwwww
設定ファイル内にアルゴリズムが必要になったらそれはもう「プラグイン」だから
バカが
>>954 セッテイファイルカラノヨミコミカツクルワw
とかいってるけど
ソースコード外まで散らかす奴は追放したほうが良い
そんな案を出す奴も追放したほうが良い
初心者だと自覚のないこういう奴は追放したほうが良い
995 :
uy :2012/06/23(土) 12:30:48.96
俺はエリートゴミカスだ お前らは黙って俺について来い
設定ファイルwwwwwwwwwマジワロタwwwwwwwwww 設定ファイルwwwwwwとして関数にまとめるwwwwwwwwwwwww 時代が止まってんだな 発想の問題なのかもなぁ 俺はC++で一度設定ファイルフルに使わざるをえないプログラム作成した時に 真っ先にスクリプト化がよぎって、すぐに動的言語に着ちゃったけど ここのプロセスに10年かけるやつもいるって事だ・・・
だから、動的言語は静的言語の機能縮小版だから、 動的言語で出来ることは静的言語でも出来るわけだから、 いつまでたっても静的言語の優位性は揺るがないんだよ。
>>997 プププwwwww
そう思うなら動的言語使わなくていいからwwww黙って静的言語使ってろよwwww
プッギャアアアアアアwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
マジ素で言ってそうだから面白いwwwwwwwwwwwwwwww
都合が悪くなると発狂してみせる。
俺は動的言語の問題点をいくつあげてもwwwww 静的言語よりはマシだと確信してるわwwwwwwwwwwwwwwwww 静的言語の問題点をなぜ挙げないかって?? 見放してるから、問題点を指摘さえしないってことだよwwwwwwwwwww 気づけバカwwwwwwwwwwwwwww
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。