トップページ⇒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/
0053デフォルトの名無しさん2012/02/12(日) 19:13:43.62
「現在Rubyは、Webサイトでの利用が中心となっているが、
ここから領域を広げるためには、HPC(high performance computing)と組み込み機器への対応が必要」

「情報家電やロボット、ゲーム機などあらゆるものにRubyを搭載したい」〜まつもとゆきひろ氏 -クラウド Watch
http://cloud.watch.impress.co.jp/docs/event/20110906_475426.html
2011/9/6 06:00
0054デフォルトの名無しさん2012/02/12(日) 19:25:26.62
Riteはどうなってるんだろ
Luaと勝負できるようなのが出来たらいいんだけど
0055デフォルトの名無しさん2012/02/12(日) 19:59:18.41
>>53
Twitterに何も書かれてない記事初めて見たwww
0056デフォルトの名無しさん2012/02/16(木) 16:33:32.18
Riteって性能ではLuaには及ばないのでは?
LuaJITには到底かなわなさそう

モジュラー構造で機能の取捨選択が出来て
メモリフットプリントを小さくすることにより
組み込み機器に乗せることが可能にし
「組み込み機器もRubyで制御できればいいね」
を実現するのが主目的なんじゃないの
0057デフォルトの名無しさん2012/03/12(月) 02:16:27.09
まつもとゆきひろ「public static void mainなど、コンピュータに伝える約束事が多くて、
やりたいことが頭の中から逃げてしまう。簡潔さは力なのです(中略)
“実行可能疑似言語”と呼ばれる何言語でもないコードが示されることが多い。
それはPascalもどきとか、Algolもどきで書いてある。
もどきといっても、アルゴリズムをちゃんと記述できている。
だったら、それを理解できる言語を作ればいいじゃん、ということで、ある意味、それがRubyの目標です」

「ソフトウェアは工業製品ではない」、Rubyのまつもと氏が講演 − @IT
http://www.atmarkit.co.jp/news/200904/10/matz.html
2009/04/10

メタ言語のことで、一般にBNFやBN記法と略される
バッカス・ナウア記法 − Wikipedia
0058デフォルトの名無しさん2012/03/25(日) 21:24:50.39
matz大激怒!こんな糞コミッタ−しか育たないんならRuby開発なんて意味ないね
http://ikura.2ch.net/test/read.cgi/bread/1325584365/
0059デフォルトの名無しさん2012/03/25(日) 21:43:02.48
パンじゃつれねーだろ
0060デフォルトの名無しさん2012/03/26(月) 06:20:06.74
やっぱミミズか?
0061 忍法帖【Lv=37,xxxPT】 2012/04/06(金) 20:47:27.53
何かに認定されたってね。おめでとう。
0062デフォルトの名無しさん2012/04/25(水) 11:47:19.88
mrubyについての話題無し?

初代にくらべ笹田さんの実装がいくらか効率的なんだろうけど、
なんかやっぱMatzに実装してもらいたい気がしてたからいいニュースだった。
Matzも血が騒いだのかもしれん。
0063デフォルトの名無しさん2012/04/25(水) 20:05:18.55
初心者スレで、これからはmrubyのほうを学べきでしょうか、という
いかにも初心者な質問が出てたくらい。
動かしてみたい人は勝手に拾ってきてコンパイルしてるだろうし、
webやら日々のスクリプティングにはあんまり関係ないしな。
0064デフォルトの名無しさん2012/04/26(木) 20:50:39.59
エディタのマクロ言語なんかもmrubyの担当領域になるのかね。
0065デフォルトの名無しさん2012/04/27(金) 00:54:27.36
>>64
特にPC上で使う利点あるっけ?
0066デフォルトの名無しさん2012/04/27(金) 01:02:52.42
いや、アプリに組み込むインタプリタって意味で。
0067デフォルトの名無しさん2012/04/27(金) 01:20:14.88
冷蔵庫に付いてる伝言機能用エディタに組込むならいいと思う
0068デフォルトの名無しさん2012/04/27(金) 01:31:05.62
と思ったが、20MHz の ROM 128K じゃ無理か
ttp://www.semicon.panasonic.co.jp/micom/apply/0402.html

最近のテレビくらいになると Linux カーネル載せてたりするみたいだし十分動くんじゃね
0069デフォルトの名無しさん2012/04/27(金) 02:09:46.28
>>64
エディタぐらいであれば、
フルスペックのRubyを組み込んでもいいんじゃないのかなあ
0070デフォルトの名無しさん2012/04/27(金) 09:58:08.31
emacsにおけるelispの位置をえるためには、
rmacsが必要だなw
0071デフォルトの名無しさん2012/04/28(土) 16:25:28.51
1.9.2p290はファイルを読むとき CR,LF,CR+LF を改行扱いしてたけど
1.9.3p194だと CR が改行扱いされないのはなんか方針が変わった?
Windows7でRubyInstaller使用
0072デフォルトの名無しさん2012/04/28(土) 18:57:53.00
Rubyって今からやるならver何使えばいいん?
0073デフォルトの名無しさん2012/04/28(土) 21:16:54.39
mruby
0074デフォルトの名無しさん2012/04/28(土) 21:27:10.92
1.9.3の最新使っとけ
mrubyはそれが何なのか自分で理解できる奴以外には不要。
0075デフォルトの名無しさん2012/04/28(土) 22:11:27.20
2013年までは1.8.7を使うのが吉だな。互換性問題に悩まなくて済む。
0076デフォルトの名無しさん2012/04/28(土) 22:14:57.53
>>72
rvmで1.9.3
>>75
2013年でそれまでに作ったものがゴミになるかもしれないだろ
0077デフォルトの名無しさん2012/04/28(土) 22:25:40.89
勉強してる間に即腐敗する1.9系よりまし。
0078デフォルトの名無しさん2012/04/29(日) 00:22:06.75
どっちも覚えろよ
Rubyにかぎらずこの業界一生そんなもんだ
0079デフォルトの名無しさん2012/04/29(日) 00:23:38.87
馬鹿には無理
0080デフォルトの名無しさん2012/04/29(日) 00:31:25.11
バージョンごとに互換性がないのはRubyとPHPくらいなものです
0081デフォルトの名無しさん2012/04/29(日) 00:36:25.27
>>80
それは、あなたが3つしか
言語を知らないということですか?
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
まじめに始まってすらいないと思う
変わり続けてるせいか、枯れた技術だとはとてもいえない
■ このスレッドは過去ログ倉庫に格納されています