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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
 しかし、RubyとRailsの限界に気がついてしまったのです。Rubyのランタイムは
非常に遅いため、Rubyで作成したアプリケーションの納品をためらったことがあります。
Rubyはプロトタイプ作成用に使い、納品用にJavaで作りなおさなければなりませんでした。

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

また、Rubyでもチームメンバーが2名から4名であれば、メンバー間のコミュニケーションは
非常にスムーズでした。しかし新しいメンバーをチームに参加せせようとすると、
これまでチームで培ってきたノウハウを新しいメンバーにうまく伝えることが出来なかったのです。
2デフォルトの名無しさん:2012/04/24(火) 05:32:46.72
馬鹿な上司が「JavaからRubyへ」を読んで
Javaで作ったプログラムをRubyで書き直し
プロジェクトが大きくなりメンテナンス不能のなって
結局またJavaで書き直し
3デフォルトの名無しさん:2012/04/24(火) 07:36:01.19
数千行?
4デフォルトの名無しさん:2012/04/24(火) 08:42:09.25
数千行がRuby+Railsの限界ってこと?
5デフォルトの名無しさん:2012/04/24(火) 09:11:54.61
>>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へと乗り換えたときに似た、開放感を覚えました。
6デフォルトの名無しさん:2012/04/24(火) 09:12:25.96
直後の記述:
私は、新しい言語と開発環境を探し始めました。
Rubyの豊かな表現力と、Javaの高いパフォーマンスを併せ持つ言語を探していました。
そして2006年11月、出会ったのがScalaです。
Scalaは表現力とパフォーマンス両方を兼ねそなえているだけでなく、
それ以上の可能性を感じさせてくれたのです。
(中略:Scalaは高速でJavaと互換性がある)

最も重要な事は、Scalaはこれまでと違ったプログラムの方法や考え方を教えてくれたことです。
Scalaを知ったおかげで、バッファーや構造体、オブジェクトの割り当てや、
これらのメモリ操作について考えるのをやめました。
その代わり、私の作るプログラムのほとんどは、
インプットからアウトプットへの変換ととらえられることを学びました。
Scalaは、簡潔でモジュール化されたコードを、
メンテナンス可能な形でまとめられるツールを与えてくれました。
しかも、JavaやRubyを使う場合よりも、はるかに複雑なロジックを記述できます。

2年以上Scalaを使いつづけ、愛し続けた結果、後悔していることが1つだけあります。
それは大学時代にLispを学ばなかったことです。
大学院時代にプログラミング言語理論についてのコースをとっておくべきでした。
7デフォルトの名無しさん:2012/04/24(火) 10:28:20.92
ああ、カルト宗教の文句に似てるんだな
8デフォルトの名無しさん:2012/04/24(火) 10:36:03.49
>>1
筆者の考えがより正確に伝わるように引用します。
「テストの大半は、リファクタリング」
9デフォルトの名無しさん:2012/04/24(火) 11:05:54.59
今カウントしたら、redmineの*.rbの行数が2万行なんだが、数千行ってどんだけ小さいプロジェクトなんだ?
10デフォルトの名無しさん:2012/04/24(火) 11:41:28.29
原文がどうなってるか知らんけど
数千→数万になったって意味じゃね?
11デフォルトの名無しさん:2012/04/24(火) 12:11:30.69
これ、上司が糞であって動的言語とか関係なくね?
12デフォルトの名無しさん:2012/04/24(火) 12:17:36.92
単に開発環境が変わったためのコストを払い切れなかったというケースだな
移行とかに慣れないうちはよくある
13デフォルトの名無しさん:2012/04/24(火) 12:18:57.45
これで言語(のユーザー)を煽れると思ってしまうということはつまりその人は働いたことがな
14デフォルトの名無しさん:2012/04/24(火) 13:54:02.92
>>8
Javaに対するEclipseのような修正漏れが限られているリファクタリングツールが
Railsにないからテスト工数が増大したという事ですね。

Ruby+Railsだと修正漏れの少ないリファクタリングツールを作るのは難しいですが、
今後ツールが自動的に修正できる範囲が増えれば必要なテストは減るでしょう。
つまり、Rails用リファクタリングツールの性能向上で解決できる問題だと思います。
15デフォルトの名無しさん:2012/04/24(火) 15:38:29.21
>>14
オブジェクト指向で何か修正したい場合
メンバーの継承と追加はできるが削除はできないというのが基本です
これはツールではなくパラダイムです
メソッド名やパラメータの数を変更するのも、ツールではなくパラダイムの問題です
16デフォルトの名無しさん:2012/04/24(火) 15:47:07.32
新手のruby disスレ。
そんなにrubyが憎いか。
17デフォルトの名無しさん:2012/04/24(火) 18:30:56.15
>>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
18デフォルトの名無しさん:2012/04/24(火) 21:20:58.20
YARVの登場で時代は変わったろ
いつの時代の人間だ
19デフォルトの名無しさん:2012/04/24(火) 22:01:04.01
>>17
> メソッド名やパラメータ数を修正した時に呼出側も漏れなく修正されるかどうかはツールの問題です。

言語の問題であることも多いよ。
RubyわからんのでPerlの例でいうけど、

たとえばPerlだと

{
  package Class1;
  sub new { ... }
  sub foo { ... }
}

↑このfooというメソッド名を修正した時、

my $c = $flag ? Class1->new() : Class2->new();
$c->foo();
   ↑ 呼び出し側のfooを変更していいかどうかなんて判別不可能だしね。

Rubyも変数に型がないから、同じじゃない?
20デフォルトの名無しさん:2012/04/24(火) 22:14:19.08
>>18
YARVは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」出現の原因となったりしていた。
21デフォルトの名無しさん:2012/04/24(火) 22:26:51.29
>>17
断言が気に入らないようだが、宣言的なパラダイムをどう思う?
そもそも「修正する」というのは手続き的だよな
22デフォルトの名無しさん:2012/04/24(火) 22:29:28.47
>>19
静的型付言語のJavaが静的コード解析で修正箇所を特定できるのに対し、
動的型付言語でダックタイピングを採用したRubyと
黒魔術レベルの動的プログラミングを実現したRailsの組み合わせに対して
必要な修正を網羅するリファクタリングツールを非常に作りにくいのは確かですね。

それでもRailsのバージョン別のツールにするとか
ホワイトボックステストで実行フローを枝刈りするとか
ツールのアルゴリズムを工夫する余地はあると思います。
23デフォルトの名無しさん:2012/04/24(火) 22:47:34.46
>>21
手続き的か宣言的かオブジェクト指向かというのはプログラムの設計の話です。
リファクタリングは無駄に複雑でわかりにくいコードを全体的に整理するという話です。
あなたは全然関係ない話をごちゃまぜにしています。
24デフォルトの名無しさん:2012/04/24(火) 23:08:13.23
>>23
あなたは「設計と全然関係ないことをするのがリファクタリングだ」と言っています
25デフォルトの名無しさん:2012/04/25(水) 00:08:13.79
>>22
余地があるのは、今のRubyのリファクタリングツールが貧弱なだけ。
少しはまともになるかもしれないが、まあ期待するだけ無駄でしょう。

Scalaのおかげで、コードを短く書くのに、動的言語である必要性はないのが証明されました。
これからは静的言語かつコードを短く書けるScalaのような言語が
主流になっていくでしょう。

プログラマだというのに、プログラミングを楽にするためにコンピュータの力を
生かせる言語を作ろうと発想が出てこないのが不思議でなりません。
Scalaは理想の言語ですね。
26デフォルトの名無しさん:2012/04/25(水) 02:29:57.05
「public static void mainなど、コンピュータに伝える約束事が多くて、
やりたいことが頭の中から逃げてしまう。簡潔さは力なのです」
http://toro.2ch.net/test/read.cgi/tech/1326687331/57
27デフォルトの名無しさん:2012/04/25(水) 08:20:42.68
コードは「人に読ませるために」あるんだよ

誰も読めないようなperlの魔法的変態記述の反省でもあるのに
なぜ性懲りもなく繰り返すのか

perl知らない素人じゃあるまいに
28デフォルトの名無しさん:2012/04/25(水) 08:44:28.00
>>26
ScalaでHello World


println("Hello, world!")


これだけ。

public static void mainなどいらないのです。
29デフォルトの名無しさん:2012/04/25(水) 09:02:33.82
Smalltalkはテキストを読み書きすることにあまり興味がない
Perlはものすごく読み書きに詳しい
では、読み書きに詳しくない人に読ませるという立場はどこから出てきたのか
30デフォルトの名無しさん:2012/04/25(水) 10:45:09.16
高度にチューンされた静的言語に動的言語がどうやってもかなわないのは事実だが、
Rubyが遅いのは動的だからって短絡はほんといいかげんやめてほしい。
Rubyが遅いのは単純にまつもとやささだの技量不足ってだけの話しで、
やつらが作れば静的言語だって遅くなる。LuaやV8の実装者に申しわけなさ過ぎる。
31デフォルトの名無しさん:2012/04/25(水) 17:51:45.56
>>30
Luaや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
32デフォルトの名無しさん:2012/04/25(水) 22:19:47.39
>>31
> 技量の差とどうやって
動的という観点に絞れば、LuaやJavaScriptはRubyよりはるかに動的だからでFA

> コンパイラは同じだから、コンパイラ作者の技量の差などありません。
それは1行目の話。型情報を使って最適化できる静的型が有利なのは当たり前。
33デフォルトの名無しさん:2012/04/25(水) 22:39:32.26
なぜ遅いって、jit積んでないからやろ
34デフォルトの名無しさん:2012/04/25(水) 22:58:32.28
それも技量や知識の無さの証左。
35デフォルトの名無しさん:2012/04/25(水) 23:02:56.10
コンパイル処理には時間がかかります。

さて、次の三つのうち実行時間が一番遅いのはどれでしょう?

1.コンパイル処理を実行開始前に完了しておく
2.コンパイル処理を実行開始時に行う
3.コンパイル処理を実行されるたびに行う
36デフォルトの名無しさん: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/
37デフォルトの名無しさん:2012/04/26(木) 06:41:08.61
Java vs Ruby か
どっちもウンコ言語だから良い勝負だな
38デフォルトの名無しさん:2012/04/26(木) 07:44:44.20
39デフォルトの名無しさん:2012/04/26(木) 08:21:31.03
>>35
>実行時間が一番遅い
日本語で頼む。
40デフォルトの名無しさん:2012/04/26(木) 08:54:57.97
>>35
41デフォルトの名無しさん:2012/04/26(木) 08:57:31.13
行ごとにコンパイルする場合、コンパイルしなかった行に文法違反があっても
すどおりしたようにみえる
42デフォルトの名無しさん:2012/04/26(木) 15:40:35.66
動的型付けってすごいよな
初めて見たときは衝撃だよな
43デフォルトの名無しさん:2012/04/26(木) 22:39:04.82
俺がはじめてみた動的型付け言語は
BASICだ。
44デフォルトの名無しさん:2012/04/27(金) 09:00:10.90
「動的」の対象が話者によって食い違ったままの隔離スレではあるが、せめて「実行時に型を動的に生成出来るか」ぐらいはチェックしようぜ。
45デフォルトの名無しさん:2012/04/27(金) 14:05:19.47
PHPでコードを書いてて、 $loginId を $loginid ってスペルミスして、デバッガで追いかけないと
それに気づかなかったり、rubyでendをうっかりendifって書いていて、ミスしたのはコードの
最初のほうなのに表示されるエラーの行番号はコードの最終行でミスを見つけるのが困難だったり
ほんと動的言語はダメだわ。
46デフォルトの名無しさん:2012/04/27(金) 14:27:31.49
camelCaseを止めて、variable_name形式にすれば少しはいいかも。
あとlint的なものを使えば、その手の間違いを検出できる場合もある。
47デフォルトの名無しさん:2012/04/27(金) 14:28:27.24
静的言語だと「文脈と間違え方から見ておそらくこの部分がこう書きたかったスペルミスだと思われます」とか言ってくれるのか

アホ
48デフォルトの名無しさん:2012/04/27(金) 14:31:38.72
Rubyはifだろうが繰り返しだろうがメソッド定義だろうが例外捕捉だろうが全部endだからな
動的かどうか全く無関係に区別は不可能

っていうか着色とキーワード改行インデントするエディタ使え
49デフォルトの名無しさん:2012/04/27(金) 14:32:05.33
>>47
静的型付け言語だと、変数の宣言が必須でコンパイルエラーになるから検出が容易
50デフォルトの名無しさん:2012/04/27(金) 14:40:24.94
誰が静的型付けの話をしている
51デフォルトの名無しさん:2012/04/27(金) 14:43:14.37
…とりあえず、「静的」「動的」のとこで語句区切るの今後一切禁止で
52デフォルトの名無しさん:2012/04/27(金) 14:48:18.95
定義厨はいいよ
53デフォルトの名無しさん:2012/04/27(金) 14:52:53.05
>>52
時間潰しでレス欲しいだけならVIPやニュー速や嫌儲へどうぞ
54デフォルトの名無しさん:2012/04/27(金) 15:04:55.53
>>47
IDEがサポートしてる静的言語ならエディタで入力した時点でそんな変数ないって指摘してくれる。
55デフォルトの名無しさん:2012/04/27(金) 15:08:27.68
動的型付でも動的定義でも、98%くらいは静的に(代入子で)定義された名前だろうから、
頑張れば大部分は検知できそうな気もするが、流行らないのはなんでだろう
56デフォルトの名無しさん:2012/04/27(金) 15:21:41.14
"login_id = param"のつもりで"loginId = param"と書いてしまったときの話だよ?
57デフォルトの名無しさん:2012/04/27(金) 15:22:19.68
全然違った。
"loginId = param"のつもりで"loginid = param"と書いてしまったときの話だよ?
58デフォルトの名無しさん:2012/04/27(金) 19:00:40.63
>>55
グローバル変数の使用状況を見れば、頑張らなくてもチェックできるんだが
グローバル変数が無い言語が流行っている
59デフォルトの名無しさん:2012/04/27(金) 21:20:25.70
Javaの視点で動的言語がダメだというのは、その通りなんだな
全然違う視点を持つと結果は変わってくるが
クラスベースOOとかJavaに近い動的言語はダメになる
60デフォルトの名無しさん:2012/04/27(金) 21:32:22.92
つーかミスをする人間は
動的言語を使うなという話。
61デフォルトの名無しさん:2012/04/28(土) 00:56:52.29
ミスをしない人間なら直接バイナリを書けるよな
62デフォルトの名無しさん:2012/04/28(土) 02:18:16.52
CにGCつけたら書ける
ただしGCが改良される度にソースの互換性がなくなる気がする
63デフォルトの名無しさん:2012/04/29(日) 14:27:24.66
>>60
使い物にならない言語という結論
64デフォルトの名無しさん:2012/04/30(月) 04:14:56.56
名前をトレースできないように出来る言語は総じてカオス
現行のほとんどの言語がやれちゃうのでどうしようもない

あきらめてスクリプト言語で作ろうぜ
俺は絶対にやらないけど
65デフォルトの名無しさん:2012/04/30(月) 10:28:42.94
ボイルの法則とかシャルルの法則とかボイルシャルルの法則とか
名前をつけても何も解決しないな
66デフォルトの名無しさん:2012/04/30(月) 11:00:31.68
          ., 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! |
67デフォルトの名無しさん:2012/05/07(月) 01:15:39.07
動的型付け言語の一番の問題は・・・

静的型付けのC++なら、この程度の関数は何も気にせずに使えるけど、
http://ideone.com/xcxjC

動的型付けのJavaScriptだと、この程度の関数でも気をつけて使わないと駄目な代物になる事。
http://ideone.com/lbcaB
68デフォルトの名無しさん:2012/05/11(金) 21:54:23.23
お兄ちゃん、型付け型付けとうるさいけど自分のお部屋を片付けられないんだね・・・
69デフォルトの名無しさん:2012/05/11(金) 23:29:18.34
>>68
現実には型付けがなくて片付けられないんだよ
70デフォルトの名無しさん:2012/05/12(土) 00:14:38.09
誰が面白いこといえと
71uy:2012/05/12(土) 12:20:05.59
>>67
でっていう

ライブラリ側は全て静的言語でやって(速度も速いし)
その速度の速いライブラリを動的言語から呼び出したり、
型情報とかいちいちつける意味のない
実装コードは動的言語でさっさとやるんだよ
72デフォルトの名無しさん:2012/05/12(土) 15:20:43.38
「intとか核のめんどくせぇ!」っていうなら型推論使えよvarとか
73デフォルトの名無しさん:2012/05/12(土) 17:28:00.83
ミスを指摘されるのを嫌う人間が好んで使うらしい
74デフォルトの名無しさん:2012/05/13(日) 12:32:23.01
コメントを付けなくちゃいけない規模になったら
もう動的型付け言語ではやっちゃいけないってことなんだよ。

この変数は○○型です。なんて
コメントをつけ出したら末期。
75デフォルトの名無しさん:2012/05/13(日) 21:35:36.32
システムハンガリアンでおk

と言うかシステムハンガリアンが活きるのって
CやJavaやC#じゃなくて動的言語だよなあ
76デフォルトの名無しさん:2012/05/15(火) 23:53:16.43
C++ with Boostにシステムハンガリアンで脳死
77デフォルトの名無しさん:2012/05/16(水) 01:05:53.13
動的言語なのにシステムハンガリアンって、悪いところ取りになってないか。
78デフォルトの名無しさん:2012/05/16(水) 04:46:45.01
動的言語でも、この変数には互換性のない型を
いれても正常に処理しますってのは無いんだから。
79デフォルトの名無しさん:2012/05/16(水) 07:26:51.79
疑わしきは罰せずってのが有る
つまり、コード自体のミスよりも
悪いコードに罰を与えようとする側の判断ミスの方が深刻な問題になる
80デフォルトの名無しさん:2012/05/16(水) 18:15:57.10
テストの大半は、リファクタリング
81デフォルトの名無しさん:2012/05/17(木) 00:58:48.26
>>1
予想通りで笑った
82デフォルトの名無しさん:2012/05/21(月) 23:43:56.65
>>77
動的型付けだからシステムハンガリアンが必要になるんじゃないの?
違う型突っ込んでもシステムがエラーを拾うわけじゃないんだろうけどさ
83デフォルトの名無しさん:2012/05/22(火) 14:17:06.25
>>71
> ライブラリ側は全て静的言語でやって(速度も速いし)
> その速度の速いライブラリを動的言語から呼び出したり、
> 型情報とかいちいちつける意味のない
> 実装コードは動的言語でさっさとやるんだよ

ブラウザだと逆になってしまいそうだな。
ライブラリは速いJavaScript、それを使うユーザーは静的型言語から変換。
どうしてこうなった
84デフォルトの名無しさん:2012/05/22(火) 14:27:55.05
ブラウザがVM向け中間コードのI/Fを公開していないという欠陥
85uy:2012/05/22(火) 16:13:17.91
これ
動的言語はダメだ ってふうに勘違いされやすいけど
そうじゃなくて

今まで静的言語でプログラム開発していた部分に
やっと動的言語が1歩踏み込んだけど、まだ色々と足りなくてダメだったね
ってだけだからね
いずれにしよ、小規模なプログラム開発では動的言語に静的言語が勝てるわけないから

そのうち大規模開発でも動的言語は使い物になると思うよ


今は、「え?別に動的言語で大規模開発できるでしょ?」って無理して発言する事ではなく

「なぜ出来ないのか?」「どうすればいいのか?」 それを考える時期
86デフォルトの名無しさん:2012/05/22(火) 16:35:06.09
uyがまともなこと言うなんて、どうなってんだこの世の中。
87デフォルトの名無しさん:2012/05/22(火) 17:55:35.84
「小規模なプログラム開発では動的言語に静的言語が勝てるわけない」
からどうして
「大規模開発でも動的言語は使い物になると思うよ」
につながるのかが、さっぱりワカラン。
88デフォルトの名無しさん:2012/05/22(火) 18:38:01.21
クソコテuyが初めてまともなこと言った。
世界が滅びる兆しのようだ。
89デフォルトの名無しさん:2012/05/22(火) 19:13:26.08
愛されてるな
90デフォルトの名無しさん:2012/05/22(火) 22:05:50.12
心配しないでも、動的言語の問題点は関数型言語が克服したよ。
動的言語に近い簡潔さで型安全なプログラムが書ける。

動的言語:小規模書き捨てスクリプト
関数型言語:中規模少数精鋭
静的手続き型言語:大規模ドカタ開発

こんな感じで棲み分けされるよ。
91uy:2012/05/23(水) 18:12:53.30
関数型の時代は来ないと思うよ
概念が中途半端
92デフォルトの名無しさん:2012/05/23(水) 20:25:04.68
中途半端ってことは、何らかの軸の中間辺りに関数型が位置するって意味になるが
その軸の両端には何の概念が来るんだ?

中途半端さが理由で流行らないってことは
中途半端でない概念をベースにした言語は流行ってるのか?

ってここまで書いて気付いたがuyかよ
93デフォルトの名無しさん:2012/05/23(水) 21:00:33.91
両端は、アマチュアの趣味と、プロのぼったくり
94デフォルトの名無しさん:2012/05/23(水) 22:35:46.89
真ん中はアマチュアのぼったくりか。
やっかいだな。
95デフォルトの名無しさん:2012/05/23(水) 23:06:52.49
うわぁ頭悪そう
96デフォルトの名無しさん:2012/05/24(木) 09:08:30.06
彼らは人間ではない。また、動物でもない。
だが、その醜い身体の中には正義の血が隠されているのだ。
97uy:2012/05/25(金) 00:17:48.59
OO < 関数型  <<  俺様
98デフォルトの名無しさん:2012/05/25(金) 00:27:25.80
↑クズ度の指標です
99デフォルトの名無しさん:2012/05/25(金) 04:38:11.86
動的言語ってのは実行時に決めることが多いんだけど
本当に実行時じゃないと決まらないことって少ないんだよね。

実はコードジェネレータでコンパイル時に定義ファイルなどから
コードを動的に生成するだけで十分ってことが多い。
100uy:2012/05/25(金) 13:43:17.47
アプリ開発なんてほとんどがテンプレ化してるしね
普通にかいてればバグとかはいる箇所って全然少ない気がする

バグが存在しないとわかってるコードを利用する分には、問題はなくて
動的言語で困るのは、自分でソースコードを大量に書かなきゃいけない時か
それでも
a = nil
a.push 2

とかかいてて、こういうののせいで誰かリアルで死んだら
声高らかに動的言語は間違ってる!とか言われるから
やっぱり型チェックは存在していないとまずい

もしや動的言語からevalがいらないんじゃね
evalさえなければコンパイラも作れる可能性は高い気がする
101デフォルトの名無しさん:2012/05/25(金) 21:51:15.36
uyは空気読めない
まで読んだ
102デフォルトの名無しさん:2012/05/26(土) 01:08:10.32
Low-Level JavaScriptワロタ
http://mbebenita.github.com/LLJS/

おいMoziila、JSで突っ走る素振りする傍らこんなもん作ってんじゃねえよ。
LLVMの代替ポジでも狙うつもりかね。
103デフォルトの名無しさん:2012/05/26(土) 11:18:55.73
MSとGoogleとMozillaが手を組んで、型指定出来るJS代替言語のプラグインをブラウザに仕込めば、それで解決だよな。
104uy:2012/05/26(土) 11:36:28.40
jsいらね
jsが重いんだよ、ブラウザは。
105デフォルトの名無しさん:2012/05/26(土) 11:54:33.89
そんな中途半端なことしないでブラウザにCLR仕込んでくれよ
106uy:2012/05/28(月) 00:44:40.23
つーかコンパイル済みのコードをページに組み込んで
それ動作させればブラウザ側がHTMLパーサもjsパーサもいらなくなって超高速になるんじゃないの
js高速化(笑)とかいいから、それやれよって思う
107デフォルトの名無しさん:2012/05/28(月) 20:36:42.59
JavaApplet「ガタッ」
Silverlight「ガタッ」
Flash「スッ」
108デフォルトの名無しさん:2012/05/28(月) 21:25:29.57
立ち上がる擬音の違いが木になります
109デフォルトの名無しさん:2012/05/30(水) 08:12:34.08
NaCL「」
110デフォルトの名無しさん:2012/05/30(水) 20:00:37.73
それってブラウザじゃなくラウンチャだろ。
111デフォルトの名無しさん:2012/06/02(土) 11:10:47.37
HTML5って、要するにオープン規格のActiveXだよな。
112デフォルトの名無しさん:2012/06/02(土) 11:28:49.21
俺とおまえが兄弟ってことならば、要するにそういうことになる。
113デフォルトの名無しさん:2012/06/03(日) 18:14:22.90
プラグインなんて捨てて全部ブラウザでやっちまおうぜ
ってことじゃね?
114デフォルトの名無しさん:2012/06/04(月) 06:09:20.96
ラウンチャ
115デフォルトの名無しさん:2012/06/04(月) 11:05:43.93
ようするに、jrubyで書けと?
116デフォルトの名無しさん:2012/06/04(月) 15:30:53.80
>>115
JRubyもX
TypeSafeではない言語ではだめ。

優れたIDEなしに生産性の高い開発は語れない
117デフォルトの名無しさん:2012/06/04(月) 15:54:11.20
は?
型安全て、どの程度の型安全の意味で言ってる?

もしかしてダウンキャストがいくらでもできるザルザルな言語の信者が、
「型安全」(きりっ とか言ってるんじゃないのwwwwwwwwwww
118デフォルトの名無しさん:2012/06/04(月) 16:21:11.30
C++系はもうダウンキャストやめられないだろう
119デフォルトの名無しさん:2012/06/04(月) 21:11:58.54
>>117
ダウンキャストがいくらでも出来ることに問題はない。
ダウンキャストしても安全に動くならば問題ない。

所で動的型付け言語、あれダウンキャストの嵐だよね。
変数はすべて基底のObject型。だからどんな型でも入れられる。
そしてメソッド呼び出しの時はObject型から具体的な型にキャストして呼び出す。
やっていることはコレと同じ。
120デフォルトの名無しさん:2012/06/04(月) 22:17:19.93
このスレだとObjective-Cってどっちになるんだ?
JSXみたいな型付け言語->Javascriptへのコンパイラとかも
121デフォルトの名無しさん:2012/06/04(月) 23:05:01.15
そもそもコンパイルなのか?
122デフォルトの名無しさん:2012/06/04(月) 23:07:57.50
トランスレータだよな
123デフォルトの名無しさん:2012/06/05(火) 07:29:31.18
>>119
> ダウンキャストしても安全に動くならば問題ない。

それってつまり型安全な言語じゃなくても良いってことだよな。
124デフォルトの名無しさん:2012/06/05(火) 07:42:09.17
>>118
C++/C#/Javaは外部ライブラリが絡むような所以外
ダウンキャストなんて使わないよ
125デフォルトの名無しさん:2012/06/05(火) 08:02:59.91
もしかして、外部ライブラリを積極的に使うと本体は動的で小規模になるのに対して
外部ライブラリを使わないと静的大規模開発になるのかな
126デフォルトの名無しさん:2012/06/05(火) 09:36:53.43
> ダウンキャストしても安全に動くならば問題ない。

動的言語でも安全に動くならば問題ない、って言ってるのと全く同じなんだが。
127デフォルトの名無しさん:2012/06/05(火) 10:08:35.69
>>125
ジェネリクスやテンプレートで作られてないライブラリを使うと
バインディング関連でダウンキャストが必要になるってこと
ライブラリ側のインターフェイスが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
128デフォルトの名無しさん:2012/06/05(火) 13:45:57.82
積極的に使う外部ライブラリが枯れてなくて
バグやバージョン管理に振り回されるなら
テスト工数もへったくれもないな
129デフォルトの名無しさん:2012/06/05(火) 14:52:19.28
でもSTLやboostに振り回されたくないなんて言ってたらテンプレートは普及しないよね
130デフォルトの名無しさん:2012/06/05(火) 21:43:22.14
>>127
レガシーの部分を持ち出して何が言いたい?
131デフォルトの名無しさん:2012/06/06(水) 01:18:57.41
>>123
> それってつまり型安全な言語じゃなくても良いってことだよな。

>>126
> 動的言語でも安全に動くならば問題ない、って言ってるのと全く同じなんだが。

ぜんぜん違うよ。

ダウンキャストは最後の手段として仕方なく用いるもの。
使わないですむなら使わないほうがいい。
動的言語は、常に最後の手段を用いているからダメダメ。
132デフォルトの名無しさん:2012/06/06(水) 07:09:04.73
>>131
常にダウンキャストというのは人間がそう思ってるだけだ
(そもそも継承関係自体がないならアップもダウンもない)
そういう風に人間が自分で判断してよいという前提になれば動的言語は強い
133デフォルトの名無しさん:2012/06/06(水) 07:23:04.84
アップキャスト
134デフォルトの名無しさん:2012/06/06(水) 08:07:43.32
ぬるぽの代入はアップキャスト
135デフォルトの名無しさん:2012/06/06(水) 08:21:08.17
スーパーキャスト

ハイパーキャスト
136デフォルトの名無しさん:2012/06/06(水) 08:40:44.08
>>132
> 常にダウンキャストというのは人間がそう思ってるだけだ
それが一番重要なんじゃないかw

コンピュータよりも人間主体で考えましょう。
面倒な事はコンピュータにやらせる。
137デフォルトの名無しさん:2012/06/06(水) 09:22:54.51
面倒な事をやりたくないのも分かるが、一番ではないな
やらないのが一番の目的というのは変じゃないか
138デフォルトの名無しさん:2012/06/06(水) 14:51:17.17
だから、実行順を決める、なんて面倒なこともコンピュータにやらせればいい、
というのがHaskellやPrologなのに、なぜかJava厨はそっちに踏み込むことはできず、
必死に2ちゃんねるでRubyをdisるだけに終わる。
139デフォルトの名無しさん:2012/06/06(水) 20:34:17.70
遅い
140デフォルトの名無しさん:2012/06/06(水) 23:25:46.53
Java厨は動的言語使いには型安全性の重要さを説くくせに
関数型言語使いに型安全性の不備を指摘されると
そんなに型安全じゃなくても良いとか言い出すから面白い
141デフォルトの名無しさん:2012/06/06(水) 23:28:05.19
型安全性に不備などない
142デフォルトの名無しさん:2012/06/06(水) 23:32:34.24
>>138
> だから、実行順を決める、なんて面倒なこともコンピュータにやらせればいい、

実行順を決めることに文句をつけてる人はいないと思うけど?

文句はコード的に静的に型が決まってるはずのに、
言語の都合で動的になってるような所の話。
(たとえば、obj.method() というコードを書いたら、実行せずとも、
このオブジェクトはmethod()を持っているはずなのです。)

>>140
型安全は重要だよ。だから型安全でないコードを
減らすべきだと説いている。
143デフォルトの名無しさん:2012/06/06(水) 23:42:18.93
"「ほげ」言語のパラドックス"を思い出すな

ほげ言語が持っていない、より高度な機能は
ほげ言語プログラマには理解できない
144デフォルトの名無しさん:2012/06/06(水) 23:43:57.94
>>143
Javaにはobject型のように
動的な型機能は付いているが、

動的言語には、静的な型機能がついてないね。
そうか、そういうことなんだね。
145デフォルトの名無しさん:2012/06/06(水) 23:44:21.81
どこがパラドックスなのか
146デフォルトの名無しさん:2012/06/06(水) 23:46:54.74
しーっ、カタカナ使って頭いいつもりなんだからw
147デフォルトの名無しさん:2012/06/06(水) 23:48:55.80
聞いた事無いならぐぐれば良いのに
148デフォルトの名無しさん:2012/06/06(水) 23:52:29.76

動的言語の問題点

1. パフォーマンスが悪い。モッサリ
2. 効率よくリファクタリングできない
3. 効率よくデバッグできない
4. 他の言語に変換できない(しにくい)
5. ソースコードの可読性が落ちる
6. パフォーマンスが悪いので使用用途が限られる。学習時間の無駄
149デフォルトの名無しさん:2012/06/06(水) 23:52:47.87
○言語を使ってみろよ!って言っている奴が
実は△言語をかたくなに否定しているってやつか。
150デフォルトの名無しさん:2012/06/07(木) 00:18:42.75
>>148
言語Aから言語Bへの変換が難しいケースとは
Bが持っていないAの機能を使ってコードが書かれていたとき。
だから異なるパラダイムの言語間での変換は難しいし、
一方でAの持つ機能がBのサブセットならA->Bの変換は容易だ。

もし「自分の使ってる言語は他言語に変換し易い」と感じるのならば、
その言語はおそらく機能的に劣ってる。
151デフォルトの名無しさん:2012/06/07(木) 00:25:55.02
機械語最強ってことか
152デフォルトの名無しさん:2012/06/07(木) 00:35:26.69
>>151の一言で>>150は無意味になってしまったなw
153デフォルトの名無しさん:2012/06/07(木) 00:38:15.04
C++はC言語に変換しやすいというか、
実際昔は、C++はC言語に変換されていた。
154デフォルトの名無しさん:2012/06/07(木) 00:39:53.68
副作用の塊でできたコードを
関数型言語に変換するのは難しいだろうね。

関数型言語は、手続き型言語に変換しやすだろう。
その言語はおそらく機能的に劣ってる。
155デフォルトの名無しさん:2012/06/07(木) 00:58:13.33
>>153
変換されてたけど、簡単じゃないよ。

びよーんすっぽすっぽ先生が書いてるけど、cfrontという実装があるから
というのを「簡単に変換できる」と思うのは、よくある誤解。

>>154 の論理に従うと、あらゆる言語は機械語に変換できるから、
あらゆる言語は同じくらい劣っている、ということになるな。
156デフォルトの名無しさん:2012/06/07(木) 00:58:48.85
>>155
じゃあお前は、何から何が簡単だと思うんだ?
157デフォルトの名無しさん:2012/06/07(木) 04:11:50.80
日本語は、韓国語に変換するのが難しい

なぜなら、韓国語は日本語にない機能を使って記述されるからである

ゆえに、日本語は機能的に劣っている
158デフォルトの名無しさん:2012/06/07(木) 06:52:10.60
>>155
Cでオブジェクト指向プログラミングができる人なら、C++ -> C は簡単。
159デフォルトの名無しさん:2012/06/07(木) 07:02:02.30
>>157
よく韓国人に「日本語でおk」ってレスをされるw
160デフォルトの名無しさん:2012/06/07(木) 07:21:22.18
>>158
例外は?RAIIは?テンプレートはどうすんの?
161デフォルトの名無しさん:2012/06/07(木) 07:36:19.42
>>152
コンパイラが実装しやすい言語は機能が少ないってことだろ
162デフォルトの名無しさん:2012/06/07(木) 08:24:38.11
>>145
理解できない機能はカウントされないから
「理解できない機能が多い」という事実を「機能が少ない」と認識してしまう
163デフォルトの名無しさん:2012/06/07(木) 08:42:53.74
>>160
例外は戻り値(引数)を使う方法で機械的に変換可能だし、
RAIIは単に処理を割り込ませればいいだけ。
テンプレートはただのマクロにすぎない。

ある言語からある言語への変換の話は
元の言語が何かは全く関係なく、
変換後の言語が、手続き的に記述できる言語ならなんでもいい。
副作用が簡単に記述できない言語には変換しにくい。
164デフォルトの名無しさん:2012/06/07(木) 11:05:34.74
Haskellだってモナドとdo記法使えば、副作用だって簡単に記述できるのに
165デフォルトの名無しさん:2012/06/07(木) 11:07:00.19
もしかして、背景にあるものが理解できない=記述できない、とでも
思い込んでるのかな、このJava厨は。

だったら、自分がHotSpot VMの実装についてどれだけ理解しているか、
考えてみればいい。
166デフォルトの名無しさん:2012/06/07(木) 11:22:25.43
Java厨って言葉が気に入ってるようですけど
今の話の流れはC++っすよw
167デフォルトの名無しさん:2012/06/07(木) 12:40:58.41
>>157
一行目と三行目の間に論理の飛躍というか崩壊があるんだが?
168デフォルトの名無しさん:2012/06/07(木) 13:27:10.03
>>167
157と同じ主張のプログラミング言語版が少し上にあるわけだが?
そいつに言えよ
169デフォルトの名無しさん:2012/06/07(木) 13:59:00.23
>>150の主張は
A言語がB言語に変換し易い ⇒ A言語は機能的に劣ってる。
A言語は機能的に劣っていない ⇒ A言語がB言語に変換しがたい。

正しく使うと
日本語は韓国語に変換しがたい。
なぜなら、日本語は機能的に劣っていないからである。
170デフォルトの名無しさん:2012/06/07(木) 14:25:04.01
韓国ネタとかどうでもいい
ネトウヨはニュー速にでもいけ
171デフォルトの名無しさん:2012/06/07(木) 14:34:30.34
逆に韓国語も劣ってないことになるからおかしな話
172デフォルトの名無しさん:2012/06/07(木) 15:01:46.22
互いに劣らない(優劣は付けられない)ではダメなのか。
173デフォルトの名無しさん:2012/06/07(木) 16:02:35.66
「他の言語に変換できない(しにくい)(>>148)」と
「ある言語からある言語への変換の話は 元の言語が何かは全く関係なく、(>>163)」が
Java厨の頭の中では矛盾無く両立するわけ?
174デフォルトの名無しさん:2012/06/07(木) 16:06:07.23
>>150
>だから異なるパラダイムの言語間での変換は難しいし、
これが正しいなら、

>もし「自分の使ってる言語は他言語に変換し易い」と感じるのならば、
>その言語はおそらく機能的に劣ってる。
じゃなくて
>その言語はおそらくパラダイムに大きな違いが無い
だろ?
175デフォルトの名無しさん:2012/06/07(木) 16:40:38.07
同じオブジェクト指向パラダイムでも

Java ⇒ Ruby は簡単
Ruby ⇒ Java は困難

なぜならクロージャもダックタイピングも無いJavaは機能的に劣ってるから
RubyのところはSmalltalkでもPythonでも同じだよ
176デフォルトの名無しさん:2012/06/07(木) 18:22:53.39
同じ機能を持つ処理を記述できるんじゃないのか?
177デフォルトの名無しさん:2012/06/07(木) 19:47:29.39
>>175
機能は関係ないだろ
タイプセーフでコンパイラが型がわかるから別の言語に変換できるんだろ

機能が違ったら変換できないなんていう理論は、
特定のロジックをかけないプログラミングがあるといってるようなもんだ
意味がわからない。
178デフォルトの名無しさん:2012/06/07(木) 20:03:31.59
>>177
おいおい、同じロジックが原理的に書けるなら
簡潔に書けるか冗長にしか書けないかの違いは無視できるってか?
179デフォルトの名無しさん:2012/06/07(木) 20:17:09.81
>>178
入力文字数だけみて開発の生産性を語るバカがおおくて驚く。
高機能なIDEなしに、効率よく開発できるわけがないってのに

コードの短さ至上主義の宗教がRuby

>冗長にしか書けないかの違いは無視できるってか?
もっさりなのは無視できるってか?w
180デフォルトの名無しさん:2012/06/07(木) 20:35:43.40
クロージャすらないゴミ言語で開発効率高いとかワロスwww

みんなが簡単にクロージャ生成して
メソッドの引数に渡したり戻り値で返したりしてるとき、
Java厨だけはしこしこインターフェース定義して
型書いてんでしょ?馬鹿じゃね?
181デフォルトの名無しさん:2012/06/07(木) 20:57:40.82
>>180
JavaやC#の文句言うのは
まともな速度でうごくプログラムかけるようになってからにしろよな
Rubyでは一生無理だろうがw
182デフォルトの名無しさん:2012/06/07(木) 21:38:22.99
クロージャーは、いちおうどちらにもある。
あれではダメというなら、処理系書くやつが悶絶しながら実装することになる
183デフォルトの名無しさん:2012/06/07(木) 21:39:37.84
IDEといえばEclipseはバージョン上がるごとに
順調にゴミ化していってるな
184デフォルトの名無しさん:2012/06/07(木) 22:53:09.06
動的言語はC/C++と組み合わせて適材適所で使うと
開発効率も実行効率も良いんだが、
これって複数の言語を使える事が最低条件だからなー。


単一言語しか使いこなせないボンクラにはJavaがお似合い。
185デフォルトの名無しさん:2012/06/07(木) 22:54:18.86
>>175
> 同じオブジェクト指向パラダイムでも
>
> Java ⇒ Ruby は簡単
> Ruby ⇒ Java は困難
>
> なぜならクロージャもダックタイピングも無いJavaは機能的に劣ってるから
> RubyのところはSmalltalkでもPythonでも同じだよ

ダックタイピングなんてリフレクションで簡単に実装できる。
186デフォルトの名無しさん:2012/06/07(木) 23:01:39.79
>>180
Javaにクロージャーがないと何が出来ないと思ってる?

無名クラスでできないことを5つあげてみよ。
187デフォルトの名無しさん:2012/06/07(木) 23:03:39.45
大規模開発なら静的言語の圧勝。
小規模使い捨てスクリプトなら動的言語の圧勝。

これでいいじゃんか?
公平な結果だろ。
188デフォルトの名無しさん:2012/06/07(木) 23:04:38.25
Ruby厨は、最高の言語だと思い込んでるからなw
イテレータがRubyだけのものと思っている奴もいたww

まつもと氏も各所でRubyは開発の効率がいいとか嘘ついてるから
初心者はかんたんにだまされてしまう
189デフォルトの名無しさん:2012/06/07(木) 23:12:36.39
日本語化 地域化しにくい時点でゴミ以下
190デフォルトの名無しさん:2012/06/08(金) 06:55:53.33
>>186
5つも上げる必要無いよ
「簡潔なコードが書けない」これがJava最大の欠点

Java厨はコードの簡潔さが重要でないかのように言うけど
本当に重要じゃなくて、無名クラスで問題ないなら
Java8でクロージャを入れようなんて議論してない
191デフォルトの名無しさん:2012/06/08(金) 08:09:50.16
>>190
おまえがコードの短さしか見てないだけだろw

そんなに簡潔なコードがかけるのなら、
なぜ実行速度が速くできないんですかwww
裏で冗長なコードが走ってるから遅いんだろ

RubyはJavaの11分の一以下のスピードだ
静的な言語の足元にも及ばない。

PHPやPythonの半分以下の速度しかでないのはどうするんだ
192デフォルトの名無しさん:2012/06/08(金) 08:30:46.86
intがオブジェクトだから遅いのかな
193デフォルトの名無しさん:2012/06/08(金) 08:37:04.54
>>190
お前の言うことからはっきりしたのは2点

無名クラスはクロージャの代わりになる。
Java8で簡潔なコードが書けるようになる。

194デフォルトの名無しさん:2012/06/08(金) 08:37:15.91
Javaで関数型言語のfoldを実装、使用するとどんな感じ?
Pythonのreduce()やRubyのinject()でもいいけど
勿論あらゆる型に対して使えるようにジェネリクスは必須ね
195デフォルトの名無しさん:2012/06/08(金) 08:40:58.88
196デフォルトの名無しさん:2012/06/08(金) 12:27:22.02
無名クラスでクロージャの例


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());
            }
        });
    }
}
197デフォルトの名無しさん:2012/06/08(金) 12:55:22.71
うはww
Javaウンコすぎるwww
198デフォルトの名無しさん:2012/06/08(金) 12:58:34.84
f.func(i)はf(i)としてほしいが、Rubyでもf.call(i)だ
つまり静的と動的の問題ではなくオブジェクトの問題だ
199デフォルトの名無しさん:2012/06/08(金) 14:05:54.90
つ python
200デフォルトの名無しさん:2012/06/08(金) 16:16:30.63
うん、やっぱクロージャ入れるべきだな…
201デフォルトの名無しさん:2012/06/08(金) 19:53:36.64
型推論が無いからクロージャ(もどき)にまで
グダグダと型を書く必要があって
コンパイル時チェックまでしたあげくに
実行時型エラーで落ちるクソ言語Java
202デフォルトの名無しさん:2012/06/08(金) 20:01:34.38
ぬるぽですね
わかります
203デフォルトの名無しさん:2012/06/08(金) 23:21:50.19
後で代入する変数にとりあえずnullを入れるわけですが
これを止めるには時間の概念や代入の概念をガラガラポンしないといけないですね
204デフォルトの名無しさん:2012/06/08(金) 23:48:59.63
概念は人間の頭の中にあると信じるなら言語を変える必要はないです
でも人間を信用しないなら言語を変えるしかない
205デフォルトの名無しさん:2012/06/09(土) 00:36:57.48
>>196
なんでそんなに冗長に書いてるの?
わざとわかりにくく書いてない?

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());
 }
};
206デフォルトの名無しさん:2012/06/09(土) 00:43:17.57
最新のJava7なら少し削れるのかな。

Ordering<String> byLengthOrdering = new Ordering<>() {
 public int compare(String left, String right) {
  return Ints.compare(left.length(), right.length());
 }
};
207デフォルトの名無しさん:2012/06/09(土) 00:50:20.81
>>205-206
これぐらいの量なら充分小さといえるね。

しかし、書く人によってここまで
説明の量が違うとはw
208デフォルトの名無しさん:2012/06/09(土) 00:53:05.16
まあこれぐらい知ってない人が、Javaのコードはこうなんだ!って語っちゃいけないね。
http://japan.internet.com/developer/20080603/26.html
209デフォルトの名無しさん:2012/06/09(土) 02:03:14.73
クロージャのところのコード量は>>196>>205も変わらん。
>>206は型推論で少し短くなってるけど。

それよりも>>196は型安全じゃなくてループ回数を増やすと
例外で落ちる。
210デフォルトの名無しさん:2012/06/09(土) 02:16:15.17
>>209
> クロージャのところのコード量は>>196>>205も変わらん。

うん。知ってる。
だからこそ短く書いてみせた。

これでJavaはコードが長いと勘違いしている人が
単に読んでないだけだってあぶり出されるw
211デフォルトの名無しさん:2012/06/09(土) 02:21:30.41
あと、>>196は外部スコープの変数の参照(書き換えも含む)が
Javaの無名クラスで出来ると言いたいんじゃないかと。
クロージャの重要な特徴のひとつだし。

>>196が長いのは
・メソッドfooの振舞いをポリモーフィズムで入れ替え可能
・クロージャは呼び出すたびに結果が違う(副作用有り)
・クロージャが外部スコープの変数を書き換え
と色々やってるからで、意外と他の言語で書いても長くなりそうだ。
副作用が在るから関数型でもすっきり書けないし。
212デフォルトの名無しさん:2012/06/09(土) 02:34:11.80
逆に>>205>>206は動的言語派が凄く喜びそうだ。
例えばPythonで同じコード書いたら凄く短い。

byLengthOrdering = lambda x,y: cmp(len(x), len(y))

だけど、>>196は代入があるからPythonのラムダじゃ(たぶん)書けない。
213デフォルトの名無しさん:2012/06/09(土) 03:01:57.68
スレの流れを見てたら、D言語で書きたくなってきたりする。
空気は読まない。
http://ideone.com/p8v3x
214デフォルトの名無しさん:2012/06/09(土) 03:23:26.38
> それよりも>>196は型安全じゃなくてループ回数を増やすと
> 例外で落ちる。

wwwwwwww
215デフォルトの名無しさん:2012/06/09(土) 06:36:08.45
長々と説明したのに「で?」と返された気分?
216デフォルトの名無しさん:2012/06/09(土) 07:47:05.58
うわ、マジだ
ホントにJavaの型チェックはゴミだな

http://ideone.com/H3cXr
217デフォルトの名無しさん:2012/06/09(土) 08:15:48.97
java厨もといC++系統厨だけどjavaのSAM Type用の構文糖衣くらい
java5くらいの時点で入れとけよって思うよ

ジェネリクス使用クラスを可変長引数にしたときのアレも
さっさとどうにかして欲しい

でも静的言語の方が気が楽
>>90の静的手続き型言語:大規模ドカタ開発に同意だわ
経験浅い要員にJavaScriptとかやらせるとこっちが死ぬる
218デフォルトの名無しさん:2012/06/09(土) 08:30:21.51
>>210
>>206で短く書けてると思ってる事に一番驚いたわwww
219デフォルトの名無しさん:2012/06/09(土) 09:08:38.63
あのな、クロージャがある言語では>>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
多少、短くかけても実行時に遅かったら意味がないだろ。
冗長とバカにしてるそのコードよりもスクリプト言語は遅い。
221デフォルトの名無しさん:2012/06/09(土) 09:46:37.41
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()
);

と書ける
222デフォルトの名無しさん:2012/06/09(土) 10:41:28.50
呼び出し側はそれで良いけど、定義する側は相変わらず
異なる型のラムダ式毎にSAM Typeを定義する必要があるんでしょう?
223デフォルトの名無しさん:2012/06/09(土) 10:51:52.64
>>213
同じく話の流れを無視してHaskellで書いてみた。

http://ideone.com/72ySa
224デフォルトの名無しさん:2012/06/09(土) 11:05:34.15
a -> b -> c
SingleAbstractSingleArgument< A, SingleAbstractSingleArgument< B, C > >
225デフォルトの名無しさん:2012/06/09(土) 11:24:00.45
>>222
既存interfaceやjava.util.functionsで対応出来ないものはそうなる
ただの構文糖衣だし
226デフォルトの名無しさん:2012/06/09(土) 11:29:58.02
>>222
> 異なる型のラムダ式毎にSAM Typeを定義する必要があるんでしょう?

今まで何種類の「異なる型のラムダ式」を書いたことがある?

ラムダ式ってのその用途から、引数の型は単純で
ライブラリとGenericsを使えば、すでに定義済みであることが多いよね。

そこ、気にするところじゃないよ。
227デフォルトの名無しさん:2012/06/09(土) 11:38:01.79
ユーザ定義型不要論ワロタ
228デフォルトの名無しさん:2012/06/09(土) 11:43:11.59
クロージャーは外にある変数にアクセスできるから
引数や戻り値はあんまり必要ないしね。

必要な場合っていうのは例えば、
Collections.sort(ls, ← これのこと。

コレクションが渡された時にそのコレクション内の項目ごとに
クロージャーを呼び出すってときに、引数を伴ったクロージャが必要になる。

で、項目一つを引数に呼び出すとき(map等)は、クロージャの引数は一つ
で、項目二つを引数に呼び出すとき(compare等)は、クロージャの引数は二つ
引数三つ、四つもどこかのライブラリで定義されていたと思うが忘れた。

型の違いはGenericsで吸収できるし、まあ要するに、
異なる型のラムダ式毎にSAM Typeを定義する必要があるということは
気にすることではないということ。
229デフォルトの名無しさん:2012/06/09(土) 11:43:55.67
>>227
誰もそんな事言ってないよ。
230デフォルトの名無しさん:2012/06/09(土) 12:04:21.11
こんな感じで力技で片っ端から定義していけば大丈夫だよ
え?ダサい?だってJavaだもん

http://gee.cs.oswego.edu/dl/jsr166/dist/extra166ydocs/extra166y/Ops.html
231デフォルトの名無しさん:2012/06/09(土) 12:07:26.43
>>230
バカですか? genericsで数個に統一できます。
バカのみがJavaをダサいと言う。論破完了w 
232デフォルトの名無しさん:2012/06/09(土) 12:10:19.67
>>230はネタで言ってるだけだろ〜
馬鹿って言ったら可哀想だよ。
本気で言っているとしたら、馬鹿だけどね。あはははは。
233デフォルトの名無しさん:2012/06/09(土) 12:30:43.42
>>230はGenericsを使って"アレ"なんだけどね
234デフォルトの名無しさん:2012/06/09(土) 12:33:17.01
職業プログラマとしては>>230はアリだな
C++のテンプレートやC#のジェネリクスとは異なるJavaのジェネリクスで
コストに折り合いを付けるならこうなる
235デフォルトの名無しさん:2012/06/09(土) 12:34:24.29
>>234
無理しなくていいよw
そんなこといってもJava使いには見えないからw
236デフォルトの名無しさん:2012/06/09(土) 12:37:25.81
Java使いじゃなくて、>>234がそう思ってるだけだろw
馬鹿が自分定義のJavaはこうだって言ってるだけ。

誰も使ってないものを持ってきてもな。
それじゃJavaを貶められないよ。
237デフォルトの名無しさん:2012/06/09(土) 12:39:48.04
いやいや、馬鹿すぎるのは>>235だろ
馬鹿過ぎて痛々しいレベルだわ
>>234がコスト持ち出してフォロー入れてる時点で気付けよ
238デフォルトの名無しさん:2012/06/09(土) 12:42:29.51
はいはい、自己フォロー乙
恥ずかしい奴だ
239デフォルトの名無しさん:2012/06/09(土) 12:45:45.85
進化がとまっているJavaと比べるのは酷だ。
比べるならC#
240デフォルトの名無しさん:2012/06/09(土) 12:48:23.25
俺の中ではJavaはJDK 1.0.2の時点でもう終わってた
241デフォルトの名無しさん:2012/06/09(土) 12:49:41.01
・Javaのジェネリクスは型パラメータにプリミティブ型を指定できない
・オートボクシングによるプリミティブ型からオブジェクト型への変換は
  コスト的に許容できないケースがある

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

破綻する原因は>>293で言ってることの積み重ね
どんな優秀なuyでも100000個もメソッドかけば1箇所くらいはタイプミスとかしてる可能性がある
それは人よって違う
自身の書いてるソースコードに、バグの混入の可能性が低い奴じゃないと動的言語で大規模は無理
動いてたはずのコードのから、いきなりバグが見つかったとき
そのバグをチェックする技法が存在しないことを知る
そしてそれは静的言語では解決できる問題だったりする
「本当にこれリリースして大丈夫なの?」そんな不安ばかりがソースコードとともに増え続けるのが動的言語
295uy: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に集積できたメソッドに関してだけは速度と型安全性が高まる事
296uy: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 とかいう記述があったらエラーくらいだすべき
297デフォルトの名無しさん:2012/06/11(月) 07:42:00.91
>>295
君が考えるような馬鹿な手法よりも
HM型推論でも実装して推論できないときにワーニングでも出したほうが1000000倍有効

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

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

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

>>297
TraceMonkeyでググレカス

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

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

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

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

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

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


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

Object x = null;
x.toString();
308uy:2012/06/11(月) 12:54:23.05

本当にズレたバカだな

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

テストできねーんだよカス
実行させて正しく動くかどうか確かめる目デバッグしか、動的言語は出来ない
至極単純
337デフォルトの名無しさん:2012/06/11(月) 14:20:31.18
静的言語でも動的言語でも
テストコードを書いてテストは出来る。

まあ、動的言語の方だと修正の時の
効率が悪いのはいつものことだが。
338uy:2012/06/11(月) 14:23:31.17
しかしRubyになれたら今更静的言語とかかなり無理なんだろう
Redmineに、金にもならないというのに毎日必死に様々なレポートが来るあたりに
もうあの頃に戻りたくないみたいな必死さを感じる

>>329
1、外部ツールによって型チェックをどうにか行わせる技法
2、ソースコード中に条件分岐を入れない、つまりHTML化
3、3つ目
「大規模プログラムを作らない」
プログラムは多機能なものであろうと、どうにかして「小規模」にさせ
動的言語でも管理できるソースコードサイズに抑える。

339デフォルトの名無しさん:2012/06/11(月) 14:26:02.46
uyがuyにレスしてんなw
事故レス化www
340uy:2012/06/11(月) 14:29:22.92
個人的に、100%ソースコード全体を掌握できるのは
俺の場合2000行だと思う
空行とか、冗長なアルゴリズム抜いた2000行な
変数名やその他、全ての処理を覚えきれるのが俺はそのくらい
ちょっと多めに見積もっても1万行
これ以上はきつい。共通処理は抜き出して、ライブラリ化して欲しい

現時点、この範囲内で何を作れるか、だろう Windowsは作れない
人はおそらく今の20歳よりも、10年後の20歳の方が頭が良い。
人間のスペックが高くなれば動的言語でも大規模普通に書けるようになるはずだから、
こっち側が伸びるのは時間の問題という気もしなくもない
341デフォルトの名無しさん:2012/06/11(月) 14:32:03.67
スペックが高くなれば静的な関数型を使うので動的言語なんて使いません
342uy:2012/06/11(月) 14:35:11.36
結局は、俺がITを進化させなくても、今後100年間の間に
俺以外の誰かがITを進化させるだろうよ

結局、俺自身がどうしても命や生涯を削ってこのITっつう分野に
金にもならない無償の努力を注ぎ込む価値はないものだと思う
勝手にやっててくださいよ
人は何かやってないとダメだ
「毎日ちょっとずつ前進してる、成長してる」っていう、その思い込みみたいな、高揚感が大事
それを得る為に、今2012年は ITという分野をオモチャにして、「成長感」を感じて、
生に意味を見出そうとしてるだけにも思える

なればこそ、あまり速い速度でゲームクリアさせる意味も、実際のところないのかもしれない

つうか、それよりもふと思うのは、科学が発展した事によって
戦争兵器開発などで人を殺してきた数と、医療機器などの開発で人を生かしてきた数、はたしてどちらが多いのであろうか
俺のやっている事はめぐりめぐって、誰かを殺すことになる可能性も考慮したい
343デフォルトの名無しさん:2012/06/11(月) 14:36:43.18
老兵(uy)さっさと消えてくれ
344uy:2012/06/11(月) 14:45:44.34
>>341 残念ながら関数型はありえない 夢から覚めとけ


無償のボランティアで俺が何かITの世界へ貢献する価値をやはり見出せない
結局は遊び
効率の悪い事やってる奴を見つけては晒しあげる遊び
俺はなんと性格の悪い事か
俺はただ、自分の力で何か世の中の一部が動いていく様子を見ているのが面白いから
リソースをばら撒いたりするだけで、社会貢献などは考えていない
駄文書きながらでも、3つも案がでただけ、よしとする

1、外部ツールによって型チェックをどうにか行わせる技法
2、ソースコード中に制御構文を入れない、つまりHTML化
3、大規模プログラムを作らない
345デフォルトの名無しさん:2012/06/11(月) 16:32:18.23
>>344
働けよw
V爺か。
346デフォルトの名無しさん:2012/06/11(月) 16:51:54.20
uy君は趣味の範疇のたいしたことないプログラムしか書いたことがない
347デフォルトの名無しさん:2012/06/11(月) 22:23:47.03
uyは就職できてないんだろ
はよ働け
348uy:2012/06/12(火) 04:18:36.80
悪いけどマジで貢献しない
世の中に金儲けの手段なんて良い事から悪い事までいくらでもあると思うよ

ある奴が「 金儲けをする事は悪い事ではない 」 と言った、
俺はそいつのその意見を否定する
349デフォルトの名無しさん:2012/06/12(火) 11:06:45.88
鬱転
350デフォルトの名無しさん:2012/06/12(火) 11:23:54.71
 
351デフォルトの名無しさん:2012/06/12(火) 22:55:15.74
uyははよ働け
まじでゴミカスになるぞ
352uy:2012/06/13(水) 05:01:20.79
俺はニートの気持ちを知っている
社会にでても、ニートをネット上で叩くことはないだろう

マジレスするとそんなに長生きするつもりもないし
したくもないし
できるとも思っていないからやりたい事だけやって生きるのさ
353デフォルトの名無しさん:2012/06/13(水) 05:04:51.07
ようするにやりたいことがないんだなw
354デフォルトの名無しさん:2012/06/13(水) 05:12:20.11
時間があるようだから、
オセロの起こり得るコマ配置を数えろよ
rubyとやらで
355uy: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
社畜起きろと日本中で言っている


「目を覚ませ」 ってニートからのメッセージだよ


受け取れ
356uy:2012/06/13(水) 05:25:48.11
Goとか見てると、確かに既存の言語よりはよくなってるんだけど
また言語構文を1から覚えないと扱えないんだよな
基礎的なif、forの扱いは変わらないだろうけど、
if,forだけ使えたってそれはC言語レベルのプログラミングが出来るってだけで、全然言語扱えていないし
覚えることが増える原因はソースコード内に型宣言があるからだと思う

型のある言語ってやっぱダメじゃね
つうかね、一度決めた決まりごとを「こうしたほうがいい(キリッ」とかって変えていくなら天下をとれって話
「こうしたほうがいい(キリッ」とかいってObjectve-CやScalaやGoみたいに、今まで言語とは違ったシンタックスでやられると
迷惑でしかないんだよ
{ } このブロック括弧が [ ] とか | | や "" だったり
文字リテラルが $test$ .aaaa. とかで表現する言語でてきたら、発狂するだろって話

さっさと統一しろと
それが出来ないならrubyくらいにリファレンス読まなくてもなんとなく言語仕様が読み取れるような言語設計で言語作れと思う
357デフォルトの名無しさん:2012/06/13(水) 06:46:55.39
どんだけオセロ好きなんだよ!
358デフォルトの名無しさん:2012/06/13(水) 07:00:43.48
rubyのどこがなんとなく言語仕様が分かるんだよ。
ほぼ全てが「rubyならこう書けるんです。分かりやすいでしょう?」とか、はてな民がほざいて
馬鹿が「うわールビーは凄いなー。全く気付かなかったけど、言われてみれば分かりやすい」とか追従する、
驚き最大化の原則に基づいてるだろ。
359デフォルトの名無しさん:2012/06/13(水) 07:19:35.56
はぁ?
たいていの言語で、エキスパートの書くコードはそんなもんだろ。

だらだらと書いたコードを、わかりやすいと勘違いして信仰してる奴等については知らんが。
360デフォルトの名無しさん:2012/06/13(水) 07:26:30.92
Rubyが難しいとか、素で言ってるならよほどだろ
意図的にアンチし続けてもそろそろ他の動的言語と歴然な差はついてきてるが
361uy: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) {
}
362uy:2012/06/13(水) 07:47:52.02
そこへきてrubyはこれ、
def func a , b
end

適当に感でかいたって動くわ
363デフォルトの名無しさん:2012/06/13(水) 07:52:46.44
c
void f(const char* s){
}

c++
void f(const std::string& s){
}

java
void f(String s){
}

C#
void f(String s){
}
364デフォルトの名無しさん:2012/06/13(水) 08:04:54.12
>>362
> 適当に感でかいたって動くわ

そのテキトー感がリスクなんだよな。

結局、ハイリスクハイリターンを取るかローリスクローリターンを取るかの考え方の違いじゃね?
365uy:2012/06/13(水) 08:12:01.77
>>364
言ってる事が曖昧すぎる
「リスク」は何をさしてるか言ってみろ


func c(a, b string , c , d int) {
 fmt.Println(a,b,c,d)
}
どうせGOはほうっといても勝つから、何年後かにはこういう形のメソッドの型宣言が一般的になってるよ
型がある時点でどんどん変わっていく

ついてくる?
366デフォルトの名無しさん:2012/06/13(水) 08:51:58.10
>>358
ゴルファーは確かに多いし変なコード書く輩も多いけど
言語そのものはそこまでヘンテコでもないよ
367デフォルトの名無しさん:2012/06/13(水) 11:27:03.30
>>365
どうでもいいけどすごくobject pascalっぽい文法
368uy:2012/06/13(水) 13:37:39.11
どうでもいい
369デフォルトの名無しさん:2012/06/13(水) 13:52:08.12
そのカンで書いて誤変換とか馬鹿だな

感じゃなくて、勘だろハゲ
370デフォルトの名無しさん:2012/06/13(水) 14:07:50.53
Go + Ruby = Goruby

統合しちまえよ
371デフォルトの名無しさん:2012/06/13(水) 14:09:51.71
適当に勘で書くアホを排除することができる
すばらしい
372uy:2012/06/13(水) 14:15:13.67
お前らの頭が悪すぎて話にならない

じゃあ一生静的言語を使っていろって
二度と動的言語触らなくていいから
373デフォルトの名無しさん:2012/06/13(水) 14:19:22.93
最新流行の捨て台詞はこうだ。すぐ使えるようにちゃんと練習しておけ
「いいんですか、俺は必要悪ですよ?」
374デフォルトの名無しさん:2012/06/13(水) 14:28:03.10
長生きするつもりは、ってもう25にもなるのになぁw
ノンビリしとらんでもうちょっと生き急げよ。
375デフォルトの名無しさん:2012/06/13(水) 15:09:45.22
結局動的言語のほうが効率でるのは揺るがない事実だよ
仕事で言語選択権の無いドカタにはあまり関係の無い話
これからも静的言語でがんばってくださいよ…
376uy:2012/06/13(水) 15:44:54.87
GoRubyってゴルフ用のrubyじゃん
みちゃならんものを見た気がするこわ
377デフォルトの名無しさん:2012/06/13(水) 16:06:44.69
まだ完成してないのかよ
378デフォルトの名無しさん:2012/06/13(水) 16:21:50.12
動的言語的処理を静的言語で処理させれば問題解決。
379デフォルトの名無しさん:2012/06/13(水) 16:36:04.65
LISPコンパイラの出番か
380デフォルトの名無しさん:2012/06/13(水) 16:50:38.83
使えば使う程にRubyって駄目だなと痛感することになる。

Rubyを学習し始めた頃は誰でもRubyは素晴しいと思うのだが、
数年も使えばそのどうしようもない互換性のなさにウンザリする。
1.4時代のコードが1.6になった途端に互換性がなくなり動かなくなることはあったが、
1.6→1.8ではそれが顕著になり、
1.9など何のエラーも出さずに前のコードが動く方が珍しいほど
それどころか1.9に行かずREEが海外ではデファクトになりつつある現状、
そして始まるPlain RubyとREEの方言問題
381uy:2012/06/13(水) 17:00:14.02
だから、一生静的言語使ってればいいじゃん
Rubyを叩いて変わりにPython使ってますみたいな奴ならまだわかるけど
Rubyを叩いてC#使ってます!!!
とかお話にならない
なんでそんなレベルでレスできるのか神経を疑ってしまうな

俺は未解決問題について思考をまとめているだけなわけで
有用レスを返せないのであればお前たちのレスはただのゴミでしかない 邪魔だ失せろ
382デフォルトの名無しさん:2012/06/13(水) 17:31:59.20
ゴミuy消えろ
383デフォルトの名無しさん:2012/06/13(水) 21:34:18.23
>>381
お前のためのスレだ

○○言語をディスってる人ってただの中二病だと思う
http://kohada.2ch.net/test/read.cgi/prog/1339212116/
384デフォルトの名無しさん:2012/06/13(水) 22:50:10.93
>>381
パフォーマンス考えないバカはお話にならない

Rubyはもっさりで用途限定
こんなクソ言語はおぼえるだけ時間の無駄

Rubyは宗教団体だから、パフォーマンスの話題はタブーなんだろうな
モッサリ言語のくせに、エレガントだの自画自賛して笑える

>>380
MRIがひどすぎるから、他のRubyがでてきてるのか。

後方互換性の問題は同意。
バージョンあげるとすぐ動かなくなるから、きわめて開発生産性が低い
385デフォルトの名無しさん:2012/06/13(水) 23:10:15.90
uyはたいしたプログラムも書けないクズだから言っても無駄
386uy:2012/06/14(木) 05:05:36.64
だから、一生静的言語使ってればいいじゃん
Rubyを叩いて変わりにPython使ってますみたいな奴ならまだわかるけど
Rubyを叩いてC#使ってます!!!
とかお話にならない
なんでそんなレベルでレスできるのか神経を疑ってしまうな

俺は未解決問題について思考をまとめているだけなわけで
有用レスを返せないのであればお前たちのレスはただのゴミでしかない 邪魔だ失せろ


静的言語よりも開発効率のでる動的言語から、どうやって
静的言語よりも時間が長くなってしまう可能性のある「デバッグ時間」を削減するかって部分の話なのに
話について来れないならお前たちは邪魔すぎる
ろくな思考アイディアをだしてこないゴミであれば こいつらの使用目的も薄くなったか
387uy:2012/06/14(木) 05:20:29.45
ゴミはただのゴミでしかない

ゴミに対し何かを教えてやるつもりもない

ゴミが効率の悪いゴミグラミングをしていても

俺は教えてやらない

勝手にやってろ 以上
388デフォルトの名無しさん:2012/06/14(木) 05:27:39.24
初心者スレで教えてもらう一方です、とw
389デフォルトの名無しさん:2012/06/14(木) 05:30:31.01
>>386
いつまで頭の中が静的、動的の2分類なんだ?
ルーピー言語の狂信者はやっぱりアホだなw

強く型付けされた言語+型推論、が最強なのは明らかだろ
開発の効率、性能、無駄な記述の排除、これ全部満たすのはこれしかない。
C#は型推論も関数型の要素もありかなり現代的

やっと型付けされた言語の重要性に気づいたかとおもいきやGoかよ
いまどきGenericsもない言語とか終わってんだろww

Python? Rubyよりましだがどっちもモッサリだからどうでもいいな
どんぐりの背比べ
390デフォルトの名無しさん:2012/06/14(木) 07:12:25.45
Ruby Pythonは目糞鼻糞
391デフォルトの名無しさん:2012/06/14(木) 07:38:27.66
Java C#は目糞鼻糞
392デフォルトの名無しさん:2012/06/14(木) 07:49:10.75
>>389
で、こいつは自分がHaskellを理解できないルーピーだということには、
いつ落とし前をつけるのかねwwwwwwwww
393uy:2012/06/14(木) 09:33:15.40
だーから、
静的言語一生やってろよゴミ

Haskellってモナド(笑)とかいうゴミカス概念の元でプログラミングしてるあれでしょ
面白いことやるよね
「ぼくのかんがえたモナド(笑)」の上でプログラム組ませるとかさ・・・
Haskellって本当にEsoteric programming languageなんだなって思った

バカしか使わない
関数型言語はLisp以外はゴミ

良く覚えておけゴミ
394uy:2012/06/14(木) 10:02:43.63
何度もかいたけど

rubyをディスってる奴、Python使ってるんだよね? またはLispやPerlという選択肢もあるにはあるか?
rubyディスってC#やJAVA使ってます!!
とかマジで面白すぎなんだけど

じゃあ日ごろのPC操作やプログラミング上でたまに必要になるバッチ処理は何言語でかいてるっていうんだよ
本気でC#やJAVAで書いてるわけはないと思うから
やっぱ手動でやっちゃうのかな

rubyやPythonや動的言語なんていらない!C#、JAVAあれば十分! 静的言語でも効率がでる!
とかいう意見、これ絶対に議論で勝てるわけがないのにw
よほど頭が知恵が浅いんだろうか・・・

いくら俺がふざけたコテだからって
俺と逆説唱えるために動的言語が嫌いになってをこれから一生動的言語を触らずに
プログラミングやっていくとか哀れすぎる

まだ気づかないのか
395uy:2012/06/14(木) 10:08:26.50
つうか教えてやらないよ
情弱のゴミのくせに態度が悪すぎる
お前らゴミは人に教わる態度ではないよね
苦しめ
396デフォルトの名無しさん:2012/06/14(木) 10:16:13.67
>たまに必要になるバッチ処理は何言語で

スレタイ「動的言語の問題点、大規模開発でテスト工数が増大」
397デフォルトの名無しさん:2012/06/14(木) 11:34:42.08
>>394
C#は汎用だし小さなプログラムにも使えるだろ

後方互換性に配慮しないルーピー言語で書くと、バージョンあげたら
すぐに動かなくなるからトータルで見ると生産性が低い
398デフォルトの名無しさん:2012/06/14(木) 11:48:20.61
小規模のプログラムはシェルのコマンドの一つになるだけだよ
動的言語のライブラリを作っているようなものだ
399デフォルトの名無しさん:2012/06/14(木) 11:49:22.94
1.4から使い続けてるRuby使いだけど
uyだけはこの板からとっとと出てって欲しい
Rubyの良さも悪さも何も解っちゃいない
400デフォルトの名無しさん:2012/06/14(木) 11:50:49.56
いや、解ってないだけならいいが、自分のために周りを邪魔扱いなのが問題
ここはお前の私物じゃねえんだよと
401デフォルトの名無しさん:2012/06/14(木) 12:44:08.67
uy君はアレだなぁ
402デフォルトの名無しさん:2012/06/14(木) 13:53:10.40
動的言語の問題点、宗教戦争に巻き込まれる
動的言語の問題点、uyが現れる
403デフォルトの名無しさん:2012/06/14(木) 14:24:37.76
動的言語好きな連中がHaskellやモナドを嫌うのは分かる。
コンテクストを引き回す = 型でコンテクストを強制だから
動的言語好きにはそこが窮屈なんだろう。
俺だって適当に書散らすときはPythonの方が楽だ。

良く分からないのは静的言語好きなのに嫌う連中。
静的型でバグ減らせる方が良いんじゃないのか?
404デフォルトの名無しさん:2012/06/14(木) 14:33:11.02
>良く分からないのは静的言語好きなのに嫌う連中
tiobeでの上位はC,Java,C++,Objective-C,C#

×静的言語好き
○C系列言語好き
405デフォルトの名無しさん:2012/06/14(木) 14:52:27.21
>>404
多くの開発者が移行しやすいようにsyntaxを似せて
あるだけであって、内部のアーキテクチャはまったく違う。
C系列とひとくくりにしないように。
406デフォルトの名無しさん:2012/06/14(木) 15:01:57.93
syntaxの話や
407デフォルトの名無しさん:2012/06/14(木) 15:37:06.02
>>403
俺はこのスレでは動的側だけど、型推論のある言語は否定しないよ
必要なところだけ指定すればいいからね
全部手で指定するタイプが嫌なだけ
408デフォルトの名無しさん:2012/06/14(木) 16:23:58.69
静と動を兼ね備えたVB.NETが最強ということか。
409デフォルトの名無しさん:2012/06/14(木) 16:56:46.85
ブラック企業が持つと逆に頭がおかしくなって死ぬ
410デフォルトの名無しさん:2012/06/14(木) 19:48:32.42
意味論?それって食べられるの、みたいな奴が世の中多いから、
シンタックスがCっぽければなんだってC系列、って言って騙せるんだよw

で、世の中でそうであったほうが儲かる、って奴がいるから、変わらない。
411デフォルトの名無しさん:2012/06/14(木) 20:09:25.16
ちょっと前のC#はDelphiそっくりだった、っても納得しないやつも多そうだしなぁ
412デフォルトの名無しさん:2012/06/14(木) 20:27:00.52
>>410
それを分かっていながらユーザーの移行性を軽く見た結果流行ってない言語ってあるよな
まぁビジネスライクとアカデミックの違いだな
413デフォルトの名無しさん:2012/06/14(木) 20:34:19.64
Algol系って言えばDelphiもC#も同類だし静的言語って言えばC#もHaskellも同類だ
そうやって競争したくない相手を同類にして勝てそうな相手だけを仲間外れにするんだよ
414デフォルトの名無しさん:2012/06/14(木) 20:35:44.50
その昔はJavaScriptでさえ、構文はCに似ているので云々と宣伝されてたもんだ。
415デフォルトの名無しさん:2012/06/14(木) 20:39:50.48
JavaScript(旧名LiveScript)さんは売り込むためだけに名前すら変えたもんな
416デフォルトの名無しさん:2012/06/14(木) 20:48:50.23
>>412
流行った結果しがらみだらけになる、という馬鹿の実例があるのに、
それをご丁寧に真似する馬鹿も世の中いるからなw
417デフォルトの名無しさん:2012/06/14(木) 21:35:13.31
w付けても漏れ出る必死さ
418デフォルトの名無しさん:2012/06/14(木) 21:43:20.61
>>415
今じゃJSのことをJavaよ呼ぶ輩がいる始末…
419デフォルトの名無しさん:2012/06/14(木) 22:03:29.90
つまり型安全性や型推論のメリットなんて、
使い慣れた文法を捨てて
言語を乗り換えさせる程の価値は無いってこと?

C#使いが慣れた文法を捨ててまでHaskellに移行しないのと同様、
Ruby使いは慣れた文法を捨ててまでC#に移行する必要は無いってこと?
420デフォルトの名無しさん:2012/06/14(木) 22:10:36.30
人によるんじゃね

でも割と居る気がする
Pythonのインデント方式に拒否反応を起こす奴とかもいるし
421デフォルトの名無しさん:2012/06/14(木) 22:17:26.29
型推論は文法を変えなくても出来ることがあるだろ
コスパ無限大のメリット
422デフォルトの名無しさん:2012/06/14(木) 22:40:37.58
>>419
C#3.0から型推論ある
http://ufcpp.net/study/csharp/sp3_inference.html

Rubyなら迷わずC#に移行だろう
性能がまるでちがう
高機能なIDEもあるしな
423デフォルトの名無しさん:2012/06/14(木) 22:52:43.22
>>422
プロトタイプ作成用途はそれでいいかも知れんね
ただ、テキスト処理や高級計算機としての用途がメインの俺は
移行というほどのことにはならんだろなあ
424デフォルトの名無しさん:2012/06/14(木) 23:04:03.59
>>422
HaskellやOCamlの型推論とは比べ物にならん

この程度の型推論も出来ない言語だぜ?
http://ideone.com/0nb9F
425デフォルトの名無しさん:2012/06/14(木) 23:05:15.05
>>419
> つまり型安全性や型推論のメリットなんて、
> 使い慣れた文法を捨てて
> 言語を乗り換えさせる程の価値は無いってこと?

どの言語でもしばらく使っていれば慣れるので
それは理由に成らない。

型安全性や型推論のメリットだけが残る。
426デフォルトの名無しさん:2012/06/14(木) 23:28:44.21
C#の型安全性

http://ideone.com/tSyAy
427デフォルトの名無しさん:2012/06/14(木) 23:28:49.84
>>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の型がわからない以上推論できる要素が何もないじゃないか。
428デフォルトの名無しさん:2012/06/14(木) 23:32:39.00
>>427
Haskellは出来るけど

http://ideone.com/MMfP7
429デフォルトの名無しさん:2012/06/14(木) 23:35:22.80
>>427
> xの型がわからない以上推論できる要素が何もないじゃないか。

xの型を書いても戻り値の型すら推論出来てない

http://ideone.com/jpBRl
430デフォルトの名無しさん:2012/06/14(木) 23:42:37.98
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;
431デフォルトの名無しさん:2012/06/14(木) 23:45:27.03
>>430
オーバーロードした演算子だって戻り値決まってんだから推論すべきだと思うが
432デフォルトの名無しさん:2012/06/14(木) 23:50:17.30
>>431
上の例は具体的に何の型に推論されるべき?
433デフォルトの名無しさん:2012/06/14(木) 23:56:04.43
+演算子を定義したインターフェース型(的なもの)があって、
それをintとStringが継承してれば、その型を推論するのが良い
434デフォルトの名無しさん:2012/06/15(金) 00:06:01.96
>>428
それは演算子で推論してるだけじゃん。

+が数値扱う演算子として定義されてるから推論できる。
逆に言えば、+演算子が使われている時、+の左右は数値でしかありえない。
(標準の+を隠して自分で定義すれば話は別だが、同時に複数使えない)

C# なら xは数値以外の好きなオブジェクトにすることができる。

言語仕様の違いでしかないよ。
435デフォルトの名無しさん:2012/06/15(金) 00:08:16.95
>>433
インターフェース型的なものをintとStringが継承するとして、
その型と推論して、じゃあ演算自体はどうするんだよw
436デフォルトの名無しさん:2012/06/15(金) 00:08:45.82
>>433
それはねーわwwJavaのジェネリクスに退化するわw
<String>と<int>でJIT後のネイティブコードはそれぞれ生成されるんだからさ
高速化のために
437デフォルトの名無しさん:2012/06/15(金) 00:10:51.53
> +演算子を定義したインターフェース型(的なもの)があって、
> それをintとStringが継承してれば、その型を推論するのが良い

つまり、objectという基本クラスがあって、
objectを継承した、Int。
objectを継承した、String。

この場合は、objectと推論して、
object + object をするのか?
んで、その結果は?
438デフォルトの名無しさん:2012/06/15(金) 00:12:38.44
話をまとめると、こんな場合でも型推論できるというけれど、
そのかわり型に応じた演算子オーバーロードが出来ないhaskell。

ということだね!
439デフォルトの名無しさん:2012/06/15(金) 00:12:40.73
>>434
まるで演算子のおかげで推論できてるかのような言い草だが、全然関係ない

C#
http://ideone.com/bZ0Oi

Haskell
http://ideone.com/1WXPd
440デフォルトの名無しさん:2012/06/15(金) 00:14:32.21
>>438
Haskellの + は Int, Integer, Float, Double 等や、
Num型クラスをインスタンスとなる任意のユーザ定義型でオーバーロードできる
441デフォルトの名無しさん:2012/06/15(金) 00:19:20.48
>>437
引数によって決まる
442デフォルトの名無しさん:2012/06/15(金) 00:19:29.25
>>439
そのfの型を出力したら何で出るの?
443デフォルトの名無しさん:2012/06/15(金) 00:21:29.54
>>442
f :: a -> a

aはただの多相型
444デフォルトの名無しさん:2012/06/15(金) 00:28:30.76
ね?こうやって議論して、Haskellの型推論が優れていると分かっても
全く移行する気にならないでしょ?

やっぱり>>419は正しいんじゃない?
445デフォルトの名無しさん:2012/06/15(金) 00:47:33.80
人によるんじゃね
446デフォルトの名無しさん:2012/06/15(金) 01:17:26.43
C#に型推論あるっていうから
Ruby辞めてC#使おうと思ったのに
なーんだウンコじゃん
447デフォルトの名無しさん:2012/06/15(金) 01:21:39.39
Ruby辞めてHaskell使ったらいいよ
448デフォルトの名無しさん:2012/06/15(金) 01:52:33.51
言語の選択はエコシステム全体で見る必要がある。
Syntaxのみで選ぶのはナンセンス。

パフォーマンス(性能)は高いか?
 スクリプト言語はモッサリすぎて用途が限定される

開発生産性は高いか?
クラスライブラリが充実しているか?
ドキュメントは充実しているか? ネットと書籍

高機能なIDEは使えるか?
 高機能なIDEなしに高速なデバッグとリファクタリングは不可能

英語が苦手な人限定:日本語情報は充実しているか?

コンパイルの時間は高速か?
 C#は2回目以降は瞬時。エディット&コンティニュー機能

後方互換性に配慮されているか?
 頻繁に破壊的仕様変更がある言語では、開発の生産性が落ちる。
 例えば、RubyやRubyやRubyなど。

嵌ったときに質問できる場所はあるか?
 マイナー言語だと英語圏でもレスポンスが返ってこない


結論: C# 最 強 !!
449デフォルトの名無しさん:2012/06/15(金) 03:49:36.60
Rubyはクズ
何も考えずに作ってる証
450uy:2012/06/15(金) 05:53:42.61
>>396
お前みたいに理解してる奴もいるが、後ろを見てみろ
マジで>>397こういうのがいるんだよ、どうにかしろ

>>399
古参だと何が偉いのか知らないけど
少なくとも2chにおいて重要なのはお前よりも俺
俺がスレ引っ掻き回したらこのスレは1日で50もレス進んだ
同じ事出来る?

マジレスするとインターネット上に同じコミュニティはせいぜい1、2年しか持たない
昔はよかったなんていっても昔の様子には二度ともどらない
3年目にもなると新しい層がやってきて、元いた層は別の場所へ移動していくか、駆逐される
俺も俺の属したコミュニティを新しい層に駆逐された事もあるが、今回は俺が侵略し駆逐する側であるだけ

Haskellはゴミ、夢から覚めろ
451uy:2012/06/15(金) 06:20:51.04
つうか俺はrubyに何の思い入れもないし、ただ効率がでるから使っているだけで
俺がrubyを布教する事によって俺に利があるわけでもないし
ルビリスト(笑)界隈が賑わうだけの事、そういう集団に混ざるのもいやなんだよね
こんなゴミbbsでコテ1人が騒いだ程度で何かがどうにかなってしまうなら
よほど基盤が弱いか
よほど他のruby使いがヘタレなんだろ

あと、俺は名無しでレスをする事もある
根本的にはuyで書き込むのと同じ内容のレスをしているにもかかわらず
同意を得られるところをみると・・・w

お前らは条件反射でuyという名をみてとりあえず否定レス返してるだけなんだなぁと思った
この板でまともな議論は不可能である ただの遊び
452uy:2012/06/15(金) 07:20:09.04
と思ったけど
人1人の影響力は知ってた
ム板の奴らがuyを邪魔だと思うように俺にとってはプログラミング界すべてが邪魔だ
どちらがどかされるかだよね

Rubyの良さを教え煽った後に意地を張らせRubyを今後そいつが使えなくする
とか狙ってやってたわけじゃないが、そういうやつが増えてきた印象をもつ
かわいそうにな
けどこれでいいよ別の何かを作るんじゃないか?静的言語厨が、無駄なものをな
結局は金でしょうプログラミング、俺はプログラミングで利益を持たないからすべての言語宗派の味方であり敵である
被害を被るのは、プログラミングを食い物にして生活してる層だけだろ
知るかよそんなものこんなデジタル媒体でいつまでも商売続くと思うのが間違い
俺の通った後が焼け野原だと感じるなら、uyの影響力を認め自分の無力を理解したことになる
負けを認めたなら次は負けないように励めよカス
俺はプログラミングの技術をプログラミングをやっているやつをからかうためにも使う、からかわれてると感じたなら、レベルの低さを自覚しろ
453uy: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はヤバイ
中規模以上のプロジェクトにおいては即刻使用を禁止すべき
455デフォルトの名無しさん:2012/06/15(金) 07:45:14.72
>>453
型宣言は冗長だといっていたのに、
あいかわらずゴミ長文を連投してるなww

その駄文を書かなければ、毎日数千個の型を宣言できるよwwww
456デフォルトの名無しさん:2012/06/15(金) 08:50:57.08
ログ流したら偉いという発想が既に荒らしの発想でしかないな
457uy:2012/06/15(金) 11:03:41.61
砂上に楼閣なんて知った事じゃないしな
色んな建物を建てては崩れて立てては崩れてやっていけば
砂の上にもガレキが積もってまともな建物建てられるようになるから、もう少しの辛抱だろ

今、その動的言語で書いているソースコードは本当に自分で書かなければいけないものか?
もしどこかに既に安定したライブラリがあるなら、その部分のソースコードを丸ごと消せるのではないか
最初のスタートが大変なだけだよ
後から楽になってくるって、動的言語コンパイラやIDEの開発者を信じろよ
俺は覚悟を決めた
458デフォルトの名無しさん:2012/06/15(金) 11:15:20.69
たいしたプログラムも書けないくせに長文乙
459uy:2012/06/15(金) 11:24:47.68
動的言語の問題点は実際にプログラミングしてる時以外にもある
Rubyで例えるなら
Ruby1.8で動いてたコードを
Ruby1.9で動かそうとすると、いくつかエラーはでるものの直していけばすぐ動くんだけど
本当の意味では正しく動いてない
いくつかの廃止された構文、仕様の変わったメソッド
それらは何をどうやったって抽出できない
実行すると、処理系は何もエラーメッセージを出す事もなく、ソースコードのどこかで意図しない動作をし続ける
目デバッグやprintfデバッグしきれないくらいに膨大なソースコードだったらそこで詰み

互換性がないとかいう問題じゃなくて
つまり中規模だろうと大規模だろうと、
バージョンが変わったら過去のソースコードはゴミ、基本的にその時に全部捨てなきゃならないんだろう
どうしても捨てられないって奴だけが、必死にデバッグする
確かにrubyは泥沼

今後1年〜2年限りしか使わないプログラムだったら、別に仕様変更なんて怖くない
今後5年〜10年と使っていくプログラムの作成をrubyなんかでやったら死ぬ

でも今後5年〜とか長期的に使用するようなプログラムを俺は作らないので、俺関係ないし
泥沼なのしっててお前らを泥沼rubyに突き落としたい!
460uy:2012/06/15(金) 11:33:43.47
ただし応急手当の策もある
大部分をオープソースのライブラリで書いて、
ライブラリのバグを見つけ次第、ライブラリ作者に報告
仕様変更時のバグ発見なんて人海戦術でやってれば
一人でPrintfデバッグしてるよりはよっぽど早期対応が出来る
けどフリーライブラリの作者なんて金で動いているわけでもないし、対応が遅いかもしれない
所詮焼け石に水
結局動的言語は仕様変更というものがなくなって、開発がとまらない限り永久に泥沼

しかしrubyはまだまだ完璧とは程遠いのでこれからも仕様はどんどん変わっていくよね
泥沼rubyの中でも上手に動ける奴だけが生き残る
下手に泥沼rubyで動き回った奴は入った瞬間に溺れ死ぬ
461デフォルトの名無しさん:2012/06/15(金) 11:33:49.61
たいしたプログラムも書けないくせに長文乙
462デフォルトの名無しさん:2012/06/15(金) 12:14:50.70
>>460
わかってるようでわかってないな
最後の3行で結局Ruby擁護してるし

アプリは1年しかつかわなくとも、Rubyが非効率なのは変わらない。
おまえの知識が仕様変更のたびに無駄になってるという非効率に
なぜ気がつかない。


上手に動ける奴というか、賢い奴はもうRuby捨ててる
Rails系フレームワークが増えた時点でRubyの必要性がなくなった。

9割を超えるWindows環境でまともな速度で動かないランタイムも致命的。
いつまでたっても低品質なまま
463uy: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 これよりはマシだろう お前は今まで何個の静的言語を覚えてきた?

静的言語の型宣言の仕方は言語ごとにどんどん変わっていく
しかも最近になって型推論とかいうブームを引き起こしたようだから
数年後にはガラっと変わっちゃうぞ
464デフォルトの名無しさん:2012/06/15(金) 12:51:37.82
たいしたプログラムも書けないくせに長文乙
465デフォルトの名無しさん:2012/06/15(金) 12:57:18.93
rubyしか使えないまで読んだ
466uy:2012/06/15(金) 13:03:13.73
2002〜2007年くらいにやたらrubyは盛り上がってた印象を持つ
Railsの影響なんだろうな
もう既に動かなくなった大量rubyリソースがその年代のログにある
まぁちょっと変えれば動くけど
初心者や面倒くさがりには、それが出来ないから、動かないゴミソースとして扱われる数々のソースたち

たまに更新のとまってHPに残されたソースコード
古くてそのままじゃ動かないけど有用なものを見つけたときに思う
これはやばいと思うよw
技術ある奴から見放されすぎ
でもプログラマなんてものは腐るほど次の世代が出てくるから、rubyを見限った老害というか
ruby言語の礎となった奴らが今何をわめこうと
過去の資産など何一つもっていない初学者は、過去にその言語に何が起こったかなんて知った事ではないんで
効率いい言語を使う
結局よほど恵まれた職場でなければ本職になったとしても、効率のいい言語は使えないし
効率のいいプログラミングもさせてもらえない
数々のしがらみによって、古いコードを継ぎ足して使い続ける
職業マというのは自分の使っている開発環境の効率の悪さ、死後都の効率の悪さに気づいてしまったら
どこかの地点であきらめる必要がある
467デフォルトの名無しさん:2012/06/15(金) 13:05:23.58
はいはい、たいしたプログラムも書けないくせに長文乙
468uy:2012/06/15(金) 13:12:53.85
やはり今は大規模開発を動的言語で行う事について
その「動的言語」をrubyで語るのであれば仕様が安定したのを見定めてからが本番だろ

2.0で本当に互換性が保たれているのか、全てはそこを確認してから
それまでの議論なんていうのは、ただの机上の空論の飛ばしあいに近い
動的言語の概念そのものに根本的な問題があるのに、動的言語自身の仕様さえ安定していない現状では
ろくに資産は作れない、仮に大規模な安定したプログラムを作ったとしてもそれはrubyの仕様変更によってぶっ壊れる
まずはとにもかくにも仕様の安定した言語があって、全てはそれからだ
Ruby2.0でたら本気出す、もし揺らぐようなら俺はLispにいく
469デフォルトの名無しさん:2012/06/15(金) 13:23:32.48
勝手にしろ
470デフォルトの名無しさん:2012/06/15(金) 13:29:56.69
仕様が安定した言語が欲しかったらAdaでもやってろよ
471デフォルトの名無しさん:2012/06/15(金) 13:42:44.23
動的言語は建築で言うなら足場の立ち位置
簡単・短時間で組立・撤去できる足場は
建築現場で無くてはならない存在
当然、細かい強度計算なんていらない

でも足場材料で建物自体を作るやつはいねーんだよ
472デフォルトの名無しさん:2012/06/15(金) 13:57:18.54
それでもC#は無いわー
あれうんこだわー
473デフォルトの名無しさん:2012/06/15(金) 14:06:12.28
uyは掘っ立て小屋暮らし
474uy:2012/06/15(金) 14:58:58.77
>でも足場材料で建物自体を作るやつはいねーんだよ

世の中にはプログラミングでそういう事を率先してやりたがる奴もいる
そういう他人には出来ない変わったことを達成する事で
周囲の注目を集めハッカー(笑)みたいな呼ばれ方をするから
俺は別にそういう目的ではないが、普通に動的言語の方が効率出るだけだよ
俺が触った場合には。
475デフォルトの名無しさん:2012/06/15(金) 15:17:18.58
もうちょっと人生の効率を考えた方がいいぞ。
もう25にもなんだし、uyって30まで生きないんだろ?
476デフォルトの名無しさん:2012/06/15(金) 15:46:19.35
遠大集団にRubyが買収されたら本格的に使ってやろう
477uy:2012/06/15(金) 16:13:15.24
何いってんのか理解不能だけど、
お前らが物欲、食欲、性欲に身を任せている間に
俺はお前らに背を向けて、お前らには理解の及ばない倫理観の元に誰にも侵されない場所で幸せを勝ち取るのが大好きだよ
478デフォルトの名無しさん:2012/06/15(金) 16:20:43.92
睡眠欲に身を任せているんですね分かります
479uy:2012/06/15(金) 16:30:44.42
人は歩みを止め闘いを忘れたときに老いていく

俺はこのセリフが身にしみるよ
立ち止まってはいけないと、何度も思い知らされる
動かなくなれば、そこらの石と同じだ
何かを求め、何かを嫌うメリハリこそが生きるという事 ゴミグラマは死ね
480デフォルトの名無しさん:2012/06/15(金) 16:37:53.36
人を見下すことでしか優位性を保てないって本当屑過ぎる
481デフォルトの名無しさん:2012/06/15(金) 16:43:17.91
>>479
お前が一番立ち止まってるじゃないか、老化だな
482デフォルトの名無しさん:2012/06/15(金) 16:54:59.92
uyが消えるのを求め、uyを嫌うメリハリ
483デフォルトの名無しさん:2012/06/15(金) 17:17:49.36
無能な働き者は銃殺
484uy:2012/06/15(金) 19:30:58.56
>>480
プログラミング程度のゲームに向きになっちゃうほうが愚かなんじゃないの?
俺はゲームの対戦相手は煽りまくるほうだけど、これゲームじゃなかったらなんだと思ってるの?
485デフォルトの名無しさん:2012/06/15(金) 19:32:30.15
馬鹿には無理
486uy:2012/06/15(金) 19:33:09.71
>>480
プログラミング程度のゲームに向きになっちゃうほうが愚かなんじゃないの?
必死にやっても必死にやっても俺に満たない奴が大多数なのは知ってるけど
力の差に気づかないで突っかかるから反撃されて泣かされてるんじゃないの?
487uy:2012/06/15(金) 19:34:52.06
>>480
「プログラミング程度のゲーム」に向きになっちゃうほうが愚かなんじゃなかったら何?
何がしたくてプログラミングしてんの?
488デフォルトの名無しさん:2012/06/15(金) 21:50:48.55
たいしたプログラムも書けないくせに何言ってるの
489デフォルトの名無しさん:2012/06/15(金) 22:05:01.67
uyはやくゲームリリースしてよまだなの
490デフォルトの名無しさん:2012/06/15(金) 23:18:26.34
スクリプト言語でゲームつくるとかuyは本当にアホだなww
しかも一番遅いRuby
491デフォルトの名無しさん:2012/06/16(土) 01:39:38.50
ヒント:uyは無職
492デフォルトの名無しさん:2012/06/16(土) 04:33:43.67
uyは気付いてしまったんだよ
rubyより優れた言語があるのに、アホすぎて自分には習得出来ないってことに
だから発狂してるのさ
493uy:2012/06/16(土) 06:34:59.30
作っていくにあたり気づいたのは動的言語の未解決問題だなぁ

これがある限り、「普通の奴」は
周りが何いっても動的言語で大規模開発はやろうとしない

ゲームプログラムっていうのも
ソースコード量は増えずとも、基本的な機能をもったSTG程度は
設計レベルの話では中規模〜大規模といえるので

初心者はrubyでゲーム作れない
パズルゲーカードゲーボードゲー、あるいは簡単な1000行以内に収まるようなゲーム
それ以上をやろうとすると爆発する
494デフォルトの名無しさん:2012/06/16(土) 06:38:50.81
uyはたいしたプログラムも書けないんだから、
無理して大規模開発の話をしなくていいよ
495デフォルトの名無しさん:2012/06/16(土) 07:57:42.63
uyは自宅警備の片手間にこんなとこへ書き込むヒマがあるなら
就職して真っ当なプログラム書きなよ
496uy:2012/06/16(土) 08:21:56.47
あ^^^
Ruby1.93で書いたソースコードが
Ruby1.92でいくつか動かないお^^^^

ざけんなカス
直して動かしたけど、

何で細かいところをちょこちょこ変えるんだろうな

つまり、これは「詳細部分」が微妙に1.92と1.93で違うというのを意味してて
1.92のコードのどっかのなんかの記述が1.93で動かなくなってる可能性をはらんでるって事だよ


Rubyは大変だなー! うwwwwwwwwはwwwwwwwwwwwwwwwwwww 泥沼!泥沼!泥沼!泥沼!泥沼!
497uy:2012/06/16(土) 08:33:15.00
シンタックスエラーが出る場所なら直せるけど
そうじゃなくて、エラーすらださずにもし別の意味に解釈されてたら、実行して「あれ?」ってなるまで気づけないし
なんか、ほんとに泥沼だな 使うけど
498デフォルトの名無しさん:2012/06/16(土) 13:57:49.97
大規模開発で工数増大するって話が、いつの間にか
独りで開発して破綻するって話になってるじゃねーか
この急速なスケールダウンっぷりは何なんだよwww

独りで開発してても破綻するなら、まずは自分の資質を疑えよ
499uy:2012/06/16(土) 14:10:29.38
俺の存在が泥沼
500デフォルトの名無しさん:2012/06/16(土) 14:21:21.16
大体JavaだろがC++だろうが、
辞書なり連想配列なり使えば、
動的言語相当の文字列ベースのプログラミングは出来るしなぁ。
ただ、あえてそうしないだけで。
501デフォルトの名無しさん:2012/06/16(土) 14:29:37.04
ちょっとスレを斜め読みしたけど、
そもそも、動的の意味を勘違いしている人がいるね。
動的言語は型が動的って言っている人たち、それは違う。
C++でもJavaでも実行時型情報を持っているから、型は動的に解決されてる。
動的言語の動的の意味は、シンボル名の解決が動的ってこと。
シンボル名を、静的言語ではリンク時に解決するが、
動的言語では実行時に解決する。
502デフォルトの名無しさん:2012/06/16(土) 14:42:19.74
ロードした型の定義は実行中に固定される静的言語と
ロード済みの型の定義を実行中に変更できる動的言語

という意味での「型が動的」
503デフォルトの名無しさん:2012/06/16(土) 14:44:27.02
そんで、動的言語のメリットって、実際には無いんじゃないかとすら思う。
動的言語は基底クラスをそろえなくても、ダックタイピングで多態出来るが、
とはいえ、結局はメソッド名が一致していなければならないわけだからね。
基底クラスが揃っていることと、メソッド名が一致していることは、
同程度に強い制約だよ。
504uy:2012/06/16(土) 14:44:35.49
動的なのは俺の収入額
505デフォルトの名無しさん:2012/06/16(土) 14:57:37.49
動的言語のメリット:型を書かなくていいこと
静的言語のメリット:型を書けること
506デフォルトの名無しさん:2012/06/16(土) 15:00:19.81
rubyみたいな感じのイテレータとgemsがあるなら静的でもいいよ
507uy:2012/06/16(土) 15:09:46.03
動的のメリット:収入が不安定なこと
静的のメリット:収入がないこと
508デフォルトの名無しさん:2012/06/16(土) 15:13:56.74
>>505
VC++2010ですら既に型推論を実装しているから、
冗長な型名を書く必要はなくなってきてるよ。
型って観点から静的言語と動的言語を切り分けるのは無理があると思う。
静的言語と動的言語の差は、
シンボル名の解決が、コンパイル/リンク時か、実行時か、の差だと思う。
509デフォルトの名無しさん:2012/06/16(土) 15:15:37.15
>>508
型っていうか型注釈な
510デフォルトの名無しさん:2012/06/16(土) 15:24:33.97
>>509
それに関しても、静的だけどテンプレートがあるし。
511デフォルトの名無しさん:2012/06/16(土) 15:53:54.49
昨夜、C#の型推論は出来損ないって結論出たのに
またやってるのか。
512デフォルトの名無しさん:2012/06/16(土) 15:57:30.21
関数型はお呼びでないんで
513uy:2012/06/16(土) 16:00:48.36
rubyは型推論どのくらいできるんですか?
514uy:2012/06/16(土) 16:01:54.11
型なんか推論するより収入を推論してくれ
515デフォルトの名無しさん:2012/06/16(土) 17:24:56.09
OCamlが存在する以上動的言語の存在意義が無い
516uy:2012/06/16(土) 18:09:06.29
勘違いしてる静的言語厨いるけど
型推論いくらやったところで
動的に型を変えられないなら、動的言語に近づいてるのは見た目だけで
中身は全然違う別物だからなその型推論て

完璧に型推論やって一切の型をかかなくてよくなったとしても動的言語にはならないよ
動的言語 静的言語 静的型推論言語  などと分けてもいい
517デフォルトの名無しさん:2012/06/16(土) 18:17:16.24
>>516
お前が根本的に間違ってる。

まず動的に型を変える機能はいらない。
正確に言えば、動的に”互換性がない型”に変える機能はいらない
互換性のある型に動的に変える機能であれば、静的言語にも備わってる。

どっちみち、コードは特定の型限定で書いてるんだから
そこに互換性のない型を持ち込んでも動かない。

つまり、動的に型を変える機能は不要であり
静的に型が決まってる言語の方が優れている。
ただし、その欠点として型をいちいち明示しなければいけなかった。
わかりやすく言えば、書くのが面倒だってこと
逆に言えば、書くのが面倒でなければ、静的言語に欠点はない。
518デフォルトの名無しさん:2012/06/16(土) 18:28:59.03
とうか、静的言語でも辞書は使えるわけだから、
単純に動的言語は静的言語から一部機能を除いたものだよな。
519デフォルトの名無しさん:2012/06/16(土) 19:19:49.71
ローカル変数、プライベートメソッドは型なし(つけても良い)
パブリック変数、パブリックメソッドは型あり

ぐらいでスコープに応じて型の記述が
必須になったりオプションになったりすれば良い。

ようするに広いスコープのものほど
状況を把握するのが難しくなるから
ちゃんと記述しましょうってこと。
520デフォルトの名無しさん:2012/06/16(土) 19:51:43.80
>>517
> 正確に言えば、動的に”互換性がない型”に変える機能はいらない

お前そういうことは、>>196>>426みたいにまともに動きやしないコードでも
コンパイル時点でエラーをきちんと出せるようになってから言えと。
521uy:2012/06/16(土) 20:20:06.47
>>517
お前が程度の低いコードしか書かないなら
>まず動的に型を変える機能はいらない。
いらないんだろうな

お前は静的言語使ってれば良いと思うよ
かくのが面倒って自問自答してんじゃねーか
静的言語で多態化メソッドだらだら書いている間にも
動的言語はそこら辺を一気に書いてどんどん次に進んでいくんだよ

OpenStructとmethod_missingは静的言語で実装できるか?
そこら辺も俺はよく使うんだけど

クラスに
var1 ,var2 ,var3 ,var4 , という変数を先に定義しといて、
その変数に後からクラスインスタンスごとに別々の型データ入れたい場合はどうする?

とりあえず最低でも、OpenStructはないとお話にならない
連想配列使えとか?
使ってらんねーよそんな言語
522uy:2012/06/16(土) 20:29:10.29
動的に型を変える事によって、ポリモフィズムがいらなくなる
静的言語では書くのが面倒くさい

つうか、面倒くさいから静的言語じゃ実際には書いてないんだろ
あまりポリモフィズムが必要にならないように、なんか遠まわしにそういうアルゴリズムを書く
だからプログラムの柔軟性が落ちて、ハードコーディングに近い物になっていく
幼稚なアルゴリズム

一瞬でint , double , string など色んな型のメソッドを静的言語が一発でかいてくれるとしても
何か新しい型が必要になるたびに、追加しなければならない
開発効率が悪い
やっていられるか

で、その答えは、「新しい型を追加」しない

どんどんハードコーディングになって、静的言語のソースコードは柔軟性が落ちていく

結局動的言語は切り捨てられない
523uy:2012/06/16(土) 20:52:44.24
誰にでもプラスとなる動的言語の使い方っていったらプロトタイプの作成、
アルゴリズムの思考
524デフォルトの名無しさん:2012/06/16(土) 20:53:56.89
つまんねぇuyだなこいつ。
525デフォルトの名無しさん:2012/06/16(土) 20:55:43.29
いつかの東大生じゃねぇのか
526デフォルトの名無しさん:2012/06/16(土) 21:04:35.05
これからは自動プログラミングの時代

自動プログラミング
http://toro.2ch.net/test/read.cgi/tech/1339847861/
527デフォルトの名無しさん:2012/06/16(土) 21:20:26.57
>>521
> かくのが面倒って自問自答してんじゃねーか

お前は物事をひとつの側面からしか見れないんだな。

急がば回れの言葉通り、最初に書いておけば
あとから状況を確認するのが楽になる。

動的言語だと、使い捨てならいいけれど保守が難しくなる。
ようするに汚いコードが高速で量産されるわけだ。嬉しいか?
528デフォルトの名無しさん:2012/06/16(土) 21:25:18.17
>>504
常に0なんだから静的です
529デフォルトの名無しさん:2012/06/16(土) 21:26:21.29
>>522
> 動的に型を変える事によって、ポリモフィズムがいらなくなる

ポリモフィズムというのは考え方。
共通のメソッド、プロパティを定義して、
特定の型を入れ替え可能にしましょうっていうのが
ポリモフィズム。

動的に型を変えたからって、その型に共通の何かが
なければ、入れ替え可能にはならない。落ちるだけ。

その共通の何か(インターフェース)をコードの中に明記しましょう。
コンパイラもそれを知っているので効率いいし、エラーも見つけやすい静的言語の利点で、

動的言語だと、コメントで必要なメソッド等を書いてもコンピュータは参照しない。
つまり、それを読んで人間が、コードよめ。ひたすら人力で頑張れ。というデメリットになる。
530デフォルトの名無しさん:2012/06/16(土) 21:37:35.46
動的厨「汎用のソート関数作った。どのクラスでもソートできるぞ!」
sort(list)

「俺のクラスソートできないんだけど?」

動的厨「それじゃだめだよ。compareメソッドが無いじゃないか」

「必要って言わなかったじゃないか。」

動的厨「ほら、ここにコメント書いてあるでしょ?」

「なるほどね。でもそのコメントわかりにくいよ。こうしたら?」
sort(/*Comparable*/ list)

動的厨「!?」

「ついでにクラスの方にも、ソート関数対応って書いておくといいよ」
class MyClass /*implements Comparable*/

動的厨「!?」

「ついでに、そのコメント見て矛盾してるところがないか、チェックするツール作ったよ」

動的厨「便利だね!」

「まあそれが常識なのが静的言語なんだけどね。」

動的厨「ぐぬぬ」
531デフォルトの名無しさん:2012/06/16(土) 21:43:05.67
たいしたプログラムも書けないくせに語るuy
532デフォルトの名無しさん:2012/06/16(土) 21:51:40.79
結局、uyは最初にRubyみたいなクソ言語に
慣れてしまっているために移行できないんだろうなw

バージョンあがったらすぐ動かなくなるようなクソ言語が
効率がいいとかwww
533デフォルトの名無しさん:2012/06/16(土) 21:55:19.09
コメント書くのとソースコードで書くので
どっちが楽だろうかね。

/* この関数には○メソッドと△メソッドのと□メソッドを
実装したクラスのみを引数に取ることが出来ます。
これらのメソッドの仕様については〜を参照して下さい。

ver2.0より□メソッドの実装が必須になっていますので
この関数に渡すすべてのメソッドを探しだして修正して下さい。

なお動的言語ですので、コンパイラが自動的にエラーをだしたりはしません。
実行したらエラーになります。
*/

534デフォルトの名無しさん:2012/06/16(土) 21:58:47.29
>>533
> ver2.0より□メソッドの実装が必須になっていますので
> この関数に渡すすべてのメソッドを探しだして修正して下さい。

静的言語だってテストを書くだろ?
動的言語だって全てのテストを書く。

だからテストを実行すれば、問題があることはすぐ解る。
あとは、落ちた原因を調査すればいいだけ。
なんで落ちたか、このにはこの値が入ってるはず
なんでメソッドがないのか?などなど。
数分もあれば原因は解る。


一方静的言語なら、コンパイルするだけで
数秒で修正箇所がわかるのであった。
535デフォルトの名無しさん:2012/06/16(土) 22:11:20.71
>>530
これ読んでわかったことは
メリットを強調してデメリットがわかりにくくなると物凄く気持ち悪い
デメリットを知らないツールより、デメリットまで知り尽くしたツールの方が安心できる
536デフォルトの名無しさん:2012/06/16(土) 22:22:10.23
>>535を読んで思ったことは、
中身が何もない。
537デフォルトの名無しさん:2012/06/16(土) 22:27:11.12
なるほど細かいテストが付いてるのはそのためか

その時間、他のことに使ったらいいのに
538デフォルトの名無しさん:2012/06/16(土) 22:35:46.63
いつも同じ欠点を指摘されるから安心なんだ
思わぬ所に落とし穴があるのが一番怖いけど、それがない
539デフォルトの名無しさん:2012/06/16(土) 23:36:26.45
Wikipediaの大規模なテンプレートにもテストケースが付いてるよ
540デフォルトの名無しさん:2012/06/17(日) 07:36:30.07
>>529
> 動的に型を変えたからって、その型に共通の何かが
> なければ、入れ替え可能にはならない。落ちるだけ。

nullは全てのメソッド呼び出しに対応してない(例外投げるだけ)けど
nullは全てのオブジェクト型変数に代入出来る。

つまり、せっかく型を書いて、コンパイルしても
動的言語と同じように落ちる可能性がある。
動的に型を変更すら出来ないのに。
541uy:2012/06/17(日) 07:49:58.70
静的言語ならデバッグが困難なバグが発生しないみたいなこと言ってるが

むしろスクリプトなら落ちた時にファイルと行数教えてくれる
静的言語だと落ちてもファイルと行数は教えてくれない
542デフォルトの名無しさん:2012/06/17(日) 07:53:59.57
それはねーよ
例外で落ちたならスタックトレース出る
Cですらcore吐いたなら分かるのに
543デフォルトの名無しさん:2012/06/17(日) 07:56:21.89
>>540
Null Objectパターン
544デフォルトの名無しさん:2012/06/17(日) 09:11:45.02
>>541
これはひどいwwwwwwww
例外処理の使い方も知らなかったとはwwwwwwww
545デフォルトの名無しさん:2012/06/17(日) 09:19:51.09
Ocamlにはnullが無いけどな
546デフォルトの名無しさん:2012/06/17(日) 09:25:35.90
だからOCamlやHaskellは場違いなんだって
C# vs Rubyみたいな低レベルの争いだから
均衡を保ってるのに、一気に均衡が崩れちゃうだろ
547デフォルトの名無しさん:2012/06/17(日) 09:41:48.39
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と同じなんだよね
548デフォルトの名無しさん:2012/06/17(日) 10:18:16.72
割合から言うとむしろnull可の方にキーワード付けた方が良いレベル。

c++は自動変数や参照の引数or戻り値でそれなりにnull不可を表せるんだよな。
代数データ型には及ばないけどさ。
549デフォルトの名無しさん:2012/06/17(日) 10:35:20.18
最初からジェネリクスがサポートされていたら Option<T> とか Maybe<T> と書くだけ。
ジェネリクスが無い段階で商品化してしまうことが問題。
550デフォルトの名無しさん:2012/06/17(日) 10:52:09.93
ジェネリクスとnullは関係なくね
551デフォルトの名無しさん:2012/06/17(日) 10:52:16.31
「メンバ変数を明示的に初期化しないときはnull」
こういうアホ的仕様を無くさないと、どっちにしろnull撲滅は無理
552デフォルトの名無しさん:2012/06/17(日) 10:57:35.17
null使わないなら初期化するし、コンテナならfinalも付けるだろう
それにprivate部分は重要じゃない、protected以上の戻り値や引数の方が重要
553デフォルトの名無しさん:2012/06/17(日) 11:06:51.90
Java8でnot nullアノテーションが入る予定だった気がする
554デフォルトの名無しさん:2012/06/17(日) 11:07:11.87
>>550
大規模開発を推進する奴らがジェネリクス程度の規模でびびったら駄目だろ
555デフォルトの名無しさん:2012/06/17(日) 11:16:56.54
>>553
それって実行時に例外が投げられるだけでしょ
556デフォルトの名無しさん:2012/06/17(日) 11:27:56.82
>>554
意味不明なんだけどトウシツ?
557デフォルトの名無しさん:2012/06/17(日) 12:20:36.60
動的言語と静的関数型言語が共存する形で残る
静的OOPLはメリット0なので死滅する
558デフォルトの名無しさん:2012/06/17(日) 13:06:08.92
何十年後くらい?
559デフォルトの名無しさん:2012/06/17(日) 13:10:07.76
それまでにいくつの言語が生まれて消えるか
560デフォルトの名無しさん:2012/06/17(日) 13:22:27.09
結局どの言語を使うのが効率が良いんです?
561uy:2012/06/17(日) 13:33:19.05
>>542,544
結局何か仕掛けなければ吐かないことに変わりは無いよ
普段使ってる「静的言語」で作られたプログラムが勝手に異常終了した時に
エラー箇所とかわかんの?
562デフォルトの名無しさん:2012/06/17(日) 13:35:46.14
>>560
そういうこと言い出すと、日本なら日本語、世界なら英語ってことになるから。

>>561
だからコア吐くっていってるだろ、バカか。
563uy:2012/06/17(日) 13:48:23.61
>>562
この前さぁIEが異常終了したんだけど
IEのソースコードの何のファイルの何行目で落ちたんだろ?

調べる方法は?
564デフォルトの名無しさん:2012/06/17(日) 13:51:17.65
ウィンドウが出てきて、エラー情報を送信しますか?って出てくるだろ。
その中に含まれてる。
565デフォルトの名無しさん:2012/06/17(日) 13:52:43.34
>>563
IE開発者には分かってもお前には無理
566uy:2012/06/17(日) 13:53:33.04
だから、調べる方法は?
さっさとコアでも何でも吐けよクズ

>>565
スクリプト言語で書かれていれば開発者じゃなくてもエラー箇所がわかる
自分で直せる
567デフォルトの名無しさん:2012/06/17(日) 13:54:51.84
どちらにしで、それって
静的動的でなく、コンパイルかインタプリタかの話にならない?
静的言語のインタプリタってのもあるんだけど
568デフォルトの名無しさん:2012/06/17(日) 13:56:07.69
>>566
ユーザに改造されたら困るのはメーカーなんだけど
569デフォルトの名無しさん:2012/06/17(日) 13:57:16.14
>>566
スクリプト言語で書かれたブラウザ使っとけww
570デフォルトの名無しさん:2012/06/17(日) 14:06:36.29
動的言語のメリットは、
シンボル名の解決をコンパイル時にしないことに起因する、
「コンパイラの作成が楽」&「コンパイルが早い」
の二点に尽きるんだよ。
「コンパイラの作成が楽」はコンパイラの作者が楽できるだけ。
利用者側から見れば、「コンパイルが早い」ことしかメリットが無い。

逆に静的言語はシンボル名の解決をコンパイル/リンク時に行うが、
それが嫌なら、要所要所で、これを実行時に行うことも出来る。
辞書クラスなどを使って、自前で辞書を引けば済むだけの話だからな。

要するに、動的言語は、コンパイラが手抜きってだけ。
「動的言語」=「静的言語」-「静的シンボル名解決」
動的言語は、静的シンボル名解決機能の無い、静的言語。
571デフォルトの名無しさん:2012/06/17(日) 14:17:55.81
uyが不具合だらけだからコアを吐かせたい
572デフォルトの名無しさん:2012/06/17(日) 14:20:58.24
Null objectパターンで見る静的動的の違い


動的言語:object型に何も実行しないmethod missingを追加する

静的言語:各クラスにnull object用クラスを定義する
          nullを返すところを全部null objectで漏れなくラップする
          ラップが漏れたらぬるぽ
573デフォルトの名無しさん:2012/06/17(日) 14:25:35.67
関数型言語: Maybe型を使う
574uy:2012/06/17(日) 15:01:38.69
動的言語の利点がコンパイルが早い(キリッ)しか思いつかないのであれば
そういう奴は使わなくていいな
575デフォルトの名無しさん:2012/06/17(日) 16:16:13.76
>>572
> 静的言語:各クラスにnull object用クラスを定義する

各クラスじゃなくて各インターフェースごとだろ?

んで、インタフェースがあれば
実装の雛形を生成すればすぐに終わる。
576デフォルトの名無しさん:2012/06/17(日) 16:20:41.33
> nullを返すところを全部null objectで漏れなくラップする

こいつNull Objectパターンを良く理解してないと見た。
577デフォルトの名無しさん:2012/06/17(日) 16:26:02.81
たいしたものも作れないuyには
使ってほしくないな
578デフォルトの名無しさん:2012/06/17(日) 16:32:33.36
>>572
> 動的言語:object型に何も実行しないmethod missingを追加する
頭悪そう・・・

ようするに、エラーが起きて欲しい場面(メソッド名の間違い)で
エラーが出なくなるってことじゃないか。

実行時エラーどころか
実行時エラー潰しだよ。
579デフォルトの名無しさん:2012/06/17(日) 16:59:24.03
ある意味動的言語のスタンスとしてはそれでいいんじゃない?
そこはエラーじゃなくてテストで対応する

そしてスレタイ通りテスト工数が増大END
580uy: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"]
581デフォルトの名無しさん:2012/06/17(日) 18:17:16.68
だから動的言語で作られたアプリは
エラー出てなくても正しく動かない事が多いんだなw
582デフォルトの名無しさん:2012/06/17(日) 18:19:15.51
>>576
お前こそ全く理解してないだろ
nullとnullオブジェクトが入り交じったコードなんて悪夢そのものだろうが

>>578
NullPointerExceptionは握りつぶして良いのか?
583デフォルトの名無しさん:2012/06/17(日) 18:24:00.97
>>582
> NullPointerExceptionは握りつぶして良いのか?
当たり前の話するね

想定通り握りつぶしたい時は、潰せばいい
それ以外の時は絶対に握りつぶしてはだめ

盲目的に全部握りつぶすなんてコードは最悪なコードの一つ
つまりobjectにmethod missingを付けるというヤツのことだよ
584デフォルトの名無しさん:2012/06/17(日) 18:26:23.71
NullObjectはNullPointerExceptionを
握りつぶつために使うんじゃねーぞ。
やっぱりわかってないなw
585デフォルトの名無しさん:2012/06/17(日) 18:27:31.98
NullClassにmethod missing付けるだけだろ
さらにclassboxesがあれば尚良い
586デフォルトの名無しさん:2012/06/17(日) 18:28:28.98
>>584
つまりぬるぽは無くならないってことか
やっぱりJavaやC#はダメだな
587デフォルトの名無しさん:2012/06/17(日) 18:28:33.75
uyか
588デフォルトの名無しさん:2012/06/17(日) 18:29:47.66
ぬるぽさえ出なければ、
正しく動かなくても
問題ない!

これが動的言語厨の本質。
589デフォルトの名無しさん:2012/06/17(日) 18:30:44.63
>>583
まさかmethod missingでそれが出来ないと思ってる?
メソッド名もクラス名も取れるんだぜ
590デフォルトの名無しさん:2012/06/17(日) 18:33:15.27
その結果、objectのmethod missingには
様々なクラス、メソッドごとの
処理が一箇所に依存してしまう
汚いコードが出来るのであった(めでたしめでたし)
591デフォルトの名無しさん:2012/06/17(日) 18:34:30.31
やっぱり関数型言語以外はダメだな...
592デフォルトの名無しさん:2012/06/17(日) 18:35:16.38
関数型はゴミ
593デフォルトの名無しさん:2012/06/17(日) 18:38:08.53
(俺様に理解できない)関数型はゴミ(ということにしたい)
594デフォルトの名無しさん:2012/06/17(日) 18:53:49.31
【アンチ】関数型言語は使えない【玩具】 2
http://toro.2ch.net/test/read.cgi/tech/1330429547/
595デフォルトの名無しさん:2012/06/17(日) 19:13:18.99
いつまで経っても関数型言語で何も作れないんだから
何かしらの欠点があるんだよ
596デフォルトの名無しさん:2012/06/17(日) 19:19:44.77
問題点があろうがとにかく何か作る言語と、問題点を徹底的に議論する言語の違い
597デフォルトの名無しさん:2012/06/17(日) 19:21:07.86
理解できないから
具体的な欠点を指摘できないんですね
わかります
598デフォルトの名無しさん:2012/06/17(日) 19:25:33.08
使えればオブジェクト指向よりほんのわずかに優れているとかいらないんだよな
誰にでも理解出来る言語じゃなければライブラリも少ないし
ライブラリが少なければその言語に価値なんてないよ
でノロノロやってるうちにいつの間にかオブジェクト指向側が関数型を凌駕してる、と
599デフォルトの名無しさん:2012/06/17(日) 19:39:56.38
> ほんのわずかに優れている

「ほんのわずか」と書き加えずにいられないところに
最後のプライドが透けて見えて面白いwww
600デフォルトの名無しさん:2012/06/17(日) 19:44:28.83
え? 本当のことじゃないの?
601uy:2012/06/17(日) 19:51:44.76
ほんの僅かに優れている程度の代わりに、プログラミングの難易度を高めてしまった
そして扱える人間を減らした

だからライブラリ量が少ないので関数型は流行らない よかったね
602デフォルトの名無しさん:2012/06/17(日) 19:54:34.82
スレタイに沿うと、関数型言語で開発すればテスト工数は減る
コンパイル通れば動く、と冗談にしろ言われるくらいだし

ライブラリはScalaはJava, F#は.net, HaskellはCのライブラリが使える

ただし大規模開発が出来る程プログラマは集まらない
603uy:2012/06/17(日) 20:04:41.47
Cでかかれたライブラリは、基本的にどの言語からでも使えるだろ
JAVAや.NETも、呼び出せるように対応する流れはどの言語にもある

問題は個人などの有志開発のフリーライブラリの総量
ブログやサイトなどにかかれたサンプルの数
そういうものが少ない言語っていうのはGoogle検索なしで開発しろっていってるようなもの
604デフォルトの名無しさん:2012/06/17(日) 20:06:55.63
バージョン上がるたびに既存コードが壊れて
動くか分からんゴミコードの山のRubyよりはマシだけどね
605uy:2012/06/17(日) 20:51:40.82
じゃあ二度と使うなよ
606デフォルトの名無しさん:2012/06/17(日) 20:51:49.46
PrologもCの関数を呼べる
607デフォルトの名無しさん:2012/06/17(日) 20:52:48.46
ゴミプログラムしか書けないuyに言われても
608デフォルトの名無しさん:2012/06/17(日) 21:46:23.35
バージョンが上がるたびに乗り換えるのは情弱だろ
2つか3つ上がるまで様子を見ればいいのに

そういえば、リファクタリングするたびにテストをやり直すって話と同じだ
609デフォルトの名無しさん:2012/06/17(日) 21:51:00.27
>>608
ぜんぜん違うどころか、真逆ですよ?

リファクタリングっていうのは、
動作を変えない修正という定義だから
テストを行なっても通る。
言い換えると互換性がある。

様子を見なきゃ成らないってこと、既存のコードが壊れるってことは
それはリファクタリングじゃない。
610デフォルトの名無しさん:2012/06/17(日) 21:56:13.48
>>609
つまり、メソッド名やパラメータの数を変更するのはリファクタリングではない。
>>1はデタラメということだ。
611デフォルトの名無しさん:2012/06/17(日) 21:58:22.86
>>610
> つまり、メソッド名やパラメータの数を変更するのはリファクタリングではない。

リファクタリングだよ?
変えても動作は変わらないんだから。

もちろん動作が変わったら
それはリファクタリングじゃないけど。
612デフォルトの名無しさん:2012/06/17(日) 22:03:22.73
>>611
なぜ動作が変わらないんだよ?
613デフォルトの名無しさん:2012/06/17(日) 22:05:14.93
>>612
最終的に同じ結果が出るように修正するから。
614デフォルトの名無しさん:2012/06/17(日) 22:10:47.64
なんだか、最終的なバージョンが出るまでテストしなくていいような気がしてきた
615デフォルトの名無しさん:2012/06/17(日) 22:12:26.15
なんで?w
616デフォルトの名無しさん:2012/06/17(日) 22:13:02.80
人生は永遠のアルファ版
最終版などない
617uy:2012/06/17(日) 22:26:05.26
メソッド名の変更程度でリファクタリング(キリッ)とかゴミカスバカ底辺が言いはじめるから
今まで俺は俺の中でリファクタリングと呼んでいた作業を
「ソースコードの最適化」と呼ばなければならなくなった
618デフォルトの名無しさん:2012/06/17(日) 22:29:34.96
なにいってんだこいつ
619デフォルトの名無しさん:2012/06/17(日) 22:29:49.74
っていうか、609と611をまとめると
メソッド名やパラメータの数を変更しても既存のコードが壊れないことになるんだが
620デフォルトの名無しさん:2012/06/17(日) 22:32:48.52
それでソースコードの最適化とは具体的に何をやってるのですか?

ちなみにリファクタリングとはこんなのです。

http://ja.wikipedia.org/wiki/リファクタリング_(プログラミング)
マーティン・ファウラーなどの人々が著したリファクタリングの解説書
『リファクタリング プログラミングの体質改善テクニック』
では70種類ほどのリファクタリングが挙げられている。
621uy:2012/06/17(日) 22:34:01.96
>>608
開発中にバージョンあげるのは本当はNGなんだろうけど
まだ何とかできる範囲の規模だからRubyバージョンあげただけ
ゲーム開発もしたいけど、最新版rubyも使って最新rubyにはついていきたい
622デフォルトの名無しさん:2012/06/17(日) 22:36:12.01
>>619
はい、そのとおり、壊れません

なぜなら、関数を修正すると共に、その関数を
呼び出している部分すべてを書き換えるからです

実際にEclipseにあるリファクタリング機能は、実行すると
関数とそれを利用している部分すべてが書き換わります

これがリファクタいリングです
623uy: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 ] 
624uy:2012/06/17(日) 22:37:44.41
で、>>622
こういうやつがIDEの機能の自動なんちゃってリファクタリングをリファクタリング(キリッ)w
とかいうから

>>623
こういうのはソースコードの最適化というしかなくなった
625デフォルトの名無しさん:2012/06/17(日) 22:45:26.14
>>623-624
それは、
> 『リファクタリング プログラミングの体質改善テクニック』
> では70種類ほどのリファクタリングが挙げられている。
の中のどれに当てはまるか言えますか?

質問の意図は、それがリファクタリングかどうかの話ではなく
あなたが理解しているかどうかの話です
626デフォルトの名無しさん:2012/06/17(日) 22:45:26.78
>>622
それって、関数を利用している人が1人だけの場合じゃないですか
大規模開発では使えないのでは
627デフォルトの名無しさん:2012/06/17(日) 22:48:08.30
>>626
じゃあ、お前は大規模開発で、
どうやってコードを修正するというんだよw
628デフォルトの名無しさん:2012/06/17(日) 22:51:17.95
大規模になればなるほど、影響範囲を小さくするために
コードを疎結合にする。

そうなっていれば、自分の担当箇所の修正が
他人に影響を及ばさないから、
リファクタリングもやりやすくなる。
629デフォルトの名無しさん:2012/06/17(日) 22:55:29.74
自分の担当部分でおさまるリファクタリングなら好きにやれる

広範囲に影響が出るようなリファクタリングは注意が必要
自分の担当外だからどこでどう使われているかわからない

だからどこで使われているのか素早く間違いなく知る必要がある

そこで動的言語はやっぱりダメだねって話になるんだよね
どこで使われているのかさっぱりわからない状況になるから
630uy:2012/06/17(日) 22:56:14.93
>>625
はぁ?
>リファクタリング プログラミングの体質改善テクニック
そこら辺のゴミカスPGの書いた本なんてしらねーんだけど


じゃあお前は>>623
これをなんだと思ってんの?
631デフォルトの名無しさん:2012/06/17(日) 22:58:19.32
ご存知だとは思いますが一応言っておきますね。

リファクタリング―プログラムの体質改善テクニック
著作 マーチン・ファウラー


マーチン・ファウラー
632デフォルトの名無しさん:2012/06/17(日) 23:08:47.26
>>629
いや、影響が出ないんだろ
リファクタリングしても動作は変わらないんだから
633デフォルトの名無しさん:2012/06/17(日) 23:11:38.03
>>632
はい。正しく行えばリファクタリングの結果、影響はありません。
しかし人間は間違えることもあります。
634uy:2012/06/17(日) 23:13:31.84
>>631
何作った奴?
代表的な製作物のプログラムとそのソースコードPlz

口だけの奴とかいらねーから
635uy:2012/06/17(日) 23:14:41.82
リファクタリング(キリッ)してる奴にもう一度聞きたい

>>623
これなんだと思ってんの?
636デフォルトの名無しさん:2012/06/17(日) 23:17:26.14
> これなんだと思ってんの?
それを聞かれたのはお前だろw
答えろよ。
637デフォルトの名無しさん:2012/06/17(日) 23:20:09.28
>>634
PofEAA書いた人だよ?

知らない? PofEAA
638uy:2012/06/17(日) 23:23:02.66
>>636
なにいってんの頭大丈夫?

>>637
ソースコードは?
639uy:2012/06/17(日) 23:23:46.87
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
マーチン・ファウラー() の作ったプログラムと、そのソースコードがみたいんですけど
640デフォルトの名無しさん:2012/06/17(日) 23:24:07.97
>>638
これらの本に乗ってるよ。
641デフォルトの名無しさん:2012/06/17(日) 23:27:50.65
リファクタリングを世に広めた人を
知らないで、オレオレ定義か。
頭が高いな。uyは控えおろうってのw

[コラム] リファクタリングとは、 最適化することじゃない。 理解しやすくすること。
http://www.tdd-net.jp/2010/10/post-85dc.html
リファクタリングを世に広めた Martin Fowler 氏の言葉です。

リファクタリングとは、理解や修正が簡単になるための変更だと私は思っている。
同じ変更でも、目的が異なれば、それはリファクタリングとは言わない。
642uy:2012/06/17(日) 23:28:55.77
>>640
そうじゃなくて
そいつの書いたプログラムの完成品のソースコードが見たいわけで

え、まさか無いの?
うわあ・・・・・・
書籍かいてる奴ってこんなのばっかだよな、こういう本を真に受ける奴はもっとバカだけど
643デフォルトの名無しさん:2012/06/17(日) 23:29:01.28
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?IsOptimizationRefactoring

リファクタリングの境界線のひとつ

プログラムのパフォーマンスを向上させるために変更を行った。
これはリファクタリングと呼べるのか?

最適化とリファクタリングはどちらも変化を伴うものだが
(なかには最適化かつリファクタリングとなる変化もあるが)、両者は別物だと私は考えている。

なぜなら、両者の目的が異なるからである。リファクタリングは、
コードを理解しやすくするためである。最適化は、プログラムを速くするためである。
644uy:2012/06/17(日) 23:31:53.70
リファクタリングを世に広めた人wwwwwwwwwwwwwwwwwwww
はぁ?????????

プログラミングやってれば誰でも極自然に当たり前のようにやっている行為を世に広めたとかすげー勘違いだなwwww
645デフォルトの名無しさん:2012/06/17(日) 23:32:15.78
uyは小さすぎるな・・・
世界も人としても。
646デフォルトの名無しさん:2012/06/17(日) 23:33:21.05
つか、モグリだろ?
マーチンファウラーを知らないって。
アジャイル方面でも有名なんだけど。
647デフォルトの名無しさん:2012/06/17(日) 23:34:23.33
もぐりもなにも…
648uy:2012/06/17(日) 23:35:10.53
>>643
「最適化」って単語はコンパイラが既に使ってるんだよ
だから>>623がリファクタリングではないとするならば
「ソースコードの」って前置きを入れてないとコンパイラの最適化とごっちゃになる

どうでも良い作業にリファクタリングとかいう名前付けてる奴はマジでカス
ちなみに>>623も別に実行速度を気にして変更したわけじゃないよ
ソースコードを明らかに見やすくするために別記法を持ってきて無駄なソースコード量を減らしただけだよ
649デフォルトの名無しさん:2012/06/17(日) 23:35:46.64
リファクタリングとは、テスト工数を最適化することじゃない
650デフォルトの名無しさん:2012/06/17(日) 23:38:15.29
少なくとも、マーチンファウラーは
まつもとゆきひろと同じ舞台にたってる人だよね。
651デフォルトの名無しさん:2012/06/17(日) 23:39:52.17
>>648
素人さんは、基礎を
どうでも良い作業と言うよね。

プロは名前のつけかたにさえこだわっているというのに。
652uy:2012/06/17(日) 23:44:37.88
>>651
へー名前の付け方にこだわってるんだ
じゃあ>>623は何て名前の作業?

>>650
Matzと同レベとかますます勘違いもいいところだろ・・・
マーチンファウラーの代わりなどいくらでもいる Matzの代わりは1人もいない
653デフォルトの名無しさん:2012/06/17(日) 23:47:12.93
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
654デフォルトの名無しさん:2012/06/17(日) 23:49:56.48
Matzは糞言語を生んだ糞
655デフォルトの名無しさん:2012/06/17(日) 23:50:40.61
> じゃあ>>623は何て名前の作業?

それ、お前がされた質問だろw

> >>650
> Matzと同レベとかますます勘違いもいいところだろ・・・
本当に知らないのか(爆笑)

QCon Tokyo 2009では、マーチン・ファウラーに並んで
まつもと ゆきひろも喋ってただろ。

http://www.publickey1.jp/blog/11/why_ruby_again_by_matz.html
まつもとゆきひろ「そして、マーチン・ファウラー氏は、
Rubyのコミュニティの人たちはとてもナイスだと言ってくれました。」
656uy:2012/06/17(日) 23:54:28.63
あ、結局>>623こういう事をお前らはやらないから名称がわからないわけね
教えてやるよこれが本来のリファクタリングだ

Matzとまーちんふぁうら(笑)が同レベとかいうなら
そんなこといったら俺と並んでる奴がそこら中にいることになるじゃねーか
流石にそれは四捨五入しすぎ
657デフォルトの名無しさん:2012/06/17(日) 23:56:41.85
マーチン・ファウラー >>>> Matz >>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>uy
658デフォルトの名無しさん:2012/06/17(日) 23:58:46.07
自分がリファクタリングだと思っていたものが
違うとわかり、さらにこんなヤツ知らないと
言っていた人が、リファクタリング分野での
第一人者であることを知ったのって
どういう気分なんだろうなw
659デフォルトの名無しさん:2012/06/18(月) 00:00:00.90
まあuyは知識も経験も
人並外れて低い
一般人、もとい一般ニートですからw
660デフォルトの名無しさん:2012/06/18(月) 00:00:18.05
uyがクズすぎて不等号が足りないだろ
661デフォルトの名無しさん:2012/06/18(月) 00:02:12.73
まさにuy=ウンコ野郎だな
名が体を表してる
662デフォルトの名無しさん:2012/06/18(月) 00:04:34.12
uyって誰?
ウンコ界の有名糞?
663uy:2012/06/18(月) 00:29:36.33
何時かにも言ったけど
きたねーおっさんが下ネタいっても、きたねえだけだからな

お前らは外見も思考もゴミなんだから、品くらいもてよ
664デフォルトの名無しさん:2012/06/18(月) 00:33:36.33
ウンコ野郎まだ生きてたのかよ
665uy:2012/06/18(月) 00:34:04.66
そもそも昔は高機能IDEなんて無かったんだから
手動で>>623これやってリファクタリングって言ってたに決まってるのに

ここまで言わないと気づけないとか流石にひねくれを超えて
酔っ払いでも相手にしてる気分だ

まぁお前らはIDEをマウスでカチカチしてリファクタリングしてれば良いと思うぞ
いや割とマジでそう思う
ソースコードをかけないお前らは、極力ソースコードを書くべきではない

俺はソースコードが書けるから、ソースコードを書くだけで
別にお前らにそれは強要しない
666デフォルトの名無しさん:2012/06/18(月) 00:35:07.82
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
667デフォルトの名無しさん:2012/06/18(月) 00:37:24.89
uy先輩は世界を震撼させるゲームを作っておられるのだ。


rubyでw
668デフォルトの名無しさん:2012/06/18(月) 00:39:01.89
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
669uy:2012/06/18(月) 00:39:32.44
一瞬でゴミみたいなスレになったな

uy>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Matz>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>マーチンファウラー(笑)

だって、言ってるのに
Matz == マーチンファウラー(笑)

などとすると不等号が一気に省略されて
uy>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Matz == マーチンファウラー(笑)

たったこれだけの差になってしまう
これはアバウトすぎ
670デフォルトの名無しさん:2012/06/18(月) 00:40:06.62
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
uyことウンコ野郎() の作ったプログラムと、そのソースコードがみたいんですけど
671uy:2012/06/18(月) 00:43:14.85
何時かにも言ったけど
きたねーおっさんが下ネタいっても、きたねえだけだからな

お前らは外見も思考もゴミなんだから、品くらいもてよ


きたねえおっさんと言われて
カチンと来ちゃったか

事実なのだから仕方ないよ
ようはそのきたねえ事実をどのように包み隠すかである
それが下手な奴をゴミと言う
672デフォルトの名無しさん:2012/06/18(月) 00:44:27.44
はいはい、たいしたプログラムも書けないクズのくせに
673uy:2012/06/18(月) 00:45:18.70
あ、そっか
月曜日か

さて、俺はゲーム製作の続きでもするかな
674デフォルトの名無しさん:2012/06/18(月) 00:45:28.35
なんで、自動でできる(簡単な)リファクタリングの話をすると
自動でできるものだけがリファクタリングと思っちゃうわけ?yuちゃん。
675デフォルトの名無しさん:2012/06/18(月) 00:47:10.00
>>623がまったくリファクタリングになってない件。
むしろ逆のことをしているww
676デフォルトの名無しさん:2012/06/18(月) 00:53:54.52
どうでもいいけど、マーチン・ファウラーをそんなに持ち上げるなら
彼がRubyを評価してることにも(少なくともJavaやC#よりも)
触れない訳にはいかない

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?RubyAtThoughtWorks
677デフォルトの名無しさん:2012/06/18(月) 00:56:03.27
コテ付けろよ
678デフォルトの名無しさん:2012/06/18(月) 01:01:12.87
持ち上げるっていうか、普通に有名な人だよね?
設計周りやっててこの人のことを知らないなら
本当にモグリだから。
世界レベルで見ればMatzよりもはるかに有名。
679デフォルトの名無しさん:2012/06/18(月) 01:06:47.37
>>623を正しくリファクタリングするなら
def str2hash(str)
  Hash[ *str.split ]
end

p str2hash("blue 青 white shiro\nred aka")
680uy:2012/06/18(月) 01:13:08.55
>>679
バカじゃないの
str2hashってメソッド自体
Rubyで宣言するアホはいない
681デフォルトの名無しさん:2012/06/18(月) 01:15:43.84
それでも一度使われてしまった以上は、
リファクタリングでは残します。
682デフォルトの名無しさん:2012/06/18(月) 01:19:10.13
いや、リファクタリングは残すとは限らず、
残した上で、新たなメソッドを作り、メソッドの委譲を行なってから
テストもちゃんとやって、既存のコードを修正していって、
最終的にどこからも使われなくなった時に消しましょう。
という流れね。

これも絶対ではなくリファクタリングのやり方の一つでしか無いけど。
683デフォルトの名無しさん:2012/06/18(月) 01:20:25.17
それでも関数化してある箇所を
呼び出してる箇所さがしてわざわざ関数を使わない形で展開しまわるアホは居ない。
684デフォルトの名無しさん:2012/06/18(月) 01:22:31.51
> 最終的にどこからも使われなくなった時に消しましょう。

最終的にどこからも使われなくなったって
動的言語でどうやって判断すればいいのかな?

テストを実行すればわかるというけれど
そのテストが完璧であるということはわからないし。
685デフォルトの名無しさん:2012/06/18(月) 01:22:48.46
686デフォルトの名無しさん:2012/06/18(月) 01:25:30.04
>>683
> 呼び出してる箇所さがしてわざわざ関数を使わない形で展開しまわるアホは居ない。
これもまたメソッドのインライン化という
リファクタいリングだよ。

なぜ、アホだと思うか
その理由のほうが興味深いよねw
687デフォルトの名無しさん:2012/06/18(月) 01:25:54.56
それはよほど特殊な場合だろ
688デフォルトの名無しさん:2012/06/18(月) 01:26:45.77
>>686
一箇所からしか参照されてないのであればの話だろ。
689デフォルトの名無しさん:2012/06/18(月) 01:27:31.50
>>688
複数ヶ所から参照されていても
何の問題もない。

つか、メソッドのインライン化って
機械的に出来る簡単な作業でしょ?
690デフォルトの名無しさん:2012/06/18(月) 01:33:29.67
>>689
関数が複数個所から参照されているなら、
わざわざ手動でインライン展開なぞせんわ。
なぜなら抽象度が落ちるから。
691デフォルトの名無しさん:2012/06/18(月) 01:36:42.94
やるやらないはともかく、変換自体はIDEで出来るよ、静的言語ならね



まあ、そんなステキなIDEがあったとしても

Ruby >>>>> 超えられない壁 >>>>>>> Java, C#

なんですけどね、マーティン・ファウラー氏の中では
692デフォルトの名無しさん:2012/06/18(月) 01:38:02.75
>>690
話の流れわかってないでしょw

>>623みたいにまずいコードがあった時に
プロジェクト全体をいきなり全部書き換えるのではなく、
リグレッションを起こさないように少しづつ変えましょうねって話だよ。

メソッドの委譲を行なってからメソッドのインライン化で
消していくという作業の話。
693デフォルトの名無しさん:2012/06/18(月) 01:51:23.40
>>691
そんなことをいうと、
uyがマーチン・ファウラーを
敵として認識すればいいか
見方として認識すればいいか
わからなくなるだろw
694デフォルトの名無しさん:2012/06/18(月) 01:55:26.32
複数個所から参照されてるってことは、
重複したコードを纏めてあるってことだろ。
手間かけて展開して回るアホは居ないわ。
>>623に関しても同じ。
リファクタリングは>>679まで。
695uy:2012/06/18(月) 02:07:00.73
リファクタリングですらないものをリファクタリングと呼び続ける愚か者たち
696uy:2012/06/18(月) 02:12:10.35
一度使われたメソッドを残すのはいい

俺が言ってるのは
str2hashとかいうメソッドは、たかが例題の答えとしてでも残すべきではない
俺は最初からstr2hashという無駄メソッドはいらないという主張も>>623のソースコードに込めてる

つうか何?結局リファクタリング(笑)厨は>>623をリファクタリングと認めてるわけじゃん
ほんとに矛盾した事しかいえない酔っ払いだな
697デフォルトの名無しさん:2012/06/18(月) 02:19:02.74
無駄かどうかは分からない。
将来的にstr2hashの実装を変えたくなるかもしれない。
複数個所から呼ばれているのなら、
それだけで重複したコードを纏めているという意味がある。
698デフォルトの名無しさん:2012/06/18(月) 02:24:47.89
str2hashという関数が無駄に見えるのなら、はじめから書かないこと。
もし、書いてしまって、そして複数個所で使ってしまったのなら、もう後の祭り。
わざわざ展開して回る価値も無い。
699デフォルトの名無しさん:2012/06/18(月) 04:04:37.31
そもそもstr2hashなんて
名前をつけた奴が馬鹿なだけ。
700デフォルトの名無しさん:2012/06/18(月) 05:37:28.05
結論:uyはこの上なく馬鹿
701デフォルトの名無しさん:2012/06/18(月) 07:30:37.48
>>699
JavaならListOfStringToHashTableWithStringKeys
702デフォルトの名無しさん:2012/06/18(月) 07:57:27.01
htmlspecialchars
何をする関数か分かりやすい関数名
読みやすいし

他言語も見習いたまえ
703デフォルトの名無しさん:2012/06/18(月) 08:10:57.40
でも見習ったら
htmlspecialcharsの第一人者が来て「これはhtmlspecialcharsじゃない」
って言い出して分かりにくくなるんですよね
704デフォルトの名無しさん:2012/06/18(月) 08:12:51.98
どこが分かりやすいんだよ馬鹿w
705デフォルトの名無しさん:2012/06/18(月) 10:43:15.21
型を書けばチェックされて、省略したら動的になって
全体コンパイルもインタプリタ実行も出来る言語って無いの?
706デフォルトの名無しさん:2012/06/18(月) 11:43:54.04
>>705
それは、VB6です。
707デフォルトの名無しさん:2012/06/18(月) 12:17:16.90
配列の宣言と初期化が同時に出来ない言語なんて誰が使うかよ
708uy:2012/06/18(月) 12:22:37.98
rubyの問題点はさぁ
大規模開発においてスタティック変数がバグの元になるから、スタティック変数をなくすっていう見解はいいんだけど
その前にruby(動的言語)で大規模開発をするのがあらゆる側面から見てきついのに
先にスタティック変数なくして、一部の自由度だけを下げてる
まだ言語が未完成である事が一番の問題

あとはスタティック変数の代わりの機能や書き方っていうのが提示されていない気がする
俺はその代用品となるモジュールを書いたら普段は使わないメソッド使いまくりでかなり複雑になった

だから普通はメンバ変数などをその代わりに使うしかなくなってる
名前に気をつければ衝突とかしやしないし
アルゴリズムを推敲していけばスタティック変数はなくせるわけだけど、
考えるのが面倒くさい時には結局 @変数の無茶な使い方をする
しいていうなら @変数の保護機能のようなものがない気がする

@vという変数をaメソッド内では変更してもbメソッド内では絶対に変更しないし参照もしないって場合においても
普通に@vが参照される
変数宣言のいらない動的言語ではこれが最も致命的
def v= nの中にcallerでも見ながら何か変数@vの使用条件を仕込めば保護機能の持った変数は作れなくはないけど、それをやるのかね?
709デフォルトの名無しさん:2012/06/18(月) 13:24:48.13
Rubyの問題点は、uyが使ってる、という点
710uy:2012/06/18(月) 15:42:54.82
なんとなくそれは俺も思う
しかし本当に2ch荒らした程度で揺らぐとかだったらアホらしい
2chにきてる奴のレベルが低いんじゃなくて
本当にレベル低い奴しかいないからネットの2chのレベルも下がるんだね
少し落ち着いたら本当にLisp行く
711デフォルトの名無しさん:2012/06/18(月) 16:07:44.35
>少し落ち着いたら
善は急げですよ
712デフォルトの名無しさん:2012/06/18(月) 16:20:53.52
ここにも来ないでください。お願いします。本当に。
713デフォルトの名無しさん:2012/06/18(月) 16:31:37.01
そりゃグローバル変数のことかww
714デフォルトの名無しさん:2012/06/18(月) 16:33:19.92
オブジェクト指向言語Ruby。
715uy:2012/06/18(月) 16:57:08.83
死にます
716デフォルトの名無しさん:2012/06/18(月) 17:00:41.08
シングルトンも知らんとか
717デフォルトの名無しさん:2012/06/18(月) 17:18:18.99
スタティック変数ってなんなのかわかってねぇ…
718デフォルトの名無しさん:2012/06/18(月) 17:21:50.49
スタティックとグローバルの違いも知らないとか
719うy:2012/06/18(月) 17:48:08.11
>>716
何の意味でシングルトンっていったかしらんけど
解決策はそれであってる
ただスタティック変数がちょっと1個ほしかっただけでも
何らかのシングルトンの仕組みを導入しないとならない
720uy: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を綺麗になくす事は出来る、ただしなくそうとするとおよそ数十行の特殊な術式を書かなければならなくなる
基本的に、誰もそんなものを書いたりはしないので結局は以下のようになる
721uy: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を使わざるを得ない
722uy: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使える

こうする方法
この方法まで提供してようやくスタティック変数はいらなくなる
723デフォルトの名無しさん:2012/06/18(月) 18:50:56.97
>>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
724uy:2012/06/18(月) 18:51:12.85
つまりextendする度にrecursionはその都度生成される
recursionは任意の状態を持っているので、後から破棄しなければならない
だからオブジェクトのインスタンスとつなぎ合わせてオブジェクトの破棄とともにrecursionと、recursionのもった状態ごと破棄する
これでスタティック変数のように見える状態変数もただのインスタンス化に成功しているので
スタティック変数に潜むバグは発生しない
725uy:2012/06/18(月) 18:54:10.22
>>723
それで考えは合ってるよ

ただcount_procのように状態をもった関数は他にも沢山欲しくなる
そのたびに、そんなに長々と毎回書かなければならないのだろうか?

実際必要な情報は
      counter=0
      lambda{ counter+=1 }
この2行だけなのに、そのクラス定義は冗長すぎる
726デフォルトの名無しさん:2012/06/18(月) 18:55:53.03
> ただcount_procのように状態をもった関数は他にも沢山欲しくなる

これが根本的な間違いだろうな。

普通そんなの欲しくならない。
727デフォルトの名無しさん:2012/06/18(月) 19:01:20.84
動的言語の問題点は
グローバル変数と同じ問題点なんだよね。

動的にどこからでもあるクラスを変更可能ってことは
どこで何をされるかわからない。
という点でグローバル変数が抱えている問題と全く同じ。

728uy:2012/06/18(月) 19:01:22.51
>>726
作るプログラムによる

たとえばキーボードのZキーを5秒間押してみるがよい
zzzzzzzzzzzzzzzzzzzz
↑ 0.5秒程度まってから連打されただろう
↑ これと同じ動作をプログラム上で実行しようとしたら
0.5秒をカウントする状態変数が必要になる

探せばいくらでもでてくる
729デフォルトの名無しさん:2012/06/18(月) 19:03:03.78
> 0.5秒をカウントする状態変数が必要になる

必要なのは状態変数だね。
状態を持った関数とは言わなかったね。
730デフォルトの名無しさん:2012/06/18(月) 19:04:36.29
俺なら0.5秒に発火する割り込み使うから状態変数いらないなw
731デフォルトの名無しさん:2012/06/18(月) 19:06:34.64
端的に言って、recursion が、
呼び出し終了後も次回に備えて状態を持つのなら、
状態を持つ=オブジェクト なので、
recursion をオブジェクトにすればよい。
特に関数としての性質が強いものなら、
関数をどうにかしてオブジェクトにすれば良い。(いわゆる関数オブジェクト)
Rubyでどうするのかは専門外なので詳しくは良く知らんが、とりあえず、
>>723のようにすれば、状態を持つlambdaオブジェクトは作れた。
counter = Proc.new{ counter=0; lambda{ counter+=1 } }.call
上記がそんなに長いとは思わん。
732uy:2012/06/18(月) 19:07:53.78
>>727
しいていうなら変数宣言がない時点で
グローバル変数の問題よりももっと上だから

・どこで変更されるかわからない
・どこで宣言されたかわからない

>>729
言葉遊びをする気はない、そもそもrubyはメンバ変数もメソッドだろうが

>>730
再帰の>>720 も割り込みで実装してみろよ
733uy:2012/06/18(月) 19:11:20.89
>>731
それじゃ長いんだよ

CやC++でスタティック変数を使わないといけなかった箇所を思い出して見るが良い
スタティック変数は使いまくりだから

あとよく見たらそれProc.newで囲う必要なくて
counter=0
@count_proc = lambda{ counter+=1 }
だろ
734デフォルトの名無しさん:2012/06/18(月) 19:11:58.28
>実際必要な情報は
>      counter=0
>      lambda{ counter+=1 }
>この2行だけなのに、そのクラス定義は冗長すぎる

それの前後を Proc.New{ ... }.call で囲むだけだろ。
それだけで独自領域を持ったlambdaが作れる。
確かにちょっと冗長だが、我慢できる範囲だと思うが。
735デフォルトの名無しさん:2012/06/18(月) 19:12:28.35
uyのレスが長ったらしい
736デフォルトの名無しさん:2012/06/18(月) 19:13:22.52
クロージャーに落ち着いたの
737uy: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
738デフォルトの名無しさん:2012/06/18(月) 19:21:36.50
ただのクラスだなw
739デフォルトの名無しさん:2012/06/18(月) 19:31:13.64
>あと、状態を持った変数はちゃんと外部からも見れるようにさせないといけないから、
それなら普通にクラスで書いたほうが速い。

class CounterClass2
attr_accessor :counter
def count; @counter+=1 end
end
740uy:2012/06/18(月) 19:34:00.37
結局うまい事かけなければクラスで書いとけば安定はするよ
けどソースコード量的にはゴミカス

カウンターの定義など本来これでいいはず
counter =->{c=0;->{c+=1}}.call
p counter.call
p counter.call

ネームスペースが欲しい
741デフォルトの名無しさん:2012/06/18(月) 19:34:29.75
色々端折って短く書ける言語があったらいいねって話しなの?
cls CounterClass
  c = 0
  count = { c+=1 }
742uy:2012/06/18(月) 19:38:42.38
そうだよ
たかが数文字のスタティック変数の代用品として
クラス定義をしなくちゃいけなくなってるから

別に完璧じゃなくてもいい使い捨てスクリプトでは

def func
 @a ||= なにか
end

こういう事も普通にやってしまう
743デフォルトの名無しさん:2012/06/18(月) 19:39:30.98
ソースコードの量にこだわっている奴は
仕事ができない奴が多い。
744uy:2012/06/18(月) 19:40:19.59
100万行のソースコードでも管理しててください

俺は1万行に抑えたソースコードを管理する
745デフォルトの名無しさん:2012/06/18(月) 19:42:22.61
>>742
つまり大規模開発の話でなく使い捨てスクリプトの話だと

スレタイ読んで落ち着いたらLispに行けばいいよ
746uy:2012/06/18(月) 19:49:22.03
>>745
そう回避したか

けど使い捨てと思ってかいたスクリプトも
その断片を大規模開発で使う事もあるわけで
747デフォルトの名無しさん:2012/06/18(月) 19:52:51.97
恥ずかしいからってムキになんなよ。もう25にもなんだからさ。
748デフォルトの名無しさん:2012/06/18(月) 19:53:06.47
使い捨てのつもりで書いたゴミを積み重ねて
大規模なゴミを作る uy style

テスト工数が増大ってレベルじゃないなw
749デフォルトの名無しさん:2012/06/18(月) 19:54:41.74
で、お前が思ってるスタティック変数ってな具体的にどういうものなんだよw
750デフォルトの名無しさん:2012/06/18(月) 19:57:12.69
$vvvってすればいいんじゃないかな…
751デフォルトの名無しさん:2012/06/18(月) 20:02:36.68
def newcounter
c=0
lambda{c+=1}
end
counter = newcounter
p counter.call
p counter.call
752デフォルトの名無しさん:2012/06/18(月) 20:03:38.23
つまりRubyにも簡単に扱えるクロージャが欲しいと。
753uy:2012/06/18(月) 20:04:58.13
>>750
それもひとつの手
$iroiro_ireru_hensuu = Hash.new

とかやって状態を保存してしまう

俺様はC++をやっていた頃
スタティック変数は全てのポインタをグローバル変数で保持し(おそらく最近の言語でいうリファレンスっていうのと同等の機能)
それらがいらなくなったらスマートポインタのようなもので0初期化する仕組みでやっていた

ようは「寿命つきスタティック変数」が欲しいのだよ
俺はrubyではその寿命をオブジェクトに束縛する為に
a.extend A

などという方法でスタティック変数(意味的にを持ったメソッドに寿命を作ってる
754デフォルトの名無しさん:2012/06/18(月) 20:05:24.19
クラス変数あんだからいいじゃん。
755uy:2012/06/18(月) 20:08:07.19
>>749
これだよ
http://e-words.jp/w/E382B9E382BFE38386E382A3E38383E382AFE5A489E695B0.html

関数やブロック内で宣言された変数で、そのブロックが終了しても値を保持しているもの。静的変数とも言う。「static」というキーワードを用いて宣言する言語が多い。

オブジェクト指向のプログラミング言語の場合は、生成されたオブジェクトの個数や状態をそのブロック内に格納しておく変数として使うと便利である。(キリッ)
グローバル変数のように、他の関数から使用することはできない。
(↑ポインタすら知らないのか)
756デフォルトの名無しさん:2012/06/18(月) 20:10:48.73
いや、最初からインスタンス変数ってそのオブジェクトに付いてる「寿命があるスタティックw」変数だろ。ナニ言ってんだ?
757uy:2012/06/18(月) 20:10:58.67
>>752
クロージャで解決できるの?この問題?

>>754
精神衛生上の問題
クラス変数で
def test
 @@__(メソッド名)__ ||= でーた
end
 とかいう風に使っておけば多分名前衝突はしないけど
それでも「多分」だよ 動的言語には変数宣言が存在しないから
758uy:2012/06/18(月) 20:12:02.87
>>756
>>720-724
これ読んでわからないなら話しかけないで
759デフォルトの名無しさん:2012/06/18(月) 20:13:45.38
uyはコード量より文章量を減らせクズ
760デフォルトの名無しさん:2012/06/18(月) 20:18:35.48
自演乙
761デフォルトの名無しさん:2012/06/18(月) 20:18:52.16
>>737 >>757
メソッドだけなのか外部からも見えるようにするのか
どっちなの
762デフォルトの名無しさん:2012/06/18(月) 20:20:54.79
evalしとけばいい話?
763デフォルトの名無しさん:2012/06/18(月) 20:23:00.35
クロージャー → 複数のメソッドからアクセスしたい
クラス変数 → メソッド内に限定したい

統合失調症
764デフォルトの名無しさん:2012/06/18(月) 20:23:36.18
ホンモノ置き去りにすんなよw
765uy:2012/06/18(月) 20:24:37.83
>>761
外部から見えるように(裏方)でやってくれるのがベストだよ

>>762
メソッド内にクラスかモジュールが定義できればevalでもいけた
766デフォルトの名無しさん:2012/06/18(月) 20:27:54.47
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
767uy:2012/06/18(月) 20:32:48.94
>>766
ちょ・・・
凄いなにそれ・・・・・・・・w

そっか、再帰の場合は引数に与えてしまえば状態変数いらなかったね
768デフォルトの名無しさん:2012/06/18(月) 20:46:25.93
できるだけ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)))))))
769デフォルトの名無しさん:2012/06/18(月) 20:47:53.60
でもそれで全体が短くはならんよな…
770デフォルトの名無しさん:2012/06/18(月) 20:59:32.02
確かにRubyの変数スコープまわりはダサイいとは思うけどな。
まず動的言語なのにオブジェクトと実行コンテキスト(フレーム)に区別がある時点で。
あとはシンボル名の検索チェーンをプログラマが勝手手前に制御できるようにしておけば、
継承だろうが多態だろうがラムダだろうがクロージャだろうが、自由が利くのにな。
771デフォルトの名無しさん:2012/06/18(月) 21:00:25.80
この人に教えてあげればどうか?
>ttp://webos-goodies.jp/archives/50678637.html
772uy: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
773デフォルトの名無しさん:2012/06/18(月) 21:40:20.36
そんなことも知らないのかよ
恥ずかしいやつ
774デフォルトの名無しさん:2012/06/18(月) 21:41:39.15
>>772
uy的に分かりやすく言えば、
子オブジェクトから、親オブジェクトのメンバを透過的に
見えるようにする仕組み。
775デフォルトの名無しさん:2012/06/18(月) 21:42:52.31
まあ、これでも分からないだろうな
776uy:2012/06/18(月) 21:55:51.00
子オブジェクト、親オブジェクトって、何よ
継承関係の事?
self.class.ancestors[-1].send(:print , 33)
こういうのじゃなくて?

マジプログラマの使う日本語は不可解だからソースコードで喋って欲しいんだけど
777uy:2012/06/18(月) 22:02:43.64
いや、Rubyで多重継承や多態などの存在しない機能を
Rubyソースコード上だけで実装する為の何かって事?

もう無理だ


778デフォルトの名無しさん:2012/06/18(月) 22:04:48.81
oya.oya_member
oya.ko.method{ oya_member OK }
779uy: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

これ?
780デフォルトの名無しさん:2012/06/18(月) 22:11:19.48
そうそう。
俺に言わせれば、クロージャやラムダで出来るのに、
オブジェクトで出来ないのはおかしい。動的言語の癖に。
781uy: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はクローヤじゃラムダもオブジェクト
782uy:2012/06/18(月) 22:19:14.29
クロージャやラムダ。  俺まで日本語がおかしくなってきた
783uy:2012/06/18(月) 22:23:56.46
もういいや、なんとなく言わんとしてる事はわかった気がする
784デフォルトの名無しさん:2012/06/18(月) 22:31:17.29
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
785デフォルトの名無しさん:2012/06/18(月) 22:56:45.30
メソッドチェーンと変数のチェーンを区別する理由は
グローバル関数は良いけどグローバル変数は駄目ということにしたいからですよ
786uy: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
787デフォルトの名無しさん:2012/06/18(月) 23:26:49.37
>>786
そのコードだと、親側の更新が子側に反映されないから微妙。
a = Oya.new
a.x=1
p a.ko.func #=> 3
788uy: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
789uy:2012/06/18(月) 23:46:08.78
寝ぼけてるわ
>>788のコードはなんでもない
もう眠すぎる
790デフォルトの名無しさん:2012/06/19(火) 00:05:36.39
動的言語って自由度が高すぎるから
ついつい邪悪なコードに走りがちになるな。
静的言語なら真っ先に>>766に行き着くのに。
791デフォルトの名無しさん:2012/06/19(火) 00:26:59.53
変数のgがどう考えても邪悪だろ
792デフォルトの名無しさん:2012/06/19(火) 00:42:36.67
Java, C#が真っ先にstaticおじさんに行き着くわけがない
793デフォルトの名無しさん:2012/06/19(火) 06:04:50.81
 
794デフォルトの名無しさん:2012/06/19(火) 07:17:46.28
その気になれば変数gは消せるだろ
Haskellで書けばこうだし

recursion h f = f (flip recursion f) h
795デフォルトの名無しさん:2012/06/19(火) 07:26:52.93
いやいやスレの趣旨的に親の変数とそれに関連した別モジュールが
連動しあうとか…それデバッグしにくいじゃない…
796デフォルトの名無しさん:2012/06/19(火) 07:47:45.40
シンプルに書けるなら
状態持たせたり連動させたりする必要無いだろ
依存関係が多い方がデバッグもテストも大変
797デフォルトの名無しさん:2012/06/19(火) 11:18:09.65
>>767
> そっか、再帰の場合は引数に与えてしまえば状態変数いらなかったね

マジ常識だからw
798デフォルトの名無しさん:2012/06/19(火) 11:19:00.89
>>796
初心者にそれを要求するのは酷だと思う。
799uy:2012/06/19(火) 11:43:23.56
ruby、lambdaの再帰でググって誰一人やってないからソースあげてんのに何いってんだ

それよりも、そのg変数の挙動は素直に凄い
確かに考えてみればそれで動くわけだけど
g = nil 消しても動くというキチっぷり
800uy: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がつかえね
801uy:2012/06/19(火) 13:25:27.09
http://ideone.com/9Du4H

さて同じ処理をかいて並べてみると
combinatorよりも
recursionのほうが明らかに短い実装だとわかったわけだけど

Yコンビネータ(笑)どうしたらいい? Yコンビネータ(笑)定義した奴だれだよ
え?ハス・・・ハスケル?カリーwwwwwww

このYコンビネータ(笑)って。大学とかで教えまくってるんですか?
へえ・・・・
802デフォルトの名無しさん:2012/06/19(火) 13:26:40.87
うんうん凄いね、よく頑張ったね


combinator f = f (combinator f)

g = combinator (\f n -> if n == 0 then 1 else n * f (n - 1))
  
main = print $ g 6
803デフォルトの名無しさん:2012/06/19(火) 13:32:59.58
uyがゴミカスなのが丸分かりである
804uy: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で置き換えられます
805uy:2012/06/19(火) 13:53:07.03
ググるとYコンビネータのゴミカスみたいなソースしかでてこないけど量は多い
そんだけ大勢が考えててこの答えにたどり着かないとかw
本当にコピペ厨しかいねーんだな
806デフォルトの名無しさん:2012/06/19(火) 13:59:38.31
>>804
a.call 6 か a.call 7 で 100000回のループ?
それでそんな時間かかるの?
807デフォルトの名無しさん:2012/06/19(火) 14:12:14.83
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

バカス
808uy:2012/06/19(火) 14:15:29.81
7で、再帰の宣言構文のdo〜endまで囲って100000回のループ
809uy:2012/06/19(火) 14:19:28.54
>>807
なにこれ
バカじゃないの
810uy:2012/06/19(火) 14:26:15.49
一瞬凄いと思ったけど
結局変数を外で宣言するかブロック内に宣言するかの違いだった

lambda内でlambda.callとかで再帰できるようになるのが一番良い
所詮言語側が実装するまでの遊びにしか過ぎない
811uy: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


やはりブロック外の変数は無理に参照しないのが好ましい
812デフォルトの名無しさん:2012/06/19(火) 16:00:13.01
>>811
それって、ラムダの引数の数が変わると、recの流用ができなくなる。
素直に

a = Proc.new{
 f = lambda{|n|
  if n==0; 1 else n*f.call(n-1) end
 }
}.call

p a.call 7

って書いたほうがまし。
813uy: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使うとかバカじゃないの?
これもどうせハスケル(笑)カリー(笑)が定義したものなんだろ
ほんとにゴミしか作ってねーな
814uy:2012/06/19(火) 16:03:04.14
>>812
ああ、*nにしといて

つうかそもそも使いやすいシンタックスのlambda再帰が欲しいわけで
815デフォルトの名無しさん:2012/06/19(火) 16:21:30.68
ゴミカスの代名詞uyが何を言ってるんだか
816uy:2012/06/19(火) 16:48:37.40
lambdaでifは出来ないな
出来るとかいってる奴はそんなのはハードウェアの条件分岐の仕組みがわかってない
四則演算とループは再帰で直せる
Yコンビネータはとりあえず認めてあげよう
ゴミではあるけど遠い将来に役立つかもしれないゴミだ
817デフォルトの名無しさん:2012/06/19(火) 16:51:23.18
>>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")
818uy:2012/06/19(火) 17:07:01.58
見てたサンプルが悪かったらしい
一応出来るな
あー・・・これあれだ
819uy:2012/06/19(火) 17:40:07.57
http://ideone.com/VHiIx
Rubyで書き直してみたわ
きんも
820デフォルトの名無しさん:2012/06/19(火) 17:46:35.05
ずっと何の役に立たないゴミ=uy
821uy:2012/06/19(火) 18:02:59.35
>ruby -e 'puts "ずっと何の役に立たないゴミ=>>820 ".insert 7 , "も"'
822デフォルトの名無しさん:2012/06/19(火) 18:24:12.85
ゴミカス
823デフォルトの名無しさん:2012/06/19(火) 18:58:26.88

337 デフォルトの名無しさん 2006/05/18(木) 03:31:05
小説全体を全部一つの文で書くのが関数型。
分かりにくいのは当然。
824デフォルトの名無しさん:2012/06/19(火) 19:00:30.09
これが関数型


 しかし、RubyとRailsの限界に気がついてしまいRubyのランタイムは
非常に遅いため、Rubyで作成したアプリケーションの納品をためらったことがあり
Rubyはプロトタイプ作成用に使い、納品用にJavaで作りなおさなければならなく
 RubyとRailsのプロジェクトが数千行の規模を超え、チームに新しいメンバーを追加したときに、
動的言語の問題が明らかになって来て私たちはコーディングの時間の半分をテスト作成の
費やさなければならなりRailsによって得られた生産性の向上は、テスト作成の作業に
失われ作成したテストの多くは、Javaであれば不必要なものでテストの大半は、
リファクタリングによってメソッド名やパラメータの数を変更した際に、呼び出し元が
正しく変更されているかを確認するためのもので
また、Rubyでもチームメンバーが2名から4名であれば、メンバー間のコミュニケーションは
非常にスムーズでしかし新しいメンバーをチームに参加せせようとすると、
これまでチームで培ってきたノウハウを新しいメンバーにうまく伝えることが出来なかったのです。
825デフォルトの名無しさん:2012/06/19(火) 19:18:44.74
気がついてしまった $ 限界に $ RubyとRailsの $ しかし
826デフォルトの名無しさん:2012/06/19(火) 19:33:05.29
ひとと比べられたくない、って理由でここまで逃げるもんなんだねぇ。
827uy:2012/06/19(火) 19:56:10.07
逃げるも何も
大学行かなかったことに後悔しかねえよ
アホか

まぁ大学で何日もかけて授業してたであろうラムダ計算は今日一日で覚えた
俺が考えてた構想にラムダ計算はかなり近い
ただしやっぱ出来るとはわかってもIFは冗長な気がするな
プログラミングにおいて条件分岐そのものがやはりいらないのではなかろうか
828デフォルトの名無しさん:2012/06/19(火) 20:12:27.89
×大学行かなかったことに後悔しかねえよ
○馬鹿だった

829デフォルトの名無しさん:2012/06/19(火) 20:17:30.08
まだ25歳なのにもう後悔してるとか、それこそ生きてる価値ねえな
さっさとラクになっちまえよ
830デフォルトの名無しさん:2012/06/19(火) 20:25:21.35
え? この程度のλ入門なら一日どころか一コマですが。
831uy:2012/06/19(火) 20:28:59.30
いいや
人生の別ルートが少し気になっただけで
大学なんていっていたら今の広域の知識は得れていない事は事実

少なくとも俺が大学にいっていれば、世に役立つものばかりを作り
多大な時間を他人のために使っていき、今のようにはなっていなかっただろう
そこは救われた所でもある
他人行儀に生きた瞬間に人生終了
832uy:2012/06/19(火) 20:30:38.77
>>830
別にこのスレにかきながら勉強してるわけじゃないから
833デフォルトの名無しさん:2012/06/19(火) 20:32:43.36
30までは生きないんだからあと最高で五年か。
今までの五年でしてきたことを思うと…

あのコにはやっぱ気付いてもらえないかなw
834デフォルトの名無しさん:2012/06/19(火) 20:36:18.88
しかし、いくらuyがアレとは言え
下らないコード書散らして日銭稼いでるドカタが
上から目線ってのもなんだかなぁ
835デフォルトの名無しさん:2012/06/19(火) 20:40:30.64
>>831
えともしかして、自分はできる子だって
勘違いしてる?
836デフォルトの名無しさん:2012/06/19(火) 20:46:38.51
>>834
ドカタだって税金や年金は払ってるからね
837デフォルトの名無しさん:2012/06/19(火) 20:51:53.30
まだ25なんだし、これから大学行けばいいんじゃ?遅くないよまだ。
838uy:2012/06/19(火) 21:14:53.28
俺は、人ではないから
人間の通う学校にはもういけない
839デフォルトの名無しさん:2012/06/19(火) 21:18:49.38
人でなければ人とは比べられないしな。
840デフォルトの名無しさん:2012/06/19(火) 21:32:51.51
人n
841デフォルトの名無しさん:2012/06/19(火) 21:35:51.38
みんな弱者だと分かったとたん優しいなw
842デフォルトの名無しさん:2012/06/19(火) 21:36:38.19
838 名前:uy[sage] 投稿日:2012/06/19(火) 21:14:53.28
俺は、人ではないから
人間の通う学校にはもういけない

971 名前:uy[sage] 投稿日:2012/06/19(火) 21:30:59.90
お前らが言うように、俺は確かにゴミカスだ
843uy:2012/06/19(火) 22:51:43.64
gomi
844uy:2012/06/20(水) 01:54:44.18
死にます
845デフォルトの名無しさん:2012/06/20(水) 04:20:24.72
他人行儀?なんでそこで?
846uy:2012/06/20(水) 11:04:30.49
誰かの為や誰かに認められる為に生きたら俺の中で終わり
大学いっていたらそうなってた可能性の方が強い
847uy:2012/06/20(水) 11:54:21.25
つまり俺はゴミカスだがエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
848uy:2012/06/20(水) 12:11:10.99
ゴミ
849uy:2012/06/20(水) 15:56:41.45
ゴミ
850デフォルトの名無しさん:2012/06/20(水) 16:08:45.50
あれ、認められたいひとはいたんじゃなかったっけ?
851デフォルトの名無しさん:2012/06/20(水) 16:10:58.63
それを他人行儀とは言わんぞwどっから持って来たww
852uy:2012/06/20(水) 16:45:14.93
とにかく俺はゴミカスだ
853uy:2012/06/20(水) 18:39:39.03
お前の文章理解力がないからって
一々言葉を説明しないとわからないとか会話が不可能なレベルを超えてるわ
二度と話かけんなよ
854uy:2012/06/20(水) 18:45:22.46
俺はゴミカスだがエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
855デフォルトの名無しさん:2012/06/20(水) 18:45:47.00
お前も デフォルトの名無しさん に話かけるの禁止な
856uy:2012/06/20(水) 19:04:51.84
話しかけてるわけじゃない
レスしてるだけだ
857uy:2012/06/20(水) 19:07:43.98
仲良くしようぜ!
858uy:2012/06/20(水) 19:18:43.64
誰がお前らのような下級ゴミカスと仲良くするかよ
俺はエリートゴミカスだぞ
859デフォルトの名無しさん:2012/06/20(水) 19:31:09.00
これがホントの役立たずだな。
860uy:2012/06/20(水) 19:33:24.91
何だと?
もう一回言ってみろ
861デフォルトの名無しさん:2012/06/20(水) 19:45:44.89
これがホントの役立たずだな。
862デフォルトの名無しさん:2012/06/20(水) 19:48:25.25
イザナミだ
863uy:2012/06/20(水) 19:49:27.88
ファック!!!!
864デフォルトの名無しさん:2012/06/20(水) 19:55:38.21
いーんだよ、どうせあのコに気付かれなきゃ役立たずだって。
むしろあのコがいない世界で認められたくなんかない、いくら俺にチカラがあっても。

ってかぁwwwwハラいてぇwwww文春wwww
865デフォルトの名無しさん:2012/06/20(水) 19:56:45.69
久しぶりに
がんばれがんばれuy
866uy:2012/06/20(水) 21:39:13.52
お前らは愛というものをわかっていないから
それを知らずに死んでいく事だけは避けろよ

この世界には何も残らない
人は死んだら何も残らず、
もっと抽象的に言えば、この星は数千万年後に星ごと消滅する

では、何も残らない中で何をするか?

現実から目を背けろよ
867uy:2012/06/20(水) 22:35:27.30
俺はゴミカスだがエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
この現実だけ受け入れればいい
868uy:2012/06/21(木) 00:25:53.11
ゴミ
869デフォルトの名無しさん:2012/06/21(木) 02:05:16.63
>もっと抽象的に言えば、この星は数千万年後に星ごと消滅する
どこが抽象的なんだろ?
870uy:2012/06/21(木) 04:26:14.68
ゴミ
871uy:2012/06/21(木) 04:44:53.53
俺はゴミ
872uy:2012/06/21(木) 05:42:39.32
ゴミ
873デフォルトの名無しさん:2012/06/21(木) 19:22:41.06
相手に憶えててももらえないのに七・八年も引きずるのが愛なら、いらんだろそんなもん。
つか相手の声もまともに聞かんで愛もクソもたいして変わらんって。
874デフォルトの名無しさん:2012/06/21(木) 20:12:31.81
いい加減、静的だ動的だの話題もループしてて
飽き飽きだったが、この流れは流石に...
875デフォルトの名無しさん:2012/06/21(木) 20:22:02.67
875 get
876uy:2012/06/21(木) 20:28:10.82
では大規模開発での動的言語の問題点の話に戻ります

動的言語(Ruby)の問題点ベスト5

1位 どんどんオーバーライドされていく
2位 変数宣言がない(利点でもあり欠点でもある)
3位 コンパイル時型チェックがない
4位 実行してみないとわからない事が多すぎる
5位 静的言語よりは速度が遅い


別項目として、開発前や開発後の問題
・まともに動的言語を扱える技術者が少ない、集まらない
・仕様変更や処理系のバージョンアップによってその瞬間、全ての動的言語のソースコードは正しく動くという保証をなくす
877デフォルトの名無しさん:2012/06/21(木) 20:38:28.08
>動的言語(Ruby)
ちょっと待てw初っぱなからおかしいだろソレ。
878デフォルトの名無しさん:2012/06/21(木) 21:14:43.11
察しの悪いuyもやっと大規模開発では
Javaこそが至高の言語ということに気付いたか……
879uy:2012/06/21(木) 21:41:47.14
お前たちみたいに頭の悪い奴に開発やらせるには一生C言語やらせとけばいいかな

俺はこのまま行くとrubyでのプログラム開発の人柱になるんだろうけど、
今のままでは絶対に後続がついてこない
880デフォルトの名無しさん:2012/06/21(木) 21:55:01.85
むしろ頭悪い奴にも使えるというのことはその言語が優れているという証になると思うんだが。
881デフォルトの名無しさん:2012/06/21(木) 22:13:50.26
確かに習得の容易さは重要なメリットのひとつ
882uy:2012/06/21(木) 22:20:08.49
作業効率のレベル0〜100までの言語があったとして
作業効率20程度しかでない言語を扱える奴が
世界で一番人口が多ければその言語が優れている優れていないかにかかわらず使われるようになるんだよ
世界で最も大勢に使われることを目標に作られた言語ならば、それでいいんだろうが
頭のレベルが平均以下の人間にも扱える言語にしてやらないと言語の人気を取れないから
効率的プログラミングとは程遠い言語が出来上がる

何をしたいかによる
俺は世界のプログラミングの効率水準を上げたいだけ
883uy:2012/06/21(木) 22:28:04.18
さらに「こんな難しい言語使ってる俺すごい」
みたいな妄想に酔いしれたがる層もいる
BrainFackで何かプログラム作ろうって意欲と、C++で何かプログラム作ろうって意欲は同じだと思える
別の例でいえば、使いこなすのが難しい技法や道具であえて競技しようとするスポーツ選手など。
あえて逆側に突っ走る奴もいる
もはや、まともに考えるだけ無駄である
884デフォルトの名無しさん:2012/06/21(木) 22:29:45.89
お前がやってるのは他人を下げて自分を上げてるように見せてるだけ
885uy:2012/06/21(木) 22:32:12.84
つまり、俺はゴミカスだがエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
886デフォルトの名無しさん:2012/06/21(木) 22:44:30.82
「平均以下の人間にも扱える言語」も「使いこなすのが難しい言語」も
要するに自分基準で分類してるだけじゃねーか
uyにとって丁度良い難易度の言語がRubyだったってだけだろ
887uy:2012/06/21(木) 23:16:28.93
rubyは難易度で選んでるわけでもないな
俺は効率の出る概念なら難易度関係なく理解する
それが出来ない奴らは身の丈にあった言語を使えで結論付いた
888uy:2012/06/21(木) 23:45:29.26
要するに、俺はゴミカスだから、ゴミカスrubyが合ってる
889uy:2012/06/21(木) 23:46:48.34
お前いつまで続けんのそれ
お前にuyの名は背負えない
890uy:2012/06/21(木) 23:58:49.61
偽物がいるが話を続ける
そもそも言語に難易度などない
それすら分からない奴らは下級ゴミカス
891uy:2012/06/22(金) 00:15:21.65
ゴミ
892uy:2012/06/22(金) 01:06:36.66
ゴミ
893uy:2012/06/22(金) 02:11:30.49
ゴミ
894uy:2012/06/22(金) 04:55:44.31
ゴミ
895デフォルトの名無しさん:2012/06/22(金) 05:51:17.97
人柱ねぇwどんだけあのクソコードをダウンロードした奴がいて、
質問なりこれすげぇ言ったのがいることやら。
流されちゃ人柱にもならねぇよ、役立たず。って本望だからいいのかw
896デフォルトの名無しさん:2012/06/22(金) 05:59:06.02
【クラウド化】 Yahooファーストサーバ上のDBやサイボウズOfficeなど全データ消失する大惨事、倒産・死者数不明 ★5
http://engawa.2ch.net/test/read.cgi/poverty/1340306216/


どんなプログラム作っても
人間が馬鹿だから意味ないな
897デフォルトの名無しさん:2012/06/22(金) 07:24:27.18
まさにゆとり
898デフォルトの名無しさん:2012/06/22(金) 08:03:41.86
人は、有能/無能と勤勉/怠惰の組み合わせで4タイプに分けられる
それぞれのタイプ別に

有能で勤勉: Lisp, Python
有能で怠惰: Haskell, OCaml
無能で勤勉: Ruby, PHP
無能で怠惰: Java, C#

に代表される言語を使うのが向いている
899デフォルトの名無しさん:2012/06/22(金) 08:21:15.58
そこにPythonはねーわ
900デフォルトの名無しさん:2012/06/22(金) 09:10:34.32
分類させると、どんな言語使って、どんな言語を嫌って、
どんな言語を知らないのか良く分かる。
901デフォルトの名無しさん:2012/06/22(金) 09:45:37.61
動的言語のメリットって、つくづく無いよな。
前にも書いたけど、C++だろうがJavaだろうが、
辞書クラス使えば、簡単に動的言語相当のことは出来るからな。

動的言語は、実行時に色々なことを解決するから動的なわけだけど、
そういうコードは静的言語でも書けるんだよ。
実行時の動作を制御するのはプログラミング言語の本分だからな。

逆に
静的言語は、コンパイル/リンク時に色々なことを解決するから静的言語なわけだけど、
そういうコードは動的言語では書けないんだよ。
コンパイラ自体にそういう機能が無いことには、どうやっても無理。
902デフォルトの名無しさん:2012/06/22(金) 09:55:55.31
「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)から。
903デフォルトの名無しさん:2012/06/22(金) 10:10:41.21
>>901
コンパイル時にできると思ったがよく考えると実行時でしかできないことがある。
両者を区別すると、どちら側に分類するか判断を誤ることがある。

よく似た例として
動作が変わらない修正 (リファクタリング) と動作が変わる修正を区別すると混乱する。
すべての修正を同じものとして扱うなら混乱しない。
904デフォルトの名無しさん:2012/06/22(金) 10:22:31.57
intで出来ると思ったがよく考えるとlong long intでしか出来ないことがある。
両者を区別すると、どちらを使うか判断を誤ることがある。

ってことですか?
それはちょっと低脳過ぎやしませんか。
905デフォルトの名無しさん:2012/06/22(金) 10:30:20.15
UTF16と思ったらUTF32だったとか
906uy:2012/06/22(金) 14:39:46.35
>>895
お前は効率を理解できないなら黙ってれば?
俺はあのソースコードと3つほどの概念を公開してから1年ネット全体の様子を見た
質問者には全ての知識を与えるつもりで教えた
しかし何も変わった様子が無いから、仕方ねーから俺がやってやるかってだけ
完璧と非完璧と擬似完璧がわかるまで二度と話かけるなよ
907uy:2012/06/22(金) 14:41:48.92
そもそもアレはrubyですら書けてないと何度いえばわかるんだ

どうてみてもPython用だぞアレは
しかし他の部分おいてrubyがPythonを凌駕しているから仕方なく
endの数十連続にもコメントをつけて耐えているだけ
やれなくは無い
908uy:2012/06/22(金) 14:43:29.71
で、俺はラムダ計算を知った時にデジャヴがあった
ここまでいえばわかると思うが
そういう事なんだろ
チャーチ数でプログラム組めない奴はだまれかす
909デフォルトの名無しさん:2012/06/22(金) 15:01:25.08
 THE 発 狂
910デフォルトの名無しさん:2012/06/22(金) 15:12:34.06
で、誰も相手にしてくれなかったと。
よかったじゃないか、uyを相手にしないのがあのコだけじゃなくてよww
911デフォルトの名無しさん:2012/06/22(金) 15:14:32.37
これで本望だな、役立たずw
912uy:2012/06/22(金) 15:23:36.81
確かに俺は役立たずのゴミカスだ
これは認めよう
だが俺はエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
913デフォルトの名無しさん:2012/06/22(金) 15:29:54.31
ゴミカス中のゴミカスってことだろ。
914デフォルトの名無しさん:2012/06/22(金) 16:42:13.84
チャーチ数やYコンビネータって役にたたないけど、
それはそれとして、そういうの書くのが苦手な言語って
ようは処理を抽象化する能力に劣るってことだよな。
915uy:2012/06/22(金) 17:32:45.34
役に立たないのではなく
どう使ったらいいか人間がバカすぎてわからないだけ

人は数字に弱く、再帰構文にはもっと弱い
916デフォルトの名無しさん:2012/06/22(金) 17:39:00.78
uyが役立たずなのは本人の言う通りだな。
917uy:2012/06/22(金) 18:00:59.76
俺はゴミカスだから
人を使うより人にこき使われる存在でありたい
918デフォルトの名無しさん:2012/06/22(金) 18:25:39.90
処理を抽象化する能力が高い→テスト工数が増大
919デフォルトの名無しさん:2012/06/22(金) 19:50:44.73
処理を抽象化する能力の否定 = コピペプログラムの肯定
920デフォルトの名無しさん:2012/06/22(金) 19:57:38.72
抽象化って、この星が数千万年後に星ごと消滅することだろw
921uy:2012/06/22(金) 19:59:58.16
>>920
数千万年後には>>920この書き込みすら残ってない
データの1バイトも残ってない
922デフォルトの名無しさん:2012/06/22(金) 20:00:18.14
エクストリームメタプログラミングで本人以外メンテ不能END
923デフォルトの名無しさん:2012/06/22(金) 20:07:12.91
int main(){
ruby_eval("...");
}
924デフォルトの名無しさん:2012/06/22(金) 20:19:46.63
ここで抽象化を笑ってる奴らも、
デザインパターンを否定されたら
顔真っ赤にして怒りそう
925デフォルトの名無しさん:2012/06/22(金) 20:22:35.41
デザインパターンが単なる名前付けに過ぎないということさえ理解してないのがバレバレ
926デフォルトの名無しさん:2012/06/22(金) 20:23:50.18
え?意味分からん
927uy:2012/06/22(金) 20:24:33.47
ゴミ
928デフォルトの名無しさん:2012/06/22(金) 20:24:42.48
>処理を抽象化する能力が高い→テスト工数が増大
抽象化ってのは、関数を使って同じ処理を纏めたり、
インターフェースを使って、データを抽象化したりすることだから、
テスト工数が増大したりはしないよ。むしろ減るはず。
動的言語を使うと、「インターフェースが適切に抽象化されたか」の
テストが必要になるからテスト工数が増えるけどね。
ダックタイピングだから、メソッド名typoしててもコンパイラが指摘してくれない。
929デフォルトの名無しさん:2012/06/22(金) 20:27:46.92
>>926
デザインパターンを否定されて顔真っ赤にする奴も
デザインパターンを抽象化の文脈で出す奴も
どちらも勘違いしたアホだということ

分からなくておk
930デフォルトの名無しさん:2012/06/22(金) 20:31:30.20
デザインパターンは、決まりきったパターンなのに
そのパターンをマクロやメタプログラム等で抽象化できずに
繰り返すアホ的行為が多々見られるときに
そのパターンに付けられる名前

ちゃんと抽象化に反している
931デフォルトの名無しさん:2012/06/22(金) 20:36:19.10
たしかに、デザインパターンが決まりきった雛形なら、
その雛形をテンプレート化してしまえば、
パターンじゃなくて、クラスライブラリだからな。
パターンって言葉は反復重複って意味合いを内包しているわけだから、
プログラミング的には悪い意味だわな。
932uy:2012/06/22(金) 20:42:51.65
ゴミ
933デフォルトの名無しさん:2012/06/22(金) 20:48:36.21
エクストリームメタプログラミングで本人以外メンテ不能END
934デフォルトの名無しさん:2012/06/22(金) 21:06:49.42
コピペしまくって破綻END(例:特許庁基幹システム開発)
935uy:2012/06/22(金) 21:07:24.90
使いたくないならギャーギャー騒がずに、動的言語使わなければいいな
普段から使ってる奴が、使っていく上で気づいた欠点指摘ならまだしも
936uy:2012/06/22(金) 21:10:24.90
いくら仕事で静的言語しか使わせてもらえないからって
妄想を垂れ流され続けられても迷惑である
937デフォルトの名無しさん:2012/06/22(金) 22:07:40.90
>>931
こうですよね?

たしかに、アルゴリズムが決まりきった雛形なら、
その雛形をテンプレート化してしまえば、
パターンじゃなくて、アルゴリズムライブラリだからな。
パターンって言葉は反復重複って意味合いを内包しているわけだから、
プログラミング的には悪い意味だわな。
938デフォルトの名無しさん:2012/06/22(金) 22:11:20.53
ん?アルゴリズムはアルゴリズムパターンとは言わんから、
後半のパターンって言葉に対する突っ込みは正しくパクれてないんじゃ。
しかもアルゴリズムも有名どころは関数化もしくはテンプレート化されてるだろ。
クイックソートとか。
939デフォルトの名無しさん:2012/06/22(金) 22:13:01.60
アルゴリズムってのは実装コードなんだよね。
デザインパターンってのは、実装コードを
どう組み合わせるかという話で実装コードではないから
的外れだな。

同じパターン書いたって、同じコード書かないし。
940uy:2012/06/22(金) 22:25:22.17
あ、そろそろアレ出てくるの?
>>641
こういう「リファクタリングを世に広めた人」とかいう感じの

「デザインパターンを世に広めた人」とかいう奴

でてくるの? 
941デフォルトの名無しさん:2012/06/22(金) 22:29:29.49
そりゃこれだけ普及してるんだから
広めた人はいるだろうね。
942デフォルトの名無しさん:2012/06/22(金) 22:30:09.34
コンピュータを広めた人だって
アルゴリズムを広めた人だっているよ。

そういう人は素直に尊敬するべきである。
943uy:2012/06/22(金) 22:41:16.86
>>942
君が尊敬してるのは何人いんの?全員名前覚えて尊敬してんの?
944uy:2012/06/22(金) 22:50:09.79
リファクタリングとデザインパターンを世の中に広めたのは俺だ
その根拠をこれから説明していく
耳をかっぽじってよく聞けよ
945デフォルトの名無しさん:2012/06/22(金) 22:54:02.11
       ____
     /─   ─\ ホジホジ
   / (●) (●) \
  /::::::⌒(__人__)⌒::::: \   
  |    mj |ー'´      |   穴をかっぽじるんだな
  \  〈__ノ      / 
    ノ  ノ
946uy ◆pdu1UZmweE :2012/06/23(土) 00:06:01.90
死ね
947デフォルトの名無しさん:2012/06/23(土) 03:41:21.66
死ね
948デフォルトの名無しさん:2012/06/23(土) 04:48:44.60
>>939
> 同じパターン書いたって、同じコード書かないし。

もし比較関数を引数として渡せなかったら
ソートアルゴリズムもこう言われてただろう
比較関数は毎回違うからな
949デフォルトの名無しさん:2012/06/23(土) 04:57:46.01
違うのは比較関数だけだなw
950デフォルトの名無しさん:2012/06/23(土) 05:04:15.20
ファーストクラスの関数が無い言語だと、
比較関数を渡すだけでも冗長なコードが必要になる
当然そのコードは決まりきったパターンを持つ

Strategyパターンである
951デフォルトの名無しさん:2012/06/23(土) 05:42:32.60
> 比較関数を渡すだけでも冗長なコードが必要になる
たかだか100バイト程度だろ?
そんなに何度も比較するのか?
冗長な部分はコピペでいいよな?
952デフォルトの名無しさん:2012/06/23(土) 05:48:36.43
100バイト入力するのに30秒ぐらい差がつく。

もし比較関数を1000個書けば、
8時間以上も差がつくわけだが。
953デフォルトの名無しさん:2012/06/23(土) 05:53:58.48
コピペは後に響くだろうから嫌だしなあ
954デフォルトの名無しさん:2012/06/23(土) 05:55:03.27
そんなに入力するなら、コードジェネレータとか
設定ファイルからの読み込みか作るわw

下手に短く書ける言語って
その場で書いて関数にしようとしないよな。
で同じようなコードがたくさんできると。
955デフォルトの名無しさん:2012/06/23(土) 06:01:46.01
> そんなに入力するなら、コードジェネレータとか
> 設定ファイルからの読み込みか作るわw

そして行き着いたのがXML地獄ですね
956デフォルトの名無しさん:2012/06/23(土) 06:04:27.67
XMLがいやなら、他の形式にすればいいじゃない?
頭が硬いね。
957uy:2012/06/23(土) 06:09:49.52
下手に短くかける言語っていうのは、
「短く書く為の」構文が既に最初から処理系に備わっているわけで
それは静的言語使ってる奴が一生懸命使いやすいように作った関数が、最初からあるみたいな、そういう次元
静的言語はよく動的言語には最初からあるものの車輪の再発明をしている


設定ファイル(笑)
って
プログラミングにおいての最終手段だよな
ああ、こういうのを無能な働きものっていうのか、確かに言語の機能内で上手に出来ない事があるからって
ソースコード外まで安易に散らかすような奴は処刑するしかない
958uy:2012/06/23(土) 06:13:16.57
XMLがいやなら、他の形式にすればいいじゃないwwww

頭悪いね。
959デフォルトの名無しさん:2012/06/23(土) 06:14:59.42
一方、頭の柔らかい人は
そんなものに設定ファイルなんて不要な
短く書ける言語を使った
960デフォルトの名無しさん:2012/06/23(土) 06:21:52.73
設定ファイルの形式をXML以外にしよう
-> どうせなら設定ファイルにプログラムも書けるようにしよう
-> 凄く短く書けるようになったので、設定ファイルに全部書くようにしよう
-> 動的言語の誕生
961uy:2012/06/23(土) 06:27:25.48
>>960
それ俺がC++しか使ってない頃に設定ファイル使って、そこから動的言語に辿り着いた時の思考だわ、懐かしい

静的言語厨はリアルでその頃の俺のレベルで停滞してる奴がいそうだからかかわりたくない
962uy:2012/06/23(土) 07:01:51.83
まあ俺は停滞どころか急降下してるが
963デフォルトの名無しさん:2012/06/23(土) 07:13:17.05
C++しか使ってない頃ww
Cの課題ができなくて泣いた前かw
964uy:2012/06/23(土) 07:20:05.36
ゴミ
965デフォルトの名無しさん:2012/06/23(土) 07:22:31.83
静的言語に都合の悪い流れになると
uyを攻撃してウヤムヤにする
というデザインパターン
966uy:2012/06/23(土) 07:43:39.59
俺はゴミカスだがエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
967デフォルトの名無しさん:2012/06/23(土) 08:54:41.92
静的言語が都合が悪くなるわけないじゃん。
辞書クラス使えば静的言語でも動的言語相当なプログラミングできるんだから。
静的言語⊃動的言語
968uy:2012/06/23(土) 09:06:18.34
静的言語はゴミ
969デフォルトの名無しさん:2012/06/23(土) 09:10:02.43
動的言語は静的言語の機能削減版でしかないのに。
970uy:2012/06/23(土) 09:12:50.97
ゴミ
971デフォルトの名無しさん:2012/06/23(土) 09:16:24.81
動的言語は設定ファイル代わり使われるのがお似合い
972デフォルトの名無しさん:2012/06/23(土) 09:18:03.45
反論できなくなったからってww
動的言語の機能を持った、ハイブリッドな静的言語ってあまり見ない。
あってもよさそうなのに。なぜ無いか。
それは、辞書クラス使えば簡単に同等のことが出来るからwww
逆に動的言語ではどう逆立ちしたって静的言語と同等のことが出来ない。
なぜならコンパイラにそういう機能が備わってないから。
手抜きコンパイラww
973デフォルトの名無しさん:2012/06/23(土) 09:19:14.93
設定ファイルや小物に向いているものを大規模開発に使った結果が>>1の有様
974デフォルトの名無しさん:2012/06/23(土) 09:23:57.02
静的言語の素晴らしさを実証するために
Javaでコンビネータを書こうとしたが
あまりの冗長さに断念した……

「原理的に出来る」と「簡単に出来る」の差をまざまざと見せつけられた……
975デフォルトの名無しさん:2012/06/23(土) 09:24:34.18
静的言語⊃動的言語
動的な制御は静的言語でも出来る。
静的な制御は動的言語では無理。
分かりやすく言い換えれば、
実行時の制御は静的言語でも出来る。
コンパイル時の制御は動的言語では出来ない。

コンパイル時の制御をしようと思ったら、
コンパイラに元々静的に制御する機能がないと無理。
その機能を端折った手抜き版が動的言語。
976デフォルトの名無しさん:2012/06/23(土) 09:28:18.69
>>974
書こうとする前に気付けよw
Cプリプロセッサで関数型プログラミングモドキを試みるくらいアホだな
977デフォルトの名無しさん:2012/06/23(土) 09:29:07.92
手段が目的になってる典型
978デフォルトの名無しさん:2012/06/23(土) 09:30:34.14
ホントだよなwww
Javaが抽象化能力に劣ってるのは有名だろww
型注釈がうざいだけじゃ、あんなに冗長にはならないっつーの
979デフォルトの名無しさん:2012/06/23(土) 09:31:46.55
え?辞書クラスで楽勝なんでしょ?
980デフォルトの名無しさん:2012/06/23(土) 09:33:37.07
楽勝でしょう
obj["name"]
981デフォルトの名無しさん:2012/06/23(土) 09:40:48.60
CプリプロセッサやC++テンプレート、JavaやC#のIDEによる自動生成
これらコードジェネレータは言語が抽象化能力に劣るという欠点を補うもの

一方、動的言語は抽象化が高いことによるパフォーマンスの低下や
コンパイラによるチェックの不在を補えないのであった

結果、世界で広く使われるのはCを初めとする静的言語
982デフォルトの名無しさん:2012/06/23(土) 09:41:10.84
まあRubyで1分くらいで書けるコードだから、
Javaが1/10の生産性だとしても、10分で書けるな

さあ、ideone.comにコードを貼るんだ
983uy:2012/06/23(土) 09:43:31.62
ゴミ
984デフォルトの名無しさん:2012/06/23(土) 10:57:44.38
>>972
Objective-Cくらいじゃね?
型付きのLisp変種とか
985デフォルトの名無しさん:2012/06/23(土) 11:05:00.87
辞書クラスぐらい殆どの言語にあるだろ。
986デフォルトの名無しさん:2012/06/23(土) 11:24:35.59
>>975
じゃあコンパイル時と実行時だけでなく起動時に大規模な処理をする言語は偉いのか?
987デフォルトの名無しさん:2012/06/23(土) 11:32:51.95
何言ってんだ
988デフォルトの名無しさん:2012/06/23(土) 11:38:45.74
起動時「やられたようだな」
終了時「最弱」
コンパイル時「」
989uy:2012/06/23(土) 12:21:10.53
>>963
そのネタ飽きないよな・・・
俺はまず学校にはいった時点では既にC,C++,少量のPerlの知識まではあったわけで
宿題や課題とか一瞬で終わるから1つも家に持って帰った記憶が無いし
何のことを言ってるんだコイツ
ガキの書いたネタレスに釣られちゃったのか?w
batとPerlでCの宿題用のソースメタしてた記憶しかない
990uy:2012/06/23(土) 12:23:00.35
その後さらにちょっといくと設定ファイルと動的言語の共通点に気づいて
uy言語とかOS作ってた時期だったな ruby入る直前にやってた
ある意味その頃が一番の全盛期
そこでお前らとの差が一気に広がってしまった

お前らみたいに何年間も同じようなプログラミング続けてる奴と違うから俺は
今でこそrubyだけどほんの数年前はガチでC++/WinAPI、アセンブラ、Perl
そこを通過した俺が動的言語を是としているんだから察しろよ
いつまでも同じ場所で立ち止まってないで

成長が遅いゴミカスはまずは黙って先人に従え
991デフォルトの名無しさん:2012/06/23(土) 12:26:32.06
設定ファイルにはDSL使うわ。
そして、静的言語の機能縮小版のRubyの出番はないわ。
992uy ◆xVOGOO9ev6 :2012/06/23(土) 12:26:57.94
カスは苦しみ続ければよいのではないか

最近、静的言語厨の書き込みが悲鳴にしか見えない・・・w


違うだろwww
仕事で使うプログラミング言語がwww
効率がでるとかwwでないとかwww関係ねーからwww
コードジェネレータwwwwww
関数にまとめるwwwwwwwwww
現実を見ろとしかいえない


関数にまとめるwwwwwwwwwwwwwwwwwwwwwwワロタwwwwwwwwwwww

関数にまとめてろwwwwwwwwwwwww
993デフォルトの名無しさん:2012/06/23(土) 12:28:15.50
都合が悪くなると発狂してみせる。
994uy ◆xVOGOO9ev6 :2012/06/23(土) 12:29:56.27
>>991
設定ファイルwwwwwwwwwwww

そもそも設定ファイルはアルゴリズムには直結しないデータを入れろよ
普通は定数関係のみだろwwwwww

設定ファイル内にアルゴリズムが必要になったらそれはもう「プラグイン」だから

バカが>>954
セッテイファイルカラノヨミコミカツクルワw
とかいってるけど

ソースコード外まで散らかす奴は追放したほうが良い
そんな案を出す奴も追放したほうが良い
初心者だと自覚のないこういう奴は追放したほうが良い
995uy:2012/06/23(土) 12:30:48.96
俺はエリートゴミカスだ

お前らは黙って俺について来い
996uy ◆xVOGOO9ev6 :2012/06/23(土) 12:31:59.37
設定ファイルwwwwwwwwwマジワロタwwwwwwwwww

設定ファイルwwwwwwとして関数にまとめるwwwwwwwwwwwww


時代が止まってんだな
発想の問題なのかもなぁ

俺はC++で一度設定ファイルフルに使わざるをえないプログラム作成した時に
真っ先にスクリプト化がよぎって、すぐに動的言語に着ちゃったけど

ここのプロセスに10年かけるやつもいるって事だ・・・
997デフォルトの名無しさん:2012/06/23(土) 12:33:05.77
だから、動的言語は静的言語の機能縮小版だから、
動的言語で出来ることは静的言語でも出来るわけだから、
いつまでたっても静的言語の優位性は揺るがないんだよ。
998uy ◆xVOGOO9ev6 :2012/06/23(土) 12:34:36.16
>>997
プププwwwww

そう思うなら動的言語使わなくていいからwwww黙って静的言語使ってろよwwww
プッギャアアアアアアwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

マジ素で言ってそうだから面白いwwwwwwwwwwwwwwww
999デフォルトの名無しさん:2012/06/23(土) 12:34:57.20
都合が悪くなると発狂してみせる。
1000uy ◆xVOGOO9ev6 :2012/06/23(土) 12:35:29.68
俺は動的言語の問題点をいくつあげてもwwwww
静的言語よりはマシだと確信してるわwwwwwwwwwwwwwwwww


静的言語の問題点をなぜ挙げないかって??

見放してるから、問題点を指摘さえしないってことだよwwwwwwwwwww
気づけバカwwwwwwwwwwwwwww
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。