トップページ⇒tech
981コメント267KB

Rubyについて Part48

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/09/20(木) 08:04:39.36
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。

= 前スレ
Rubyについて Part 47
http://toro.2ch.net/test/read.cgi/tech/1326687331/
0488デフォルトの名無しさん2013/03/16(土) 21:12:26.37
refinementsいまごろ入れるなら、クラスをデフォルトで変更不可にしたほうがよくない?
大規模だとぜったいそっちのほうがいい
Rubyなんだから後方互換とか捨ててもいいでしょ
0489デフォルトの名無しさん2013/03/16(土) 21:15:53.93
>>488
大規模じゃない場合は?
0490デフォルトの名無しさん2013/03/16(土) 21:31:30.06
結局朝鮮人って何も生み出せないよな
ただ人のものパクってばっかりで
0491デフォルトの名無しさん2013/03/16(土) 21:32:40.23
RSpecのDSLっぷりにワラタ
0492デフォルトの名無しさん2013/03/16(土) 22:06:17.28
RubyよりPHPのほうが圧倒的に高速で動くのにわざわざRubyを選ぶ理由とは
0493デフォルトの名無しさん2013/03/16(土) 22:18:38.45
Ruby資格のGOLDってSilverと比してどんぐらい難しい?
机上の勉強だけしてSilver取れたなら同じ様な勉強だけで取れるレベル?
勉強して実際あれこれいじくりまわして経験つまないと無理なレベル?
0494デフォルトの名無しさん2013/03/16(土) 22:21:22.40
机上の勉強 < あれこれいじくりまわす

わかってるじゃないかw
0495デフォルトの名無しさん2013/03/16(土) 22:26:08.96
>>493
最近Goldに合格したけど、結構難しかった。
Silverで役に立った公式の練習問題がほとんど役に立たなかった。
0496デフォルトの名無しさん2013/03/16(土) 22:26:34.43
>>494
つまり後者って事かthx
サファイヤに比べると全然ティンと来る比較出てないから
簡単に取れるならとりあえずGoldを、そうでもないなら一気にサファイヤ目指そうかと考えてる
資格で物は作れないが物を作る事を任せてもらう為には重要だからな
0497デフォルトの名無しさん2013/03/16(土) 22:29:12.40
>>495
実体験報告ありがとう
つまり新規に勉強しなおす覚悟が必要な程度には難しいのね・・・
うーん、Goldスルーしてサファイヤ目指すかな
基本的に兼ねてるんだろうしベンダ系は高いからなぁ
0498デフォルトの名無しさん2013/03/16(土) 22:30:17.09
高いだけで意味が無い。
0499デフォルトの名無しさん2013/03/16(土) 22:40:45.06
>>497
サファイヤってのはよく知らないけど、
Goldに関しては、Silverを兼ねているというものではなく、
SilverとGoldの両方に合格して、はじめてRuby認定技術者Goldとして認定されるよ。
0500デフォルトの名無しさん2013/03/16(土) 22:41:59.30
>>498
ベンダだって自分とこの社長や人売り営業の考え次第では、自分を売り込む効果があったりするんだ
資格も糞も問わねーから奴隷売ってくれー!ってな底辺地獄に売られる危険は減る
0501デフォルトの名無しさん2013/03/16(土) 22:52:57.46
そもそもRubyの資格そのものが意味なしw
ゆるキャラ検定のほうがマシなレベルw
0502デフォルトの名無しさん2013/03/16(土) 23:15:13.68
意味がないならまだしも持ってると恥ずかしい資格。
0503デフォルトの名無しさん2013/03/16(土) 23:20:02.16
資格保持者に対する醜い嫉妬が渦巻くスレですね。
0504デフォルトの名無しさん2013/03/16(土) 23:31:12.00
>>503
Ruby資格を馬鹿にする奴はいるが嫉妬する奴は存在しない
0505デフォルトの名無しさん2013/03/16(土) 23:31:23.51
サファイヤ? このネタ記事?
http://melborne.github.com/2012/04/20/ruby-reference-index-is-renewed/

それともプラチナのこと?
Ruby Association Certified Ruby Programmer Platinum (仮称):
策定中
http://www.ruby.or.jp/ja/certification/examination/

俺もGoldは腕試しで合格したが、Silver受けてないから認定は貰えてない。
0506デフォルトの名無しさん2013/03/16(土) 23:32:15.23
学校きらい、試験イヤ
0507デフォルトの名無しさん2013/03/16(土) 23:40:49.28
Ruby()
0508デフォルトの名無しさん2013/03/16(土) 23:47:51.93
俺はGoldに合格するのために学んだ知識が日々ものすごく役にたってる。
Silverは受けてない。
Goldの後にSilverを受けて何か得るものがあるのかな?
なぜ両方合格しないと認定されないのか不思議でしかたがない。
0509デフォルトの名無しさん2013/03/16(土) 23:53:53.86
ゼニー
0510デフォルトの名無しさん2013/03/16(土) 23:56:20.31
ですよね〜
0511デフォルトの名無しさん2013/03/17(日) 01:04:15.97
金儲けのために踊らされてるruby厨
役に立たない言語を必死で覚えて
0512デフォルトの名無しさん2013/03/17(日) 05:39:36.58
俺はPHPとRuby両方やったがPHPのほうが良いという結論に達した。
0513デフォルトの名無しさん2013/03/17(日) 07:37:31.73
>>489
大規模じゃなくてもrefine指定したもののみ変更可能ってしたほうが良いよ
0514デフォルトの名無しさん2013/03/17(日) 07:56:57.67
refinementを変更可/不可の視点で捉えてる時点で
なんも分かってないっていうかアホ
0515デフォルトの名無しさん2013/03/17(日) 17:02:18.19
つーかRuby使ってる時点でアホ
0516デフォルトの名無しさん2013/03/17(日) 18:07:33.72
>>514
これいれるくらいならオープンクラス辞めろって話
矛盾した機能だ
0517デフォルトの名無しさん2013/03/17(日) 20:17:41.53
refinementはじき外されるだろ。
設計が悪すぎて、たいして使い処がない上に、
ただでさえ遅いRubyの足を引っ張ることしかしてない。
0518デフォルトの名無しさん2013/03/17(日) 20:33:54.89
>>516
オープンクラスは超強力ですがその分リスクもあります。
それを refinement によって制御し、リスクを下げようとしているのであり、
矛盾はしていないと思います。

これによって今まで共存させられなかったライブラリを共存させられるように
なったら、素敵だと思います。
0519デフォルトの名無しさん2013/03/17(日) 22:16:46.55
>>517
Rubyの設計や実装が悪いのは今に始まったことじゃないが?
0520デフォルトの名無しさん2013/03/18(月) 02:35:08.56
Rubyはむしろ言語仕様だけで勝負した言語
0521デフォルトの名無しさん2013/03/18(月) 02:41:17.74
桐島、Rubyやめるってよ
http://htn.to/9GrwNV
0522デフォルトの名無しさん2013/03/18(月) 06:38:49.86
>>518
マジで言ってる?
同じ名前のメソッドがあるが実装が違うっていう状態が起きまくってバグ多発の予感しかしない
0523デフォルトの名無しさん2013/03/18(月) 07:13:16.49
なんでRubyってNumeric#maxがないの
いちいち配列作るのは無駄だとおもうんだけど
0524デフォルトの名無しさん2013/03/18(月) 08:05:34.12
>>523
「配列を作る」の意味がよく解らんかったが、
複数の数の中の最大値を求めるメソッドか。

※ 最初、Bignumがあるのに上限値があるわきゃねーじゃん、と思った。

単一の数でmaxもminもないだろ、という以上の答えはないと思うので、
不満ならmatzを説得してください。
0525デフォルトの名無しさん2013/03/18(月) 08:44:39.23
>>522
用法・用量によってくると思います。
一つのプロジェクトの中で場所によって using 対象が頻繁に異なっていたら混乱しそうですね。
その点に注意して using を利用すれば、メリットだけ享受できるのではないでしょうか?
05265232013/03/18(月) 09:20:34.33
他の言語ならだいたいMath.max(a, b)があるのにRubyってそれもないよね
なんでもかんでも機能つめこんでる言語だから無いのに違和感ある
0527デフォルトの名無しさん2013/03/18(月) 09:34:42.25
rubyはおもちゃ
言語で遊ぶのが目的化してるから
自分でmax実装するのが楽しい人向け
0528デフォルトの名無しさん2013/03/18(月) 09:59:25.05
Enumerable#maxはそんなになかったことにしたいんですかと
Math.max(a, b)に拘るって、2つの数値しか比較したくないんですかと
0529デフォルトの名無しさん2013/03/18(月) 10:01:12.64
機能は詰め込んでも見た目の一意性はしっかりしてるのがRubyだ。
強めの型付けでバグも防げるナイスな言語
0530デフォルトの名無しさん2013/03/18(月) 10:12:19.73
>>528
いやだから2つの値を比べたい場合にわざわざ配列つくって比較するのが無駄じゃねといいたいんだけど
0531デフォルトの名無しさん2013/03/18(月) 10:19:22.64
puts [a , b].max
と
puts max(a , b)
がそんなに違うのか?
0532デフォルトの名無しさん2013/03/18(月) 10:30:04.04
配列作るのが「わざわざ」で「無駄」なら
Math.て頭につけるのは「理にかなった」ことなのか?「何度でも書かせていただきます」とでも?
0533デフォルトの名無しさん2013/03/18(月) 11:05:03.03
>>532
Mathへのアクセスと、無駄な配列生成とどっちがコスト高かわからんとかバカか?
ただでさえ糞遅いRubyをどうしてさらに負荷をかけて使いたがるのかわからん。
0534デフォルトの名無しさん2013/03/18(月) 11:10:57.72
字面しか気にしない奴ばかりだから言っても無駄
0535デフォルトの名無しさん2013/03/18(月) 13:54:56.64
比べる値が2つと決まっていて、速度を気にするのであれば、
a < b ? b : a
と書けば max メソッドを呼び出すコストもなくなるのでより速いかと。

>>533
Rubyはそんなに遅いですか?
CやC++と比べたら大きな差があると思いますが、スクリプト言語なので
ある程度は仕方がないのでは?
状況に応じて適切な言語を選択すれば良いと思います。
0536デフォルトの名無しさん2013/03/18(月) 14:37:47.85
もちろん定数Mathクラスへアクセスして内部でうんにゃらするほうが遅いよね
爆速なのはトップレベルだけで、クラスやモジュールがネストされるほど遅くなる
配列リテラル書いて付属のインスタンスメソッド呼ぶほうが速いというか、Math.maxでやることはたぶん配列生成とメソッド呼び出しで、ある意味二度手間
0537デフォルトの名無しさん2013/03/18(月) 15:10:30.04
多分じゃなくてソース見て来いよ
0538デフォルトの名無しさん2013/03/18(月) 15:10:54.53
ごめんちゃんと読んでなかったわ
0539デフォルトの名無しさん2013/03/18(月) 15:13:05.82
>>537=>>538ね。
なんかスレ荒れすぎててちゃんと読まず、パッと単語を拾って反応してしまった。謝ります。
0540デフォルトの名無しさん2013/03/18(月) 16:21:44.90
>>535
Ruby が糞遅いのは動的だからじゃなくて単に実装がタコだからってだけなんで
Ruby よりはるかに動的なのに爆速な v8 さんとかに謝れ!
0541デフォルトの名無しさん2013/03/18(月) 18:47:50.89
実装がタコとか言ってるけど、Rubyのソースコードを理解した上で批判してんだよな?
0542デフォルトの名無しさん2013/03/18(月) 20:20:07.22
何この馬鹿?
0543デフォルトの名無しさん2013/03/18(月) 20:32:40.41
>>535
それをやるとbかaで計算してる場合に2度計算するのは無駄だから一時的に変数に代入しなきゃいけなくなるだろ
だからa.max(b)があれば便利なのにって言ってんの
0544デフォルトの名無しさん2013/03/18(月) 20:42:16.14
>>541
お前には無理
0545デフォルトの名無しさん2013/03/18(月) 21:36:36.30
>>540
「糞遅い」と言う根拠が依然としてわかりませんが、
Rubyはまだまだ速くなる可能性を秘めているということですよね。
だとしたら素晴らしいですね。
良い情報をありがとうございます。

>>543
確かに配列オブジェクトを生成しなくて済む分 [a, b].max と書くよりも
速いですし、一時的に(明示的に)代入する手間も省けますね。
ですがもし速度を求めるのであれば、一時的に変数に代入をしてでも
>>535 の様に書いた方が速いはずです。
また、a と b しか登場しないのに max というメソッド名なのは、
ちょっと変な気がします。
とりあえず、自分で Comparable モジュールに定義しておくと便利かもしれませんね。
0546デフォルトの名無しさん2013/03/19(火) 05:05:44.88
>>525
それだとギリギリ許容できるかな
やはりrefineを使う場合はオープンクラスを禁止するのを同時にやらないと破綻すると思う
0547デフォルトの名無しさん2013/03/19(火) 11:25:15.56
>>546
やっとモンキーパッチが絶滅するのか…長かった
0548デフォルトの名無しさん2013/03/19(火) 15:58:52.45
Rubyのgemにモジュールあげる人、ちゃんとテスト書いてくれよ
RSpecとかあってもDeveloperがちゃんと書かないと意味ない
0549デフォルトの名無しさん2013/03/19(火) 22:14:36.38
>>548
最近、specディレクトリはあるけどほとんど空っての多いよね
gemのテストで参考になるやつ教えてください
0550デフォルトの名無しさん2013/03/20(水) 00:09:39.46
>>533
そもそもその程度のオーバーヘッド気になるならCで書き直すかな
Rubyは遅いのを承知の上で、書き下す楽さを優先する時に選ぶってのが基本かと

頭の中を整理するために、そんなアホな書き方許容する言語ねーよw…な擬似言語でコード書いたら
あれれそれが動いちゃうよ、マジで?みたいな言語がRubyだと思うの
0551デフォルトの名無しさん2013/03/20(水) 01:12:51.99
>>549
自分が参考にしたのはrackかな
Webのローレイヤーの勉強にもなるし、オススメ
0552デフォルトの名無しさん2013/03/20(水) 01:40:30.14
Rackのは本気で仕様定義に使ってるからな。
0553デフォルトの名無しさん2013/03/20(水) 02:03:02.75
>>550みたいなのもう飽きたな。
誰が言い出したんだろうね。
もはやRubyのステレオタイプだわ。
0554デフォルトの名無しさん2013/03/20(水) 02:19:59.55
>>553
作者がそう公言してるのに、誰が?ってことはないだろ。
0555デフォルトの名無しさん2013/03/20(水) 02:30:05.95
rubyの速度で問題でるサービスなんて少数だろ
だからといってJava使うかという話
0556デフォルトの名無しさん2013/03/20(水) 02:56:43.50
全世界で何十万回と言われてる気がするんだが、実行時の速度とCPU/メモリ効率の良さが重要ならCで書くといい
ほとんどの場面で現状ほぼ最高最速なものを作ることができる(目の前のあなたにそれが可能かどうかは知らない)
実行時の速度とCPU/メモリ効率の良さが別に重要でないのなら、"Cのコードを生成・再利用"する二次的プログラム言語で書くといい
つまりスクリプト言語だ
0557デフォルトの名無しさん2013/03/20(水) 03:15:42.90
プログラムには性能を要求される部分とそうでない部分が
混在する場合も多い。
そうした場合、一部をスクリプトで、一部をC/C++で書く。
Rubyの弱点はランタイムと言語仕様の複雑さであり、
そこらへんでシンプルイズベストなPythonやLuaに対して
C/C++との連携が悪い。mrubyも大きいと感じる。
0558デフォルトの名無しさん2013/03/20(水) 03:42:45.96
今時、遅い部分はCで書けというのはC拡張のこと?
そんなもんとっくにやってる
一番問題なのは並列性能とIOの性能でしょ
まあ、それでもJRubyとPumaでよいと思う
0559デフォルトの名無しさん2013/03/20(水) 03:57:33.31
JVM起動しっぱなしが可能なのならJRubyも選択肢だな

普通のWebサーバやデスクトップ用途ではJVM出しっぱは現実的ではないので
JRubyをコマンドラインから起動して遅いとか文句言わないこと
0560デフォルトの名無しさん2013/03/20(水) 05:50:23.18
>>551
なるほどrackか
読んでみる
0561デフォルトの名無しさん2013/03/20(水) 16:18:15.68
Ruby以外でコードを書きたくないでござる
でも書かなきゃいけないでござる
面倒でござる
0562デフォルトの名無しさん2013/03/20(水) 18:23:41.35
1.8以外でコードを書きたくないでござる
今から1.9覚えるのに10年かかるでござる

そしてこうですかわかりません><
0563デフォルトの名無しさん2013/03/20(水) 18:29:13.50
流石に10年はかからんだろwww
0564デフォルトの名無しさん2013/03/20(水) 18:32:12.28
まあ習得に年単位かかるほど別言語なみに変化しているのは事実
0565デフォルトの名無しさん2013/03/20(水) 22:04:17.38
>>564
お前Ruby習得すんのに何年かかったんだw
0566デフォルトの名無しさん2013/03/20(水) 22:05:42.34
Ruby=Railsっていう、今の流れは嫌い
使うだけなら誰でもできるし、Rubyで使えるライブラリー書いてる人、
コミッタ以外でいないよね
0567デフォルトの名無しさん2013/03/20(水) 22:12:26.41
>Rubyで使えるライブラリー書いてる人、
>コミッタ以外でいないよね
いや、別に?
0568デフォルトの名無しさん2013/03/20(水) 22:20:33.33
>>566
努力したがどういう主張か理解できない
0569デフォルトの名無しさん2013/03/20(水) 22:33:46.03
aptやyum使って周囲の環境と依存関係キープしてるのに
gemってオレサマシステムがぶち壊しか
0570デフォルトの名無しさん2013/03/20(水) 22:34:15.52
>>564
文字列とIO周りさえ押さえれば、だいたい何とかなるんじゃない?
1.8→1.9最大の破壊的変更はM17N対応だから
0571デフォルトの名無しさん2013/03/20(水) 23:32:28.03
>>569
言語ごとに独自のパッケージングシステムやビルドシステムを用意する最近の傾向は誰が流行らせたんだろうね。
PerlのCPANは昔からだけど、Rubyのgemとrake、Javaのantやmaven、Pythonのeasy_install、scalaのsbazとsbt。。。
ほんとうっとうしい
0572デフォルトの名無しさん2013/03/20(水) 23:33:36.08
1.8から1.9でそこまで変わってるか?
エンコーディングまわりも異なるエンコーディングが混在してなければ問題ないはずだし
0573デフォルトの名無しさん2013/03/21(木) 03:55:48.27
>>571
言語ごとにあるのは別にうっとうしくないし、理にかなってると思うけど。
JavaのMavenは糞でゴミで産廃でポンコツで無能で無意味で無価値だけど。
0574デフォルトの名無しさん2013/03/21(木) 04:49:57.20
>>571
Lucas Nussbaum乙
0575デフォルトの名無しさん2013/03/21(木) 06:11:51.33
rubyはrailsの専用言語(キリっ
0576デフォルトの名無しさん2013/03/21(木) 11:03:40.82
>>569
自分で、gem をも apt, yum の管理下におけばよいではないか?
0577デフォルトの名無しさん2013/03/21(木) 11:47:40.59
apt, yum が新旧好きなバージョンを切り替えたり
公式サイトで最新バージョンがリリースた直後に
すぐに入れられるならそうしてるさ。
あと最近では複数バージョンの同居も求められてるな。
0578デフォルトの名無しさん2013/03/21(木) 12:40:40.75
>>573
言語ごとのユーザにはいいんだろうけどね。
ツール使いたいだけのユーザには「easy_installでインストールしろ」「sconsをインストールしろ」は面倒でかなわん。
Rubyはgemやrakeが公式パッケージに含まれてるだけマシな方かもしれない。

aptやyumがLinux以外に使えて、かつもっと気楽ならいいのにね。
リポジトリを公開するのも、sources.listとかにリポジトリを追加するのも、心理的障壁がありすぎる。
0579デフォルトの名無しさん2013/03/21(木) 12:57:23.28
そんな面倒臭がり屋のあなたに
node.jsおぬぬめ
0580デフォルトの名無しさん2013/03/21(木) 13:26:24.10
node.jsもディストリ標準はフルすぎるからな。

正確にはnode.jsのバージョンの上がり方が
早すぎるといったほうがいいんだが
安定性など正当な理由があるために
ディストリのメジャーアップデート時以外では
新しいバージョンに入れ替えないだろう?

それはそれで正しいと思うから、
だからこそディストリに文句は言わず、
ディストリ標準のパッケージ管理システムを使わないんだよ。

これがディストリビューターも開発者も
両方が満足する方法じゃん。
0581デフォルトの名無しさん2013/03/21(木) 13:33:49.72
>>578
> aptやyumがLinux以外に使えて、かつもっと気楽ならいいのにね。

それ以前に方針が全く違う。

aptやyumはあくまで今使ってるシステムをメンテナンスするもの。
言語のライブラリを管理するものになっていない。

aptやyumを使うと、システムが変わってしまう。
そしてその方針はディストリの考え方に限定されてしまう。
システムの安定性のために必要なことだが、
アプリ開発にとってはただの制限でしかない。

Redhat系、Debian系、(ついでにWindows)などのシステムに依存しない
どの言語でも使える汎用の開発用ライブラリ管理ツールがあればいいとは思う。
でもシステムと開発アプリは別々に管理したい。

つまりこういうことさ。

プログラム言語系はディストリから外すべきなのでは
http://engawa.2ch.net/test/read.cgi/linux/1358608765/
0582デフォルトの名無しさん2013/03/21(木) 15:52:25.34
今時、言語のモジュールをOSのパッケージ管理システムでやろうとすのは、sysadminのエゴだと気がつこうよ
OSと言語のモジュールを密結合させてどうするの
0583デフォルトの名無しさん2013/03/21(木) 16:17:21.10
以外とWindows方式がよかったりするんじゃないかって思う。

OSの機能は使うけど必要最小限で
プログラムが使用するライブラリは実行ファイルと
同じディレクトリに格納するのが基本
あとはどのディレクトリに入れても動く。

WindowsはインストーラがGUIで操作することしか
考慮してないという問題があるけどね。
0584デフォルトの名無しさん2013/03/21(木) 16:24:50.57
なんだかんだいってアプリ開発者にとっては、bundlerが理想的だと思うよ
モジュールっていうのは、アプリごとに管理したいでしょ
systemのrubyつかってればいいsysadminは、自分でRPMパッケージ作ればいいんでは
0585デフォルトの名無しさん2013/03/21(木) 16:30:36.65
OSチームとアプリチームにわかれればいいんだよ。

OSとアプリは、どの組み合わせでも動くようにする。
0586はちみつ餃子 ◆8X2XSCHEME 2013/03/21(木) 16:39:03.30
>>583
Windows は別のソフトと依存関係がある場合に配布が面倒だよ。 簡単に解決しようとするとバンドルするしかない。
Raspberry Perl とか Haskell Platform なんか gcc がまるっと入ってるから両方にパスを通すとえらいことになる。
個別に入れる選択肢をとれないわけじゃないからそういうときは手間をかければいいだけではあるんだけどさ。
0587デフォルトの名無しさん2013/03/21(木) 16:39:28.44
> 簡単に解決しようとするとバンドルするしかない。
だからそれでいいと。
■ このスレッドは過去ログ倉庫に格納されています