トップページ⇒tech
984コメント268KB

Rubyについて Part47

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/01/16(月) 13:15:31.00
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお

前スレ
Ruby 初心者スレッド Part 46
http://hibari.2ch.net/test/read.cgi/tech/1317790320/


るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
0082デフォルトの名無しさん2012/04/29(日) 00:42:40.71
受注ベースで仕事してるなら非互換はむしろ仕事のチャンス
0083デフォルトの名無しさん2012/04/29(日) 00:51:25.40
>>81
他にあるならあげて見てくれないか?
もちろん仕事で使える言語で
0084デフォルトの名無しさん2012/04/29(日) 01:01:10.35
>>83
Python 3が後方互換性を捨てても求めたもの − @IT
http://www.atmarkit.co.jp/fcoding/articles/python3/01/python301a.html
0085デフォルトの名無しさん2012/04/29(日) 01:03:59.09
パイソンはまだ前科一般だからRubyやPHPと一緒にするのはかわいそう
0086デフォルトの名無しさん2012/04/29(日) 01:05:09.62
前科一般とか関係ない。

事実は事実。
0087デフォルトの名無しさん2012/04/29(日) 01:07:11.00
漏れはまだPython3使ってないから関係ないや
0088デフォルトの名無しさん2012/04/29(日) 01:08:12.90
だから3つしか知らないんだろうなと言った。
0089デフォルトの名無しさん2012/04/29(日) 01:10:09.06
RubyとPHPとPythonは後方互換性がない
他は安心
0090デフォルトの名無しさん2012/04/29(日) 01:12:55.25
>>89
必死すぎw
0091デフォルトの名無しさん2012/04/29(日) 01:15:25.68
全部スレチだろ。煽るだけなら黙ってろ
0092デフォルトの名無しさん2012/04/29(日) 09:49:02.20
だから一々そんなの気にしないで全部おぼえろっつってんのに
0093デフォルトの名無しさん2012/04/29(日) 09:52:12.62
1.8用のプログラムはもはやゴミだよな…手元で動かすのがだるいだるい。
JRubyとかですらデフォルトが1.9モードになってしまった。
0094デフォルトの名無しさん2012/04/29(日) 10:15:53.01
つうかC言語のソースコードだって大昔にかかれた奴って
今のコンパイラじゃコンパイル通らなくね?

>>78
それだと思う
本来ならば根幹の主軸を誰も動かさず
根幹を丁寧に作り、その上に少しずつでも資産を積み重ねたほうが数億倍いいんだけど

まだ誰も「正確に」根幹を作れていない
だから結局、流れの中で生きていくしかない
技術が廃れる前に覚えるという学習速度こそが最も大事、

さらに先にいけば、新しい有望な言語や技術が出てきたときに入門書や書籍が書いたら即売れるような時期に
調べてすぐにかいてしまったり、上手く採用してしまうレベルの奴が金儲けをしていく
0095デフォルトの名無しさん2012/04/29(日) 11:39:01.63
本質本質って言い続けてるだけの奴っているよな
0096デフォルトの名無しさん2012/04/29(日) 11:53:30.29
> つうかC言語のソースコードだって大昔にかかれた奴って
> 今のコンパイラじゃコンパイル通らなくね?

Rubyはつい最近の話だから問題。
0097デフォルトの名無しさん2012/04/29(日) 14:19:11.83
それなりに互換性には気を使ってるCでも
K&R C→C89→C99の過程でも非互換性は発生してるので……
究極的には、「完璧な」仕様と実装の処理系を出せばいいんだろうけど
それこそ無茶言うなって感じではあるし
0098デフォルトの名無しさん2012/04/29(日) 14:54:48.93
そういう意味ではISO/IEC 30170:2012はまずい流れなんでしょうかね
ANSI以前のCなんて方言だらけだっただろうし、規格が無いならそれも当然だと割りきれる
けど、一度規格作っちゃったら互換性を蔑ろにはできないような…
0099デフォルトの名無しさん2012/04/29(日) 15:42:55.84
枯れた言語が好きなら、common lispにしときなさい。^^;
0100デフォルトの名無しさん2012/04/29(日) 15:45:02.93
>>98
ちゃんと規格票を読んでないんだが、
あれはRubyの最小部分のセットを定義してあるだけで
しかも実装依存の部分が大量にあった気がする

matzもRubyの将来的な発展を妨げない形での規格化と言ってたと思う
0101uy2012/04/29(日) 16:01:22.48
変わっていけばいいじゃん
文句たれてるやつは、変わらないものが好きなんじゃなく「変われない」だけ
0102デフォルトの名無しさん2012/04/29(日) 16:04:36.27
あんまり先鋭的にいきがると
後で自分の首しまるよね
0103デフォルトの名無しさん2012/04/29(日) 16:16:24.64
でもMatzどころかGuidoもオプソであるからにはmove or dieだそうだ
0104uy2012/04/29(日) 22:07:12.20
Ruby中学生がんばってるね
俺が人に興味を持つのは珍しい事である
あのレベルならあと5年後には、俺から見ても「優秀」と言えるレベルになってくれるかもしれない
今のレベルはまだまだだ
ブログにコードはあげてるが、所詮生きてきた時間が短いのでネタがない
人に読ませる為の文章をかいたり、ブログに大勢にとって有益な情報をかいて発信するネタがな
まだあれは、人に読ませる為のコードではなく、自分はこんなことも出来るよレベルのソースコード
だがあせる事はないそこまで出来たらハッカーや
0105デフォルトの名無しさん2012/04/29(日) 22:08:38.51
昭和の頃覚えたアセンブラとC言語
これがあったから
いまだに自分が損な業界で飯を食ってる
0106デフォルトの名無しさん2012/04/29(日) 22:13:55.36
高校生の妹にRubyを教えてるんだけど何から教えたら良いかわからん…
インターネットみたいなの作りたいんだけど…とかいうレベル
0107デフォルトの名無しさん2012/04/29(日) 22:14:32.52
matz服を脱ぎます
0108デフォルトの名無しさん2012/04/29(日) 22:22:54.01
着衣は既に脱いでおる
0109デフォルトの名無しさん2012/04/29(日) 22:39:26.48
まずその服を脱いだ妹とやらをうpすればいいと思う
0110デフォルトの名無しさん2012/04/29(日) 23:04:35.94
開発環境と本だけ与えて放置するとか?
0111デフォルトの名無しさん2012/04/29(日) 23:09:17.46
服も着せてやれよ
0112デフォルトの名無しさん2012/04/29(日) 23:10:19.62
馬鹿には無理
0113デフォルトの名無しさん2012/04/29(日) 23:43:01.66
jk.strip! if jk.cute?
0114デフォルトの名無しさん2012/04/29(日) 23:51:03.03
Rubyって、日本語の5c問題とかで、文字化けは無いと思ってて良い?
0115デフォルトの名無しさん2012/04/30(月) 00:12:30.46
草加
0116デフォルトの名無しさん2012/04/30(月) 07:01:34.90
>>114
Rubyは、日本人がつくったから問題は発生しないとおもったらだめです(バージョンによっては、がっかりすることもある。安心できない)
Ruby 1.9.3をつかいます(安心できるはずなんだけど…)
0117デフォルトの名無しさん2012/04/30(月) 07:11:12.27
>>114
理屈的には絶対に起こらない
が、たぶん、あなたが期待しているような感じで自動で判別されて自動で解釈されて自動で変換されて自動で防止されるわけではない
0118デフォルトの名無しさん2012/04/30(月) 07:15:23.26
>>114
問題が発生したら、もっと具体的にかいてください
0119デフォルトの名無しさん2012/04/30(月) 07:26:09.84
>>117
> あなたが期待しているような感じで自動で判別されて自動で解釈されて自動で変換されて自動で防止されるわけではない
まあ求められてるのはそのへんなんだろうな
この処理は(または、この文字列は)Shift_JIS(という名のCP932またはWindows31-J)です、という指定はできるが、
その指定が「正しい」かどうかまで追試はしてくれないし、出力や外部コマンドに渡したときにきちんと動作するかまでも保証できない
0120uy2012/04/30(月) 13:52:56.77
require "kconv"
require "open-uri"

open("http://toro.2ch.net/test/read.cgi/tech/1328648447/895").read \
.toutf8 \
=~ /(見えない人と会話しないでください.*?)\</
puts $1

こういう風にネットからページ等ダウンロードして正規表現かけるようなコードでよく突っかかって毎回思うんですが
=~ するときに
Stringをutf8(または今のソースコードの標準文字コード)に暗黙的に変換すると何か問題あったりするんですか?
.toutf8 かくのが無駄なような気がしてなりません?
utf16とかutf64とかutf512であれば、toutf8に変換したらよくないのも分かりますけど、
sjisやeuc程度の雑魚カス文字コードなんて特殊参謀のutf8様に勝てる日は来ないんじゃないですかね
0121デフォルトの名無しさん2012/04/30(月) 14:39:12.82
とりえあえず妹にはRailsでウェブアプリを作ってもらう事にしましたよ
ありきたりだけど付箋でペタペタ貼付けられるようなコルクボードみたいなのを作ってもらおう
0122デフォルトの名無しさん2012/04/30(月) 14:42:51.51
じゃあコルクボードには私が
0123デフォルトの名無しさん2012/04/30(月) 14:51:08.84
現行でも文字化けさせる方法はないでもない

irb> "test".gsub(/t/,"表A".encode('Shift_JIS').force_encoding('BINARY')).encode('UTF-8','Shift_JIS')
=> "表Aes表A"
irb> "test".gsub(/t/,"表0".encode('Shift_JIS').force_encoding('BINARY')).encode('UTF-8','Shift_JIS')
=> "付es付"
irb> "test".gsub(/t/,"表1".encode('Shift_JIS').force_encoding('BINARY')).encode('UTF-8','Shift_JIS')
Encoding::InvalidByteSequenceError: incomplete "\x95" on Shift_JIS

Shift_JIS系列で「表0」と書いたものをバイナリとして扱ってる文字列(Ruby1.9ではレアだが、たとえばRuby1.8でとか)を
subやgsubの第2引数に指定するとなにがなんだかわからない感じに化ける
理由を答えることができたらRuby初級脱出
0124uy2012/05/01(火) 17:42:06.33
Ruby-Tkをexe化できるものってない?
ocraでも無理だったんだけど?
0125デフォルトの名無しさん2012/05/01(火) 18:38:30.61
1.9.3、いい感じです。1.9.2で培ったバッドノウハウもようやく捨てられそう
0126デフォルトの名無しさん2012/05/01(火) 23:20:47.29
mrubyってISO/IEC 30170に従ってるの?
0127デフォルトの名無しさん2012/05/02(水) 02:54:52.11
ここもかつての勢いが無くなったな
0128デフォルトの名無しさん2012/05/02(水) 07:00:15.78
妹って書き込むと一瞬伸びる
0129デフォルトの名無しさん2012/05/02(水) 07:23:53.86
俺の妹がこんなにmatzなわけがない
0130デフォルトの名無しさん2012/05/02(水) 12:47:31.49
>>129
リアル妹なぞそんなもん
現実を受け入れろ
0131デフォルトの名無しさん2012/05/02(水) 13:05:04.07
mrubyって高速だったりはしないの?
0132デフォルトの名無しさん2012/05/02(水) 13:39:04.62
省メモリ方向には工夫されてるかもね。
メモリをダァッと使って高速化するようなことはしてないだろうな。
0133デフォルトの名無しさん2012/05/02(水) 14:52:47.09
mrubyでゲーム系のスクリプトもRubyになってくれるとうれしいんだけどな
RPGツクールは昔からRubyだけどなんか変なバージョンだ
0134デフォルトの名無しさん2012/05/02(水) 17:43:15.52
今でさえ1.8の資産はゴミとか言われてるのに、本当にゲーム系に採用してほしいのか?
0135デフォルトの名無しさん2012/05/02(水) 17:49:46.07
> 1.8の資産はゴミとか言われてる

本当に? ってまずお前に聞きたいなw
0136デフォルトの名無しさん2012/05/02(水) 17:55:21.14
>>133
「完全無編集」のRuby処理系を提供しなければならない理由はなにもない
Ruby1.8.5ベースだろうがRuby1.9.3ベースだろうがJRubyベースだろうがmrubyベースだろうが、
「本家とは違う処理をするruby」を添付するのは、ライセンスさえ守れば自由だ

過去、手を加えたruby処理系を提供した実績があるのなら、
たとえmrubyベースであっても「巷のmruby」とはちょっと違ったものになる可能性は高い
0137デフォルトの名無しさん2012/05/02(水) 18:02:05.64
しかし、昔は「スクリプト言語」と呼ばれて割り切った使い方をされていたのが、
これほど一応真面目に言語として評価されるようになった点は、評価していいのでは。

まだperlが生まれて25年しか経ってないよ。
昔はCと比較することなど憚られるような時代だったし
0138デフォルトの名無しさん2012/05/02(水) 18:06:10.76
コンピュータ全体の歴史からいえば25年ってのは相当経ってる方だと思うよ。
0139uy2012/05/02(水) 19:26:56.87
俺からするとマシン性能が良い時代からプログラミング始めたから
なんでスクリプト言語でプログラミングしない奴がいるのか未だに分からない
よくそこら辺の議論でのサンプルコードで
別に言語指定したわけじゃないのに
C言語やJAVAでこれ見よがしに綺麗に(笑)かかれたソースコード上げてる奴って
もしかして全部同じ奴なの?
スクリプト言語を知っていれば、議論での言語指定がない場合において
わざわざ冗長な言語でサンプルコードを書く意味がないことくらい分かるはずなのに、不思議
0140デフォルトの名無しさん2012/05/02(水) 19:58:59.25
最近のツクールのRubyは1.9ベースなんだなぁ。
0141デフォルトの名無しさん2012/05/02(水) 20:19:12.81
>>140
VXだかその次のだかで1.9ベースになったんだったっけね。
0142デフォルトの名無しさん2012/05/02(水) 20:35:11.78
もう1.9.3より前は忘れてくれ…
0143デフォルトの名無しさん2012/05/02(水) 20:36:05.59
後10年は1.8.7使いますよruby
0144デフォルトの名無しさん2012/05/02(水) 20:42:29.12
Ruby1.4.6を使ってるうちのシステムはどうすれば…('A`)
0145デフォルトの名無しさん2012/05/02(水) 22:19:12.08
別に好きにしたらいいのでは
わかってやってるなら別に何の問題もないと思うし
ただセキュリティ的に対外用のシステムにはどうかとは思うけど
0146デフォルトの名無しさん2012/05/02(水) 23:33:29.96
ツクールのライセンスはどうなっているか謎なんだよな
ツクールがGPLってことはないだろうし
0147デフォルトの名無しさん2012/05/03(木) 11:26:45.78
ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32]
をビルドしてみた
1.9.3p125の不具合直ってるかなぁと調べてたら

シングルクォート文字列のマルチバイト文字直前の\の挙動が修正されて
’\あ’ が 「あ」 ではなくて正しく「\あ」になる
が、しかし
"\あ" が 「\あ」 になる エンバグorz
#coding:cp932
puts '\!\y\あ' # => \!\y\あ
puts "\!\y\あ" # => !y\あ

ついでにビルドしてみた ruby 2.0.0dev (2012-04-30 trunk 35500) [i386-mingw32] だと
#coding:cp932
puts '\!\y\あ' # => \!\y\あ
puts "\!\y\あ" # => !yあ
これが、正しい挙動のはず
0148デフォルトの名無しさん2012/05/03(木) 14:42:51.87
https://bugs.ruby-lang.org/issues/6069
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_9_3/parse.y?view=log
見比べたら34776はマージされてて34796はマージされてないな
それで困る奴は要望出してみれば
0149デフォルトの名無しさん2012/05/03(木) 18:29:42.64
ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32]
影響の少なそうな不具合について
修正されたもの
・ブロック無しでIO.foreachを呼ぶとオプションハッシュのモード指定が無視される
IO.foreach('foo',mode:'rb'){|line| } だとモード指定が有効で
IO.foreach('foo',mode:'rb') だとモード指定が無視されてたのが直った

Windows環境だけと思うけど
・Dirオブジェクトのinspectが読めない(常にUTF-8 バイト列が出てくる)
Dir.openに渡したパスがSJISならSJISでinspectされるようになった
UTF-8で渡したものはUTF-8でinspectされるので
依然としてコマンドプロンプトでは読めないが、これはしかたないかな


修正されてないもの
・IO.read foreach readlines writeでオプションハッシュ binmode:trueを渡すとエラー
2.0.0snapshotでは直ってた
0150デフォルトの名無しさん2012/05/03(木) 22:07:23.17
1.9.3からかWindowsのコマンドプロンプトで
puts "日本語".encode('UTF-8')
$stderr.puts "日本語".encode('UTF-8')
てしてもcp932でちゃんと読めるように表示される
リダイレクトしたりパイプしたりで
コンソール以外に出力するとUTF-8になる

オブジェクトのinspect表示は
p Struct.new(:foo).new("日本語".encode('UTF-8')) # => #<struct foo="\u65E5\u672C\u8A9E">
cp932で表示できるようにエスケープされてる

エラーメッセージ
"日本語".encode('UTF-8').hogehoge # => undefined method `hogehoge' for "\u65E5\u672C\u8A9E":String (NoMethodError)
cp932で表示できるようにエスケープされたUTF-8文字列が出てくる

raise "日本語".encode('UTF-8') # => 譌・譛ャ隱・(RuntimeError)
UTF-8が直に表示されて化ける

まちまちだな
0151デフォルトの名無しさん2012/05/04(金) 14:44:44.55
こ、こんなスレがまだあったんだ・・・

Rubyなんて終わったものだと思ってた。
0152デフォルトの名無しさん2012/05/04(金) 15:19:49.88
まだ始まってませんよ?
0153uy2012/05/04(金) 15:40:58.06
まじめに始まってすらいないと思う
変わり続けてるせいか、枯れた技術だとはとてもいえない
0154デフォルトの名無しさん2012/05/04(金) 16:19:17.89
枯れないために変わり続けてるんだ
0155デフォルトの名無しさん2012/05/04(金) 18:37:18.48
Ruby1.9.1とか1.9.2とかで動かないgem大杉w
もう切り捨てられてるのかw
1.9.3にしたら全部すんなり動いたはw
0156デフォルトの名無しさん2012/05/04(金) 20:20:13.57
王道のRubyに加え、エンプラ分野ではJRuby、組込ではmrubyとどこでもRubyできる時代になってきたな。
0157デフォルトの名無しさん2012/05/04(金) 20:35:34.78
器用貧乏
0158デフォルトの名無しさん2012/05/04(金) 20:44:54.05
エンプラはJRubyってのはどういう理屈なの?
エンプラで実績のあるJVM, Javaのライブラリを使えるからとか?
0159デフォルトの名無しさん2012/05/04(金) 20:50:04.74
世の中で普及しているのは、
なんでもできる言語ではなく
特定の分野でずば抜けている言語です。
0160デフォルトの名無しさん2012/05/04(金) 20:53:24.02
何でもできるのと何処でも動くのとは違うだらう
0161デフォルトの名無しさん2012/05/04(金) 21:41:11.93
ブラウザでも動くようにしてくれ
0162デフォルトの名無しさん2012/05/04(金) 21:43:52.38
rubylet誕生のきっかけである
0163デフォルトの名無しさん2012/05/04(金) 22:03:23.02
mrubyってluaみたいなポジションのrubyだっけ
0164デフォルトの名無しさん2012/05/04(金) 22:12:29.29
JavaScript実装がなかなか良いのが出てこないの。
まぁなんのメリットもないからしょうがないかw
0165デフォルトの名無しさん2012/05/04(金) 22:40:07.63
JavaScriptにメリットがないからな
0166デフォルトの名無しさん2012/05/04(金) 23:49:54.90
>>163
Matzは「ライバルはLua」と言ってた気がする
組み込みやすいRubyという事で、
ある部分では競合するだろう
0167デフォルトの名無しさん2012/05/05(土) 00:10:48.84
くやしいが、 mruby が性能でLuaに勝つのはかなり厳しいな…。
言語としてはRubyのほうが圧勝なんだから、性能比較に持ち込まれないように気をつけないと。
0168デフォルトの名無しさん2012/05/05(土) 00:18:27.49
性能比較されたら負けだとおもってる
0169デフォルトの名無しさん2012/05/05(土) 00:19:37.03
Apacheモジュールのmod_luaと性能がどうのこうの言ってる人がいるけど何がしたいのか全く理解できない
人の趣味にどうこう口出すつもりはないけど...
無益だなぁとため息がでる
0170デフォルトの名無しさん2012/05/05(土) 00:31:01.97
組込の例で、ライバルとの性能比較がしたかったんだろ?
他人の愚痴に口を出す気はないけれど...
そんなことも理解できないなんて無能だなぁってため息が出る
0171デフォルトの名無しさん2012/05/05(土) 00:34:23.84
検討材料すら揃えられないんじゃ勝ち負け以前の問題だよ
0172デフォルトの名無しさん2012/05/05(土) 00:36:40.97
>>167
安定性と信頼性比較
0173デフォルトの名無しさん2012/05/05(土) 03:33:20.10
導入するにあたって性能比較するのは別に何の問題もないのでは・・・
たとえそれでmrubyの方がluaより低かったとしても程度によってはrubyの書きやすさを取るって判断するかもしれないし。
許容出来ないぐらい遅かったら採用見送るのは当然だと思うし。
0174デフォルトの名無しさん2012/05/05(土) 03:45:28.91
>>169
お前のほうが無益だから心配するなw
0175uy2012/05/05(土) 04:12:03.25
それよりも並列処理で完全に劣るんでしょ
0176デフォルトの名無しさん2012/05/05(土) 04:31:04.14
暇ができたらmruby用のJITコンパイラ書きたいな
0177デフォルトの名無しさん2012/05/05(土) 08:38:08.84
アセンブリに触れたらC99の範囲で書いた意味がないだろ
0178デフォルトの名無しさん2012/05/05(土) 08:41:32.29
Civの.pyに対抗して
コーエー三國志のAIを.rb弄ってカスタマイズできるようにしてくれ
0179デフォルトの名無しさん2012/05/05(土) 10:39:57.00
civ4はpythonで、civ5はたしかluaだったな。
吉里吉里とかの紙芝居ゲームスクリプトがrubyで書けたら特定方面で
受けるかも知れん。
0180デフォルトの名無しさん2012/05/05(土) 11:15:33.74
速度の話題はRubyでは禁忌
0181デフォルトの名無しさん2012/05/05(土) 11:25:21.24
>>177
インタプリタのレベルで評価実行すると、どうしてもひと回り遅くなるから
速度を求めるならJITで機械語に落とすのは有力なアプローチだよ
0182デフォルトの名無しさん2012/05/05(土) 12:33:41.09
いまさらだけどtrap::Hashの回避策ってブロック使うのがいいと思うんだけど

h = Hash.new([])
h[0] << 0
h[1] << 1
p h #=> {}
p h.default #=> [0, 1]

h = Hash.new{|h,k| h[k]=[]}
h[0] << 0
h[1] << 1
p h #=> {0=>[0], 1=>[1]}
p h.default #=> nil

■ このスレッドは過去ログ倉庫に格納されています