1 :
デフォルトの名無しさん :
2006/02/24(金) 15:26:59
乙
前スレの 1000 イナバウアの AA で爆笑したよ。w
乙 人少なくなった?
8 :
デフォルトの名無しさん :2006/02/27(月) 14:20:26
Sync_mの使い方がいまいちわからないのだけど、 リーダーライターロック付きの配列を作るとしたら、こういう感じの使い方でいいの? -- require "sync" class RWArray include Sync_m def initialize(size) super @list = Array.new(size, 0) end def get(no) begin lock(Sync_m::SH) return @list[no] ensure unlock(Sync_m::SH) end end def set(no, val) begin lock() @list[no] = val ensure unlock() end end end
いいんじゃない? どうせなら、 def get(no) synchronize(SH) do @list[no] end end def set(no, val) synchronize(EX) do @list[no] = val end end かなあ、とは思うが。
Rubyも有名になったもんだ
----------------
http://comic6.2ch.net/test/read.cgi/doujin/1140974901/172 From: [172] 395 ◆veZNGgrqUc <sage>
Date: 2006/02/27(月) 15:27:31 ID:FyWv97xb
パッと見、AntiLoとは内部構造が大幅に違うようです。
というのも、今回のはRubyで書かれている様なんですね。
(AntiLoはDelphiのWin32ネイティブでした)
インタプリタなので、解析しにくい事この上ないです。
投稿する文字、ターゲットとなるスレッドの特定も一筋縄にはいかない?かもです。
↑ウィルスの作者乙
exerb製ですか。 誤認識とかMLに流れてなかったっけ?
これはひどい
def の引数部分に括弧が要らないことをはじめてしった。
def の引数部分に括弧をつけないスタイルで書く人というと・・・
コードが汚いのはともかく、真面目にデバッグした形跡とかあってワラタ
>#なんか知らんがエラー これにちょっとワロス。 こんな汚いソースでも何やってるかはわかりやすいRubyは凄いな。
>>21 そういえばあの人、Windows も使ってるし・・・
俺は誰か知らんけど、そんなことで疑い掛けられたら溜まったもんじゃねーな。 というか、疑いかける奴って永田レベルじゃん。
本人乙
ネタにマジレスされても…
でも疑われた方としては冗談じゃ済まなくなる可能性も無くはないわけで、 あまり趣味の良いネタとは言えんな。
永田議員もネタにマジレスされた気分なのだろうか
ネタがネタで済むか見抜ける人でないと(ネタレスをするのは)難しい
で、今回はネタで済んでるの?
判断できないならいつまでもひっぱらないのが吉。
でも疑われた方としては冗談じゃ済まなくなる可能性も無くはないわけで、 悪ノリはしない方がいいかもしれませんよ?>疑われた方
疑われた方ってどっち?
悪ノリって・・・。 コーディングスタイル如きで悪ノリとか言われたらたまったもんじゃねーな。
もはや何がなにやら。
まーた、サイト落ちてるのか。 RoR 効果もあるんだし、なんとかした方が良いんじゃないか?
どこのサイトが落ちてるの?
自分ところから繋がらないくらいで落ちてるとかアホ言ってんじゃねぇよ、素人かお前は!
まあ一時的に落ちてることはちょくちょくあるようなので、いちいち報告されてもなあという気はする。
元プログラマのソープ嬢がPerl、Pythonは知っているのに Rubyは知らないと言うのでチンコ萎えますた。
def procedure_foo ... tmp_ary.each { ... } end みたいなコードは結構書くと思うんだけど、 procedure_foo が tmp_ary を外に漏らしてしまうのが気になる。 かといって明示的に nil を返すのは面倒だしださいので避けたい。 そもそも Array#each が self を返すのを活用しているコードってあるの? one-liner とかがやりたがるのかな……。
>>44 > 漏れる
なるほど。今まで気付いてなかった。
ただ、
・漏れると困るケースなら明示的に nilを返す
・「漏れるのが気持ち悪い」くらいのケースなら、どうせ GC されるんで気にしない
でいいような。で、ほとんどが後者だと思う。
> Array#each が self を返す
・オレは使ったことがない
・まさに
>>44 の例みたいに、tmp_ary を返したい時に使ってるのを見たことはある。
・あとは ary.each{〜}.each{〜} とか。ほとんど見たことないけど。
>まさに
>>44 の例みたいに、tmp_ary を返したい時に使ってるのを見たことはある。
>>44 のコードではtmp_aryを返す意図があるようには見えないので
メンテナンス性に問題があるんじゃないかなぁ。
例えばtmp_ary.each { ... }の後に新たなコードを追加した時、
ちゃんとtmp_aryを返すようにするのを忘れるとか。
Array#eachは最終的なプログラムには頻出する重要なメソッドだから、
可読性を下げる嫌らしい使用例しか挙がらないようなら
仕様変更の希望を出してみてもいい気がする。
最終的なプログラムには頻出 → 最終的なプログラムにも頻出
仕様変更を出すほど(そしてMatzを説得できるほど)の nil を返すメリットや self を返すデメリットが思いつかない。 > Array#eachは最終的なプログラムにも頻出する のは確かだけど、その大部分は返り値がどっちでも問題ないわけで。
反対はしないけど賛成もしない。 行儀の悪いプログラム(やそれを許す仕様)がどれだけ憎いかは主観の問題だから、 希望出したい人は出してもいいんじゃない。通るかどうかはともかく。 しかしmatzを説得な。この程度じゃ確かに難しいかもね。 自分で思いついた仕様変更は多少の反対があろうと押し通すけど、 他人が提案した仕様変更には賛成の声があっても従わないことの多い人だから。 まあ、そこがmatzなんだが。
50 :
デフォルトの名無しさん :2006/03/02(木) 09:23:15
Matzを生暖かく見守るスレはここですか?
このスレも Mats に生暖かく見守られているわけだが
>>49 しょうがねぇじゃん、matzの作ったmatzの希望を満たすための言語なんだから。
今はユーザがいっぱいいるけどさ。
defの変わりにvoidを指定するようにすればすべて解決
ということにしたいのですね?
デフォルトで self を返すようにして欲しい。値を返したい場合は ^returnValue で。
それだと既存のコードの挙動変わりまくるだろw
じゃあ def* を追加してそっちで。
標準ライブラリでゴミ参照返してるメソッドってある?
>>44 は Array#each が何を返すべきと思うの? nil ?
62 :
44 :2006/03/02(木) 16:45:30
問題(なのかどうかは置いといて)は言語仕様であってeachの戻り値じゃないような・・・ eachさえ直せばOKって事?
break すると戻り値が nil になることを知ってて言ってる?
65 :
44 :2006/03/02(木) 17:12:42
>>63 言語仕様というよりライブラリ設計の慣習を問題にしてる。
俺の中での代表格が Array#each 。
each は制御構文さながらに使われることが多いから。
>>64 あー、なるほど。そういえばそうすね。
今は break が引数を取れるからそれ使った方がいいと思うけど、
互換性が思ったよりは問題になるかもしれないすね。
慣習の問題なら自分も最後にnilつける慣習を守ればいいじゃんw
ライブラリがユーザに対して妙な慣習や制約を課すのは原則としてダメだろ。 今回の話がどうかはともかく。
この話って、単に自分が Array#each が返す値を知らずに nil だと思い込んでて、現実がそうでなかったから文句を 言ってるだけに見えるんだけど。
仮にそうだとしても、改善の議論の種を投げるのはいいことだ。
本当にダメダメな提案だったらレスもつかないはずだし、
>>43 までの流れに比べればずっと有意義だ。
map もあんだしさ。値返すのが普通だと思うそんな俺は lisper。
>>70 俺も lisp かじってるから自然な動作だと思うんだけど…。
例えば、if のような制御構文だって値を返すんだから、繰り返しだけが
常に nil を返すってのは違和感があると思うけど。
ブロックの返り値を無視して問答無用で self を返すのがキモイと思うそんな俺も lisper 。 つーか手続き的なメソッドに lisp の philosophy はあわないんでないの。
おれも lisp は好きだけど、たとえば for-each の戻り値は未定義だし、 self を返すのは上手くないと思うな。 実際問題として、「each が self を返すこと」によるメリットを感じたことがない。
74 :
44 :2006/03/02(木) 18:49:07
>>68 今のところはまったことはない。
いい意味でも悪い意味でも純粋に精神衛生上の問題。
>>70 each が map の alias なら名前以外は納得。メモリの無駄遣いだが。
>>71 かといって常に self を返すってのも違和感があるんだよね。俺には。
利用価値がないなら、デフォルト値としての nil を返したほうがいいのではないかと。
if だって else 節を省略したときに返す値は nil だしね。
>>72 >ブロックの返り値を無視して問答無用で self を返すのがキモイ
それもある。同意。
if ary.each { |x| break if ... } then ... みたいなコードを書いてたことがあるけど、all?やany?の存在に気づいてやめた。
>>74 >利用価値がないなら、デフォルト値としての nil を返したほうがいいのではないかと。
利用価値がないと決め付けるのはいかがなものか。
>if だって else 節を省略したときに返す値は nil だしね。
え、else 節を省略して、かつ、if 節に入らなかったとき、だよね?
その場合 nil になるのは当然ではないかと。エラーでもいいけど。
ブロックの返り値の方がいいんじゃないか、とは俺も思う。
問答無用で nil を返すのは今よりもっとキモイので反対。
77 :
ヽ(´ー`)ノ ◆.ogCuANUcE :2006/03/02(木) 19:20:54
> if だって else 節を省略したときに返す値は nil だしね。
そりゃそもそもブロックが無いからでしょ。
if に与えられた条件が true だったらブロックの値を返すよ?
>>72 まぁ、なんで self なのかなぁとは思うな。
>>73 あー、while なんかも nil だしな…。
……でも、結局は Matz 次第だよな…。
78 :
44 :2006/03/02(木) 22:05:32
>>76 >利用価値がないと決め付けるのはいかがなものか。
ない『なら』だって。だから活用してるコードはあるのかって聞いたの。
>え、else 節を省略して、かつ、if 節に入らなかったとき、だよね?
もちろんそう。
>その場合 nil になるのは当然ではないかと。
当然。つまり nil は、返り値としてふさわしい値がない場合の
デフォルト値としての地位を確立してる。
そして Array#each はそういう場合だと思う。
>>77 ああ、while の方がいい例すね。
やっぱり matz 次第なんだけど。
nilなりyaccなり
好きに throw
直感的な議論だけではアレなので、ruby のパッケージ内を調べてみた。 array.c をいじって、make と make test-all をしてみたところ、 とりあえず 2 箇所見つかった。 lib/optparse.rb の 195 行目: RCSID = %w$Id: optparse.rb,v 1.40.2.4 2004/12/05 10:39:58 nobu Exp $[1..-1].each {|s| s.freeze}.freeze lib/rss/0.9.rb の 632 行目から: def _tags %w(title description name link).each do |name| send(name).nil? end.collect do |elem| [nil, elem] end end optparse の例はちょっと納得した。後者は .nil? の意味がよくわからない。 この 2 つを直したら test-all は全部通った。 そこまで大きな影響はなさそうだけど、ゼロではないね。
>>81 あー、optparse みたいな書き方はするなぁ。
nil 返すようになったら結構困るかも。
◆.ogCuANUcE は反対することありきで話してないか。 もうちょっと建設的に議論しようぜ。 とりあえず RAA を "each freeze" で gonzui してみたところ、 optparse くらいなものだった。作者の中田さんの意見を聞いてみたいね。
84 :
44 :2006/03/02(木) 23:44:26
optparse の例はちょっと説得力あるな。それでも俺の感覚では
optparse の例の嬉しさ×頻度 <
>>44 の例の嫌さ×頻度
なんだが、思ったより同意がないようだから、この提案はだめっぽいね。
取り下げる。意見くれた人たちサンクス
44は、関数が勝手に値を返すの反対、というのじゃなかったのか。 eachがself返すの反対なだけだったの?
>>83 そんなことはないけど。
互換性を最重要視するのはそんなにおかしい?
最初の発言 (
>>71 ) は互換性がどうのというより、
「今の挙動の方が正しい」という主張だったけどな。
>>84 あー、今更だが俺も同意しとく。
つか、プログラマとかその手の人種は他人を否定したがるというか、
反対の時は饒舌だが賛成の時は黙ってるやつが多いから、
賛成と反対の数だけ気にしてもしょうがないよ。
別に他人を否定、とかじゃなくて、俺の意見としては、 * self を返すことは別に気持ち悪くない * ブロックの値を返すのでも悪くはない * nil でも悪くはないがよくもない なので、現状を変更する理由にならん。 話を聞いても全然説得されなかった。 nil にしたらこんなに嬉しい!ってのがないとなあ。
簡単な話が十人十色ってことで終了?
値を返す必要がないときには、
メソッドチェーンするかもしれないケースに備えてとりあえず self を返しとく、
というのはそれほど悪くない convention だと思うんだけど、どうだろ?
あと、
>>44 の例で「外に漏らしてしまう」と言っているけど、
これは each に限った話ではないよね?
procedure_foo の実装者は
「かといって明示的に nil を返すのは面倒だしださいので避けたい。」
と思っているかもしれないけれども、
それは each の実装者にしても同じことだよね?
each の実装は C なので return self; みたいなのを明示的に書いているぞ。 とか本質的でないツッコミ。
93 :
91 :2006/03/03(金) 11:00:05
>>92 あぁ、 Array#each はそうでしょうけど、私は一般的な each の話を言っています。
>>44 は、もし tmp_ary が Array じゃなかったとしても、
あるいは、最後に呼んだメソッドが each 以外だったとしても、
「外に漏らしてしまうのが気になる」
と思ってしまうのではないかと思うのですが、
違ってたらすいません。
ruby で値を返さない手続き的なメソッドを書こうというのが そもそもの間違いなんじゃないか。
超厳格に話をするなら 習慣としてあらゆるパスにselfを配置するのは面倒で Cのように警告してくれないのでよろしくない。 とかって話になるんだろうけど 結局所詮スクリプトだし〜の一言で終わる話じゃね。 メソッド内でたまたま最後に参照した生パスワードが参照できちゃって それがセキュリティホールにつながるわけじゃなし。
話を整理しなおすと、 (1) Rubyのメソッドは最後に評価した文の値を返り値とする (2) Array#eachはselfを返す (3) (1)・(2)より、メソッドの最後でArray#eachを使ったらそのArrayが返される ということだよね。 そこで(2)を問題視するのっておかしくないか?
組み込みクラスの each は全て self を返してるけど、これも全て nil にすべき?
>>96 おかしいですね。
いやなら明示的にnilを書けばいいこと
漏れるのが気持ち悪い、は全てこれが原因だと思うけど。 >(1) Rubyのメソッドは最後に評価した文の値を返り値とする Array#eachの場合はself返るのを見落としやすいというだけ。 例えばプライベートな変数に代入する処理を末尾に書くだけで プライベートなデータも漏れる。 返値はreturnで明示した方が読みやすいコードになるし、それを 強要するのもいいと思う。でもreturn省略できてメソッド定義を すっきりできるのはRubyの魅力の一つでもあるし。 この件は「Rubyの落とし穴」止まりじゃない?
>>96 出発点はそこだけど、今の議論は「Array#each が self を返す必然性はあるのか」
という話に推移してると思う。
>>100 nilに変えろという奴がいて、nilに変えないといけない必然性はあるのか、という話なんじゃないの?
102 :
デフォルトの名無しさん :2006/03/06(月) 00:44:47
i rub ruby!
endが一個多いとか少ないってエラーが出たときどうやって探すのが効率的なんだろ。 エディタの支援とかは抜きで。 トップレベルに置かないとエラーが出る要素があったら そればら撒くと洗い出すのが簡単になりそうなもんだが。 HOGEHOGE <= ここだとOK begin HOGEHOGE <= ここだとNG end while true begin end HOGEHOGE <=ここでNGならもうおかしい
>>103 試してないけど、これでどーだろ。
raise "not TOPLEVEL" unless TOPLEVEL_BINDING == binding
>>103 一箇所ずつしか使えないけど__END__とか?
[ruby-list:41879] >訴えられたくない訴えられたくない訴えられたくない :) コーヒー吹いた
>>106 知ってるとは思うけど念のため。 [ruby-list:30086] ね。
Ruby-list読んでないんだが、ライセンスで何かややこしい事にでもなってるの?
初心者スレに出てるmsvcrt-ruby18.dll絡み? GPLインフェクションかな。
おまいら、ruby/gtk2 ruby/tk どっちが (゚д゚)ウマー
tk は今更感が否めない。
VisualuRuby (゚д゚)ウマー Apollo (゚д゚)ウマー Windowsユーザーですが何か?
Delphi どうなるのよ?
どうなる、とは?
>VisualuRuby (゚д゚)ウマー になったの?手元に大昔のSoftware Design誌があって、不安定ながら記事掲載してたようだが
>>104 bindingで作られるBindingオブジェクトって毎回別物だったのか。
すまんかった。
>[ruby-list:41879] >>訴えられたくない訴えられたくない訴えられたくない ちょっと残念な感想だよね...。 GNU GPLって他人に資することでソフトウェアの発展を目的としているのに(...だよね?)、結果的に「すげぇめんどくせー、つーかマジうぜーライセンス」「一種の呪い」扱いだもんな。
>>117 rubyをバイナリ配布しようとして安全な公約数を取るとGPLになる、ということなんじゃないの?
当人がどう思ってるかはともかく、別にGPLがうざいなどという意味が含まれてるとは思えないんだが。
119 :
117 :2006/03/07(火) 12:36:05
>>118 >当人がどう思ってるかはともかく、別にGPLがうざいなどという意味が含まれてるとは思えないんだが。
うーむ、見直してみるに、どうやら一番うざいと思ってたのは俺だったみたいだ。ご指摘感謝、つーか、なかむら(う)さんに失礼しました、ごめんなさい。
msvcrt-ruby18.dllやインタプリタ自身がGPLだとして現実的になんか問題あるのか?
>>120 それを組み込んだ時にGPLに従わなければならなくなる。
それが問題だと思う人には問題。
組み込めんの?
でも、まあ・・・ GPL うざいよね。
組み込めんだろ
もうさ、 msvcrt-ruby18.dll は別途配布、でいいじゃない、そうしようよ、ね。
動的リンクしただけでGPL感染するっていうのがGNUの見解だった気がする。
ああそうか、動的リンクなら O.K. なのは LGPL か。
プロプラなソフトでRubyを組み込むという事ができないわけか。
RPGつクールとかはどうなんだったっけ?
>>129 とりあえず ML (ruby-list) の流れを追ってから質問してくれい。
>>130 129じゃないが、ML読む気がしないので、
こっちに書いてくれれば嬉しい。
>>131 それは横着すぎじゃね?
一応 ML がベースで進んでる議論なんだからわざわざ fork すんのは無駄だべさ。
議論も何もイエスかノーか半分かできっちり答えの出る話だろう。
そうですか。それではきっちり答えを出してください。
RPGツクールがどうなのかについては、答えが出てないの? ポインタ示してくれれば読むけど、全メールを読むのはちょっと面倒。 せめて、過去ログが2ch viewerで読めりゃね。 ウェブインターフェースで一つ一つ読むなんて面倒。
わざわざ
>>132 みたいなリンクの張り方するやつがポインタ示すつもりがあるようには思えんが。
馬鹿の相手なんかこれ以上するなよ、くだらねぇ。
>>137 まあね。
>>132 がポインタを示すとは思ってないよ。
ツクールに関しては結論が出てないって事か。
商用アプリがオプソの成果を盗用しようとすれば どういう報いを受けるかということがこれでわかったはずだ。 もうすぐツクールの全ソースが公開され商用としての価値は消失し 会社に多大な損害を与えることになるだろう。
RPGツクールはregexの代わりに鬼車で回避してるっぽい。 つか、今試してみてる。 だが、今やっとVC++Toolkitで、rubyコンパイルできたばかり・・・。
regex も LGPL だから、リンクすること自体は問題にならないよ。 もうひとつ問題になっている util.c と win32/win32 も、 Artistic ライセ ンスの方を採用すれば、プロプライエタリなソフトウェアに組込むことそれ自 体は問題ではない筈。たぶん。
GPL以外でリリースしちゃだめ。フリーウェア運動に貢献しなさい。
宗教は避けて通ってますんで。
まぁ、お前らは社内システムでも作ってりゃいいんですよ
ワーイ。鬼車組み込めたよー。 これで安心して寝られる・・・
>>115 正直微妙
Apolloと比べると実装・ドキュメントともに力不足に感じる
自力でハンドラを調べなくてはならない場面も多いし…
ただ、外部ライブラリを必要としない点は○
いいラッパーさえ書ければ十分使えると思う
149 :
デフォルトの名無しさん :2006/03/08(水) 09:26:35
いいラッパーキボンヌ。 だがデザインは面白そうだが実装はつまらなそうだ。
rubyスレっていつもこれ麦価。淀んでるな
今度はVC7のライセンスと絡んで配布できないんじゃねーの?
話のながれをきってすまんが、 アスキー文字のうち、アルファベットと数字以外の記号 を表すような正規表現ってどうしたらいい? [^a-zA-Z0-9] だと、日本語にもマッチしてしまうので。 今は [-^%$#@!*()=_+`~,.¥/¥¥?<>¥[¥]{};:'"] とか書いてるんだけど、なんか頭悪いから、いい方法あったら教えて。
文字コードがSJISとかきまってるなら[!-~]とか?
>>152 [:punct:] で日本語のオプション付ければ良いかと。
>>153 それだとアスキー文字全部じゃね?
そこからアルファベットと数字だけ除きたいんだが。
正規表現って、集合の差分とか表現できないよね?
こうか? (?=[\x00-\x7f])[^a-zA-Z0-9]
1.9ならこれでいけるんだっけ? [\x00-\x7f&&[^a-zA-Z0-9]]
1.9にenum入れてくれ
YARVって未踏に2連続で通ったんだね アルファギークの思いつきだとばかり思ってたけど歓心感心
>>155 ,157
irb(main):001:0> /^[[A-Za-z]&&[^A-Ea-e]]+$/.match("foobar")
=> nil
irb(main):002:0> /^[[A-Za-z]&&[^A-Ea-e]]+$/.match("quux")
=> #<MatchData:0x29361f4>
irb(main):003:0>
1.9(つーか鬼車)ね。
サンプル訂正 irb(main):005:0> /^[[[:ascii:]]&&[^[:alnum:]]]+$/.match("ほげ") => nil irb(main):006:0> /^[[[:ascii:]]&&[^[:alnum:]]]+$/.match(" a1") => nil irb(main):007:0> /^[[[:ascii:]]&&[^[:alnum:]]]+$/.match("$%,") => #<MatchData:0x2a01cdc> irb(main):008:0> こんなとこでどだ? ブラケットのネストがうざったいが。
162 :
154 :2006/03/09(木) 02:48:58
それなら [:punct:] の方が良いと思うのですが・・・
enumはenumであってenum以外の何物でもない
>>162 スペースとかタブはどーすんだっけ?
punctにはこの辺ないよ。まあ逆に付け加えればいいだけだけど。
あと、現状のRuby(つか鬼車)はlocaleでこの手の文字クラスの範囲が
変わらないみたいだけど、世の中には変わるのもあるからね。
たとえば[:pumct:]に 、とか , が入ったりとか。
るびまの添削記事をきっかけに少しは他人のコードも読もうと思い立って 標準ライブラリを少し眺めてるんだけど、単発クラスばっかり。 クラスの設計とかがもう少し入り組んでるようなプロジェクトでソースのきれいな物おせーて。
>>165 >>152 はタブやスペース入れてないからいいかなと。
ロケールで変わりそうというのは確かにそうですね。
[:ascii:] つうのは Perl 拡張ですかね?
man ctype しててしばらく悩んでしまった。
168 :
デフォルトの名無しさん :2006/03/10(金) 10:52:46
>>166 青木さんのBitChannel
というか俺がコード読んだのがこれくらいなだけだが。
Rubyアプリケーションとしても、Wikiの実装というかCGIの実装としても秀逸だとオモタ。
他になんかあったら俺も教えて欲しい。
>>166 WEBrickが参考になると、るびまのなんかの記事に書いてあった。
入り組んでるのならrdocとかも。
美しくないソースならいくらか知ってるんだが
美しいソースなんて知らないんだが
rand(-100..100) rand(10...16) ってしたい
Range#randキボンヌ
def rand(n) if n.instance_of?(Range) then n_a = n.to_a i = rand n_a.size return n_a[i] else return Kernel.rand(n) end end こんな感じでいいんか?
class Range def rand n = 0 y = nil each do |x| y = x if Kernel.rand(n += 1) == 0 end y end end
Enumerable あたりに持たせた方が綺麗な気がしてきた
rand(1.0..3.0)もサポートすべきでは? そもそもこういうのは標準のRubyで対応すべきだと思う。
Kernel::rand が Range を引数に取れるようにってのもありかも
Kernel::randだとifの分岐が増えて嫌な感じ rand(n) a.rand end に丸投げなら有かも。
C/C++だろうと結局ライブラリの仕様次第って事だろ。 一般論として100も200もレス伸ばすような話題でもない。
標準の Ruby に期待するのはやめた。 ActiveSupport で対応してくれさえすればいいや。
まぁ,そのうちgemsに入ればいいやとか言い出すんだよな
(1.0..2.0).randって実装できるの?
>>187 こんなのとか。
class Float
def rand(limit = 0.0)
(limit - self) * Kernel::rand() + self
end
end
class Range
def rand
if first.respond_to?(:succ)
# 中略
else
first.rand(last)
end
end
end
いや、rand()は 0.0 ... 1.0しか生成できないから 0.0 .. 1.0はどうやるんだろうかって事。
ああ、そうか。 でも (0.0..1.0).rand が 0.0 とか 1.0 になることってあるのかな? 教えて、数学の偉い人!
まあ仕様ですで逃げても誰も困らないかな。
これは興味深い
new Random().nextInt(10);でJavaなら0〜9が取れる 構文でサポートする必要はないと思う
構文?
個人的にはこれで十分だな class Range def rand if first.kind_of?(Integer) Kernel.rand(max-min+1)+min elsif first.kind_of?(Float) Kernel.rand() * (last-first)+first else raise TypeError.new(first.class.name) end end public :rand end a=[]; b=[]; c=[]; d=[] for i in 1..20 do a.push((1..5).rand) b.push((1...5).rand) c.push((1.0..2.0).rand) d.push((1.0...2.0).rand) end p a.sort, b.sort, c.sort, d.sort puts ("A".."F").rand # err [1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5] [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4] [1.01266720239073, 1.01478989003226, 1.03025444666855, 1.06008591223508, 1.07785816979595, 1.24921685433947, 1.33628733176738, 1.34473595488817, 1.40971731534228, 1.49617777764797, 1.59997416939586, 1.6395130623132, 1.65759115992114, 1.68046701466665, 1.75532641983591, 1.77737815189175, 1.80818298063241, 1.81937686935999, 1.85303344926797, 1.90426424588077] [1.07483099680394, 1.14998408732936, 1.19250788423233, 1.26004932681099, 1.26708384230733, 1.27689886838198, 1.28458853322081, 1.29509600717574, 1.41609804634936, 1.49863598425873, 1.66031795437448, 1.67920556757599, 1.73509335005656, 1.74326395476237, 1.78267445997335, 1.83928591781296, 1.84696579352021, 1.86383298388682, 1.94829077110626, 1.9503703576047]
とてもよい
Rangeクラスについて常々思ってたんだが 値を範囲内に収めてくれるメソッドが(標準で)欲しい range = 1..10 range.fold(4) #=> 4 range.fold(-2) #=> 1 range.fold(300) #=> 10
この手のユーティリティメソッドって
>>195 的に
元クラスにぼこぼこ追加していくスタイルって推奨なの?
それともMyLib.range_rand/range_foldとかにした方がいい?
199 :
162 :2006/03/11(土) 00:35:57
>>199 ありゃ、そうなんですか。
てっきり ISO C90 に ispunct(3) あるから POSIX regex にもあるものとばかり。
>>198 推奨されもしないが嫌われもしない、ってぐらいじゃないかな
(個人の好き嫌いもあると思う)
元クラスに追加するにしても
ライブラリとしてまとめてrequireすれば、それなりに分かりやすくなるし
元クラスに追加しない場合、モジュール関数にするよりは
Rangeのサブクラス(NewRange?)を作って
そっちでメソッドを追加したほうがいいと思う
>>201 >Rangeのサブクラス(NewRange?)を作って
>そっちでメソッドを追加したほうがいいと思う
全然よくねーよ。それじゃ結局 rand(0...10) と書けないだろアホ。
204 :
デフォルトの名無しさん :2006/03/11(土) 14:04:48
Programming Ruby 2nd Ed. の翻訳っていつ出るのでしょうか? 以前 ruby-list で3月頃に出るって流れてたような記憶があるのですけど
>>203 お前が読めドアホ。
>>201 >Rangeのサブクラス(NewRange?)を作って
という一文から分かるように、どう見てもrand(1..10)に関連した話だ。
このユーティリティ関数を
Rengeのサブクラスに定義するのはまるで意味が無い。
モジュール関数にした方がマシ。
ActiveScriptRuby固有の拡張子ってなんか決まってる?
208 :
199 :2006/03/11(土) 14:56:55
>>200 すまん。posix 1003.2でぐぐって一番上のページ(英語)のページを
見たんだけど、ここ以外のページも見るとpunctが入っているのばかり
だったから、このページが間違っているのだと思う。
>>206 まともな本を1冊欲しいと思ってたんだが、Rails 本を買ったばっかなんだよなぁ。
しかも、ライブラリ編もあるのか……ぐへぇ。
合わせて8000円ですからね。英語版買ったほうがいいキガス
ライブラリ編だけ買うか? 初版は持ってるが、標準ライブラリが1.6 -> 1.8で大量に増えたから まとまった日本語の説明欲しかったんだよな
Ruby製のCMSてないですかね?
ftpupってもうないのかな?検索して出てきたけど、 raaにはないみたいだし・・・
>>210 だよね。1版持ってればなんとか読めるキガス。
1版日本語版は印象わるいんだよね。誤植が多い気がするし、
索引の作り方も気に入らない。なんてったってDavidがデビッ「ト」に
なってたのが笑った。ピアソンの中の人仕事雑過ぎ。
どーでもいいけどirb.batの二行目に title irb %1 %2 %3 %4 %5 %6 %7 %8 %9 と入れとくとタスクバーの表示がC:\Windows...から irbに変わって識別しやすくなる。
書き方がいやで試してない
218 :
117 :2006/03/12(日) 23:36:39
なにを今更…
やっぱクイズ好きだなぁこの人
two.rbの呼び出したone.rb one.rbの呼び出したtwo.rb one.rb自身 ruby知らないが、たぶんこんな理由だろうな
おお、なるほど。。 こういうの見ると、Rubyが言語設計がよいといわれるのが納得できるなぁ
いや・・・こんなの普通でしょ・・・Pythonだったらファイルとクラス対応を変えることもできるしね。 もっとブロックを使ってないとRuby-Wayとはいえない!
$LOADED_FEATURESはどの段階でセットされるべきなのか
そんなことよりWinで"\\"をそのまま使えるように パス区切り文字なグローバル変数導入してくれ。
いや、内部では/で統一する方がいいよ。なまじ'\\'なだけに、 そのまままた文字列を処理するなんかに食わせると問題になりかねん。 taintを応用して、プログラム外から来たデータにビットを立て、 それを内部でパス名等として使用するときには 自動的に'\\'->'/'がかかるようにするというアイデアを思い付いた。 taintビットはセキュリティにしか使われてないが、応用すれば こういう自動サニタイズみたいなことの実現にも使えるんじゃないか。 最近の流行的には、タグ?
今の所 pure ruby なYAMLライブラリってどこにもない? RAAでも探したんだけど見つからないし yaml4rはダウンロードできないみたいだし
>いや、内部では/で統一する方がいいよ。なまじ'\\'なだけに、 >そのまままた文字列を処理するなんかに食わせると問題になりかねん。 文字コードなんかは対応しているのにWindowsのパスに関してはなぜか 問題になる可能性を問題にする不思議。 そして文句あるならお前がやれでいつものように終了。 そしてRubyはWindowsで全く流行らず。
へー。だから?
Python陣営はRubyをライバル視してるのかな?
外人がつくってくれるのを待てばいいさ
>>231 よく知らないが、File.join って OS によって変わらないの?
変数くらいなら、自分で放り込めば良い気がするけど。
しかも、文字コード云々の言い分が良く分からん。
>>229 の方が説得力あるんだが。
C# は、パスは @"..." で明示的に区別していた気がする。
Windows オンリーの人は釈然としないのかな。
>>228 そのまま使えるし、File::ALT_SEPARATORってのもあるんだが。
>>229 以前、このスレあたりで Object にタグを(ry とネタを振った記憶が。
最近、誰かの blog でも見掛けたような。
Ruby発祥のOS hogehogeのパス区切りが@だから Linuxで使う場合ARGVや``, system call, putsの前後に 必ず@<=>/の変換入れましょうとか言われたらぶちきれる罠。
そんなこと言っても、WindowsのAPIでは \ も / 普通にパス区切りとして使えるし。
>>239 その話は無いものねだりだと思うけどね。パッと思い付いたのは、
ruby_path = %path|usr bin ruby|
とかだけど、これだと空白の扱いとかが疑問だし。
そもそも、表記の長さを気にするなら Pathname じゃなくて Path にしろよ、
とか思うんだけどw
コンストラクタで配列を取れるようにするだけで大分違うと思うんだけどね。
ruby_path = Pathname.new %w(usr bin ruby);
'a' =~ /a(?!=b)*?c/ というパターンマッチングを行うと暴走するんだけどバグかな。 普通に使っていてこれを踏むことはないとは思うけど。
>>242 Perl では同じ正規表現が使えた。当然結果は偽だったけど。
先読みや否定先読みは本来の使い方からすると、後に quantifiers が来ると
エラーにするべきだと思うんだけど、なんでそうなってないんだろう。
Perl にしても Ruby にしても。
hash = Hash.new しないで、 いきなり hash[:foo] = bar できるようにならないかなぁ
>>243 鬼車だとエラーになるね。
% ruby -e "'a' =~ /a(?!=b)*?c/"
-e:1: target of repeat operator is invalid: /a(?!=b)*?c/
Common Lispのリーダーマクロのように、 %<文字>(...) の解釈器をRubyで書けるようにすればいいと思うんだよね。 そうすればRubyでDSLを作るのにも便利がいいと思う。 ただし今のように全部まとめてパースしてから処理というわけにはいかなくなるが。
>>246 俺もそれができると良いと思うんだが、
他人に読めなくなってしまうのが難点なのと、
<文字> が競合した場合にえらいことになりそうなのでダメだと思った。
多分に使い様の問題ではあるが、後者はたとえば扱いをファイル単位にして、 カレントファイルの以後の処理のみに適用、もしくはKernel#loadの オプショナル引数として渡すようにする等が考えられるね。
>>248 > 扱いをファイル単位にして、カレントファイルの以後の処理のみに適用
パーサの中で評価期を呼べるようにしなけりゃならないので、
まずそういうシンタックスを考える必要がある。
> Kernel#loadのオプショナル引数として渡すようにする
こっちは意味がよくわからん。
実装方法は必要だがシンタクスを別に考える必要なんかないけどな。
>>244 [] というメソッドは Hash 以外にも存在するので、
Hash だけ特別扱いしすぎるのもねえ。
hash = {
:foo => :bar,
}
くらいで我慢しといて。
244は ||= をご存じないのかな。 (hash ||= Hash.new)[:foo] = :bar # Hash.newは{}でもよい p hash
それは流石にキモい。 しかも ||= である必要性がないし。 (hash = {})[:foo] = :bar
そんなに汚く詰まったコードが好きならPerl使えばいいのに。
もうシンタックスは変えないで・・・ (´Д`;)ヾ ヨロシクオネガイシマス ∨) (( (;´Д`) ホントニオネガイシマス ( 八) 〉 〉 ヾ (´Д`;)、 コノトオリデス ノノZ乙 例のブロックパラメータのバグと実行速度の高速化だけに注力してください・・・
>>255 例のブロックパラメータの「バグ」ってシンタックス変えずに解決可能なんだっけ?
>>253 のコードが駄目な理由が分からないんだけど
汚いコードって意味じゃ
>>252 も同じじゃない?
>>252 のコードは hash に既にHashオブジェクトが代入されていてもされていなくても
正しく動作するが、
>>253 は有無を言わさずhashに{}を代入して初期化している。
それをやりたいなら
hash = {:foo => :bar}
で良いわけだし。
あとhashという変数名も良くないね。hash ||= {} というのが思ったとおりに動くのは、
rubyが賢いからなんだろうけど。
hash という変数名にしててはまったことが何度かある。
hoshu
>>259 それなら (hash ||= {})[:foo] = :bar でもいい話だし、
このケースで ||= を使うなら、その例だって hash ||= {:foo => :bar} にするべきじゃね?
だな。 Perl だと
>>244 みたいなことができるのだが、あれ気持ち悪くてしかたない。
>>263 >
>>252 のコードは hash に既にHashオブジェクトが代入されていてもされていなくても
> 正しく動作するが、
>>253 は有無を言わさずhashに{}を代入して初期化している。
ここに対する反論なんだけど
> それをやりたいなら
> hash = {:foo => :bar}
> で良いわけだし。
ここは同意するよ
俺も
>>244 みたいな機能はいらんと思ってる
||=の人は勘違いしてるんでしょ
結局perlのほうが柔軟性が高いということでFA?
ま、そういう「柔軟性」が必要な人は、perl でも何ででも使ってくださいな。 で、そういう柔軟性に嵌って、自分で自分の首を絞めることになるけどね。
270 :
265 :2006/03/15(水) 12:09:44
>>268 Perl は型の種類が貧弱だからああいう無茶ができるんじゃないかな。
と、煽りにマジレスしてみる。
ちとCから見てて気付いたんだが、なんか↓のコードおかしくね? これがGCされないのはちょい困るのだが。 仕様だろうか…? 再現コード@mswin32 1.8.4 #!ruby Object.new(); #nil; #<-これを追加するとGCされる(nilである必要はなく、どんな式でもいい) GC.start(); ObjectSpace.each_object{|o| p o; # => <#Object:...>があることを確認。 } __END__
>>271 Cから見るとどんなロジックのGCの実装が適切なの?
273 :
273 :2006/03/15(水) 12:47:24
>>272 いや、ロジック云々は関係ない。
GCされるはずのものがGCされないってまずくない?って話。
具体例がほしいなら、たとえばmod_rubyのような常駐アプリとかでね。
274 :
272 :2006/03/15(水) 12:50:38
いや、どのアルゴリズムのGCを希望してるの? と聞いてるんだけど? で、別にGCされなくてもまずくないと思うよ。なぜまずいの?
どうせ保守的 GC なんだし、その1個が解放されようがされまいがどうでもいいと思うが
つまり現状のGCだとこれで仕様ってこと?
それならそれでしょうがない。諦めるよ。
>>274 よりよいGCアルゴリズムが何かなんて一般人が答えられると思うか?
>>275 これが保守的GCの意味なんね。よくわかったよ。
277 :
272 :2006/03/15(水) 13:41:37
>>276 初心者スレじゃなくてここでGCについていちゃもんつけてるんだから、
当然GCのアルゴリズムをわかった上でをしてるのかと思ったよ。
>>277 「これがGCされないのはちょい困るのだが。」と書いてる時点で
どう見ても初心者だろ。
>>278 GCとオブジェクトが所持してるリソースの解放(ファイルIOとかね)をごっちゃにしてる人じゃないのかなと思った。
オブジェクトの記憶域の始末を付けるのがGCであってそれ以外の資源はちゃんと自分で後始末を付ける物だと言うことを
自覚しないといけないのだけど、そういう事って入門書じゃかかれてないんだよね。
Ruby は初心者でも、「Cから見てて」って言うくらいだから、 GC のコードくらい見てるんだよなー、と思った。
喪前らいちいち性格悪いな
>>281 そうかなぁ?
元の書き方が知識人な人だからもっと高尚なオハナシかと思って皆期待したのに裏切られただけなんとちゃうのん?
初学者の割に「俺様ルールの決めつけ」から入ってるような香具師には 辛く当たりたくなるのが心情ってもんじゃなかろうか。
284 :
271 :2006/03/15(水) 14:27:01
>>280 そりゃ書き方がまずかった。単に拡張ライブラリを作るレベルで、という話のつもりだった。
というか、別にCレベルのコードの話は出してないだろ。
サンプルコードだって100% pure rubyなのに。
というか、本気で諸兄らは
>>271 のコードに違和感無いのか??
これが開放されないのに違和感を感じるのは俺様ルールの決めつけなのか…。
>>284 そもそも GC って何か知ってるのか?
違和感を感じるあなたが precise GC を実装してください。 ついでに incremental & generational GC にしてくださいな。
>>284 100% pure ruby のサンプルコード出しといて、何がどう「ちょい困る」んだよ?
>>284 あのコードで問題になるようなオブジェクトにどのような物を想定してるのですか?
290 :
271 :2006/03/15(水) 14:37:01
>>285 「使わなくなったアクセス不能なリソースを開放する機能」だと思ってたが、その口ぶりじゃどうも違うらしいね。
せっかくだから、GCとはなんなのか後学の為に教えてもらえると嬉しい。
291 :
271 :2006/03/15(水) 14:44:16
>>289 同じ現象だね。
俺の認識が異常なのかと思い始めていたところだが、そうでもないらしい。
>>287-288 Data_Wrap_Structに指定するfree()でリソースを開放するつもりが、思ったように呼ばれなかった。
それで調べてみたらRubyレベルでも再現することがわかった。
そして再現コードを最小にまとめて書き込み、という流れ。
これで満足?
293 :
287 :2006/03/15(水) 15:35:20
>>291 いや、具体的にどう困ったのかわからんので不満足です。
271氏の理解の範囲を越えていて困ったってこと?
>>294 GC::always は名前が変わって (GC::stress) 実装されたんじゃなかったっけ?
>>271 のコードを見て、そもそもそのコードなら
nilを付けようが付けまいが、生成したObjectは
GCされる可能性があるんじゃないか、と思ったんだけど……
(どこからも参照されていないはずだから)
GCに関する理解のある方、解説をお願いします
何を解説してほしいのかね。
エスパーのオレが来ましたよ。
・
>>271 の主張
「GC.start では、GCの対象になる全てのオブジェクトは解放されるべきではないか。」
・それに対する解答
「Ruby は GC のアルゴリズムとして conservative GC を採用している。
アルゴリズムの特性上、解放されないオブジェクトがあるのは当然だ。」
・
>>271 の属性
ドジッ子・いじっぱり
ちなみに GC.stress は、「GCされるかもしれないタイミングでは、
常に GC の動作が始まる(通常はメモリに余裕があれば行なわない時もある)」
という話で、今回の件とは関係ないと思う。
Rubyだと全ての式は値を持つ。 だから「直前に評価した式の結果」を持つレジスタが内部的にはあると 考えられる。 そう考えれば271は別におかしくないのでは。
>>300 GC.start の戻り値は GC.start が実行された後で返るんだから
関係ないのでは。
みんないじっぱりでつね
つか271の言ってるリソースって明示的に解放するべきものじゃないのか?
それ気付いてないの本人だけだから黙ってた方がいいのにw
>>299 制御構造なんかも最後の式の結果が戻り値になるからそれかもな
で、RubyのGCはレジスタの値なんか見てるんでつか?
レジスタじゃなくても似たようなもので何かありそうじゃん。
Ruby2.0とPHPとではどっちが速くなりそう?
>>308 早い遅いというか、そもそもRuby2.0はいつ出るか決まってるんだっけ?
>>306 CPUのレジスタも見るよ。そんなことも知らないの?
最近急にスレが厨臭くなったな
312 :
306 :2006/03/16(木) 01:51:07
>>310 たしかにgc.c見てると、レジスタ見てそうだな。thanx
>>309 未踏の発表会も終わったし、今年中でしょ
年 3 回…。
316 :
デフォルトの名無しさん :2006/03/16(木) 13:28:11
逆に考えるんだ。 「年三回しかリリースされない」と考えるんだ。
四月はもう無いよね。まあ今年は二回だろうね。
8月・12月だと、12月がきつくない?
再起動すればGCなんて不要だよ。 Javaだって運用するなら定期的な再起動が必須だし。
ヒント: 冬コミ
見事に夏コミと冬コミにあたるなw
つか12/24がすべての基準なんだろ
>>319 大規模な変更がなくてもリリースって結構負担になるもんなのかな。
データをヒープに持つ実装をやめればGCなんて不要だよ。
>>325 ほう。興味深い話だ。ではどこにデータを持つようにすれば良いのか
教えてくだされ。
DB(藁
>>326 返信が来る前に賭けてみる(こないと思うけど)
フラットメモリ一杯もらって結局自分でチョン切ってヒープになるに1カノッサ(w
329 :
325 :2006/03/17(金) 03:57:52
えー、そんな真剣に答え求められても・・・ ・全部スタックに積む ・アドレスを求められたらいちいち先頭から数え直す ・値を変更されたら最後尾のアドレスに積み直す ・使わなくなったメモリはそのまま放置 とかかな? ハードウェアが無限に性能向上したら、可能になるよ
(゚Д゚)
ハードウェアが無限に性能向上したら、データをヒープに持っててもGC不(ry
おまえらが無限に性能向上したら、データを脳内に保持しておけるのでGC不(ry
参照が残ってるはずの記憶もGCされちゃうんですが、これはバグ?
コードを
>>333 とりあえず、お前の頭をオープンソース化しる!
>>271 >#!ruby
>Object.new();
>#nil; #<-これを追加するとGCされる(nilである必要はなく、どんな式でもいい)
>
>GC.start();
>ObjectSpace.each_object{|o|
>p o; # => <#Object:...>があることを確認。
>}
このコードを試してみましたが、3行目のnilあるなしにかかわらず、<#Object:...>が残りました(Linux2.6, Ruby1.8.4)。Windowsでは試してません。
このコードだけを見ると確かにGCで回収されてもおかしくないように見えます。たぶん直前に実行した式の値をRuby内部で保持しているせいだと思うんですが、
確信はないのでここじゃなくてメーリングリストで聞いてみることをおすすめします。
保守的GC(conservative GC)がどうのこうのという意見もありますが、今回はたぶん関係ないでしょう。
たしかに保守的GCではすべての未参照オブジェクトが回収されるという保証はないですが、
>>271 の場合はnilがある場合はきちんと回収されているそうなので、今回の件についてはGCが保守的であることは関係ないと思われます。
つーか、どうみてもGCのアルゴリズムとは関係ない話でしょ。だれだよ、そんな話にもっていったやつは。
なんか271につらくあたってる書き込みがおおいですが、的外れな回答はきにせずスルーしてください。ごめんね>271
>>338 >保守的GC(conservative GC)がどうのこうのという意見もありますが、今回はたぶん関係ないでしょう。
根拠は?
コンサバティブでいてくれさえすればどうでもいい。いまはメモリの使用量を気にするのは貧乏人。 まあ、webrickを一ヶ月立ち上げっぱなしで動かすとかいうんなら話は別だけどね。
RoRのPodcastでwhyが登場してる件について
論破?? (⊃д`)??
ロンパールーム
348 :
346 :2006/03/18(土) 00:42:11
>>347 ちょっとずれてると思うけど、おれは別にどーでも構わんよ。
349 :
345 :2006/03/18(土) 09:14:44
どっかのパワーの有り余ってる外人さんがLinuxの基本的なコマンドをrubyでリプレースプロジェクトとかやってたりしないの。 たまにコマンドカスタマイズできると便利だと思ったり思わなかったり。
>>338 どうみても保守的なGCにありがちな挙動だと思うが、
何を根拠に「関係無いと思われます」なんていってんの?
「オブジェクトがGCされない」という話が
なぜ「GCのアルゴリズムとは関係無い話」と思うの?
「なんとなく」とか「直感で」とか言ったり、そもそも答えなかったら低脳すぎんぞ。
2chだと突然口調も正確も豹変してしまう件
2ch以外ではネット上に自分の文章特にありませんが
>>353 平素の言動や文章と匿名投稿との比較とおもいたまへ
>>354 普段の言動と違うのは当たり前だろ。
お前は同じなのかよ?
お前平素の言動や文章に「おもいたまへ」とかいってんの?キモスギ
重いタマへ
>>351 どうみても保守的関係ありません。
直前の式の値を記憶していれば不思議でもなんでもありません。
保守的なGCにありがちな挙動ならstrictなGCで起こらないことを示さねばなりません。
タマ姉さいこう
>>358 >直前の式の値を記憶していれば不思議でもなんでもありません。
はぁ?あふぉですか?
直前の式の値は記憶されませんが。
どうみても保守的GCのせいです。
なぜ直前の式の値が保持される、と思ったんだろう?
ソースを読んだからだけど。 conservative GCの"conservative"が指す意味わかってないだろ。
分かってないのはお前だろ
じゃあ説明してみ。 俺の理解している定義ではRubyが値を保持している以上 conservativeかどうかは関係ない。Rubyが保持していることはソースで確認済。 (厳密に言うとRubyの内部コード上での直前の値なので必ずしも 字面のそれとは一致しないが、この場合は同じ)
具体的にソースのどこか言ってみろよ。
先に君のconservativeの定義と、271の理由がGCがそのconservativeだから であることの説明をどうぞ。 これがどこかなんてRubyに限らずインタプリタを読める人なら すぐに当たる場所だから、場所を明示しなくても真偽は判定できる。 心配しなくても、読めない君のためにその後で場所は示してあげるよ。
お前がconservative GCの意味が分かってないんだから、説明するのはお前だあふぉ。 意味が分かってる? じゃあ説明してみ。
何このスレ・・・・・・・? /ヽ /ヽ / ヽ / ヽ ______ /U ヽ___/ ヽ | ____ / U :::::::::::U:\ | | // ___ \ ::::::::::::::| | | | | | U :::::::::::::| | | .|U | | ::::::U::::| | | | ├―-┤ U.....:::::::::::::::::::/ | |____ ヽ .....:::::::::::::::::::::::< └___/ ̄ ̄ :::::::::::::::::::::::::| |\ | :::::::::::::::::::::::| \ \ \___ ::::::
Rubyスレです。 参照しないでください。 そのうちガーベジコレクションされます。
>>367 自説の根拠の提示を相手に求めるのですか?
貴方の主張は271の理由がGCがconservativeであるためであるというものであり、
当方の主張はそうではない、言いかえれば271はconservativeでないGCにおいても
起きるというものです。
従って当方の主張はconservative GC固有の性質に依存しておらず、conservative GC
の定義を当方が示さずとも、或いは仮に当方が理解していなくとも論旨の構成に
問題はありません。一方、貴方の主張はGCがconservativeであるということの意味、
conservative GC特有の性質の説明抜きには成立し得ません。
ここまで言えば、どちらが説明すべきかは普通は理解できると思うのですが?
>心配しなくても、読めない君のためにその後で場所は示してあげるよ。 終わる前にこれキボンヌ
>>371 はいはい。結局conservativeGCが何か理解できてないし、ソースの位置も示せないんだね。
よかったよかった。
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
何故説明しないのか分かんなけいど(わらい)
「`自説の'conservative GC」説明すれば済む話じゃんね。
>>372 春だよね、もう
なんか必死な奴が居るなw
分かんなけいど
Rubyは直前の値を記憶してないので、GCされないのは保守的GCだから。説明オワリ。 >このコードを試してみましたが、3行目のnilあるなしにかかわらず、<#Object:...>が残りました(Linux2.6, Ruby1.8.4)。Windowsでは試してません。 直前の値を記憶しているんなら、nilあるなしで<#Object:..>は残るか消えるか変わるだろバカ(わらい)
Rubyの実行環境ヒープエリアに件のオブジェクトへの参照が存在するなら言語的には参照不可な場所であってもGCされないって事だろう? コンサバGCなら全く持って不思議じゃねぇじゃん。
>>383 件の例だと ObjectSpace からは参照されてるようだけど、
これは「言語的に参照不可な場所」じゃないよね?
そのへんがいまいちわからない。
>>373 そうしたいのは山々ですが先に、で示した条件を満たしてくれる方がいないので
今のところご希望に添えず残念です。とりあえずファイル名だけ示しておきます:
eval.c
>>378 371で述べた通り、私の主張にconservative GCの説明は必要ではないですから。
>>382 371で忠告申しあげた通り、保守的GCの定義が抜けていますから、それで説明
オワリとしてしまうと主張は成立しませんよ。
ちなみに
> 直前の値を記憶しているんなら、nilあるなしで<#Object:..>は残るか消えるか変わる
とは限りませんよ。338の内容からはRubyが直前の値を記憶しているという主張は
なんら否定されません。
>>383 「言語的には」の指すところが不明確です。また383の定義を言葉通り適用すると、
循環参照のあるオブジェクト群は永遠に回収できませんね。再提出してください。
387 :
271 :2006/03/19(日) 08:57:27
因みに俺は書き込むときは番号書いてるから。
>>385 ObjectSpace.each_objectは「存在する全てのオブジェクト」にアクセスできる。
これに例外はなく、次にGCされるはずの参照できないオブジェクトにも参照できる。
試しにGC.start前と後でオブジェクトの数を数えてみれば分かる(ただし数えるだけ。pやputsは文字列を生成するのでこの試みには不適)
にしてもちょっと前にも同じこと主張してたやつがいるな。
なんでRubyの仕様すら分かってないヤツにまで叩かれなきゃならんのだ。
388 :
271 :2006/03/19(日) 09:11:33
>>342 >いや,Ruby以外は全然知らないから嘘かもしれないけど.
Perlの拡張書いたことあるけど、Rubyの方が圧倒的に書きやすいと思う。
メモリマネージメントだけじゃなく、funcallとかもうね。Perlのサブルーチン呼び出すためにいちいち引数をスタックに押し込んで…とかやってらんない。
argcとargvだけ用意すればいいのはすごく楽だ。
ただ、Rubyは拡張ライブラリ用のユーティリティが圧倒的に不足してるね。
rb_str_newf(fmt, ...)とか、rb_str_catf(str, fmt, ...)とか、
rb_protectn(func, argc, ...)とかほしいと思った。
>>386 >>378 は
>>367 宛てのつもりだったんだが、既に俺には状況把握できてないのかも。
誰か、一旦、状況整理するか blog で纏めてくれ ('A`)
とりあえず WBC 観ようぜ、みんな。
>>386 >371で忠告申しあげた通り、保守的GCの定義が抜けていますから、それで説明
>オワリとしてしまうと主張は成立しませんよ。
保守的GCでググれ。それが定義だアホ。
>> 直前の値を記憶しているんなら、nilあるなしで<#Object:..>は残るか消えるか変わる
>とは限りませんよ。338の内容からはRubyが直前の値を記憶しているという主張は
>なんら否定されません。
はぁ?オマエ頭大丈夫か?
お前の主張は、
「保守的GCが一切関係ない、直前の値が記憶されているから消えない」
だろうが。
直前の値がnilで上書きされてんのに、お前の環境では消えなかった。
で、271の環境では消えた。
なぜお前の環境で消えなかった?保守的GCが関係してるからだろうが。
この現象を保守的GCとまったく関係無い、とかアホほざいてるヤツが
逆に「コンサバGCって何かわかってる?」とか寝言言ってんだぜ。
死ねよと。
保守的GCをちゃんと理解してれば、>271は保守的GCが影響してるため、と判断できる。 「まったく関係ない」と主張してるバカは、理解できていない。 よって、「保守的GCの説明」、というか「保守的GCのお勉強」をしないといけないのは、 まったく関係無いとほざいてるアホのほうです。
というか、
>>342 のリンク先の、Rubyの仮想マシン作ってる人が、
「保守的GCだから」と言ってるじゃん。
俺らよか、かなりRubyの内部に詳しい人のはずがそう言ってる訳だ。
>>338 の保守的GCは関係無いと主張してる方。
どうみても保守的GCの関係してる話です。
保守的GCの理解が足りないようです。勉強してくださいね。
モチツケ
ごちゃごちゃうるせーよ、全部ささたんに任せておけばいい 先進のGC実装によるRubyの刷新とかいう名目で、 また政府に食わせてもらえばよし
つーかそろそろGC論争はよそでやってください、頼むから
>>395 同意。そーゆう議論なら開発MLでやれ。
ななしじゃなく、オープンに議論してくれんぞ
399 :
271 :2006/03/19(日) 20:43:52
>rb_protectn って何だろう。 rb_protect()の任意個の引数を受け取るバージョン。 たとえばこんな風に: rb_protect(rb_respond_to, &state 2/*argc*/, self, method) 現状、これをやるのってものすごくめんどくさくて。 あとついでに、rb_funcall_protect(self, method, &sate, argc, argv)もほしい。 これもめんどうだった。
コントリブーしてよせっかくだし
今頃 YARV が完成していたなら・・・
釣れないだろ、さすがに。
Gedit なんて使わないからどうでもいいや。
el4rがあるじゃないか。 素直にelispで書けと言われそうだが。
GPL汚染と嫌がらせのようなドキュメント不足を何とかしていたら Rubyの組み込みだったかもしれないのにな。
rubyはシンプルで美しい言語でいてくれれば十分だ 過去の互換性とかいらないから… あとGUI使いやすくしてくれれば授業とかで使えそうだ 最近は、見栄えも大切だと思うようになった 漏れがスクリプト言語に望むものなんて、即時実行出来ることと タイプ量と行数が少なければいいってことくらいだけど 一般にはそうはいかないらしい
>>407 GUIはとりあえずWebブラウザでいいのではないか。
それなりに簡単に公開できるし。
>>405 前にちょっと試したが、el4r は動かすところまで行かなかった。
作者の環境に依存しすぎだよ、るびきちタン。
無論、真面目に問題点を修正すれば動くだろうが、やってるうちに馬鹿らしくなってやめた。
Plamo 使ってるんだが、個人的には make じゃないのも痛かった。ゴミにしたままだ orz
あと、勝手に .emacs 弄られて嬉しいものなんだろうかねぇ。
EmEditorがWSHなVBS, JSでマクロ書けるらしいから ActiveScriptRubyに対応できるような 技術協力するとかしたら面白そうだな。
>>410 現に今でもActiveScriptRubyでマクロ書けるって
どこかで聞いたような希ガス
俺はWindowsMeだから試せないが
ところで皆、Rubyスクリプトを書くときにどんなエディタ使ってる?
俺は支援機能の便利さと見た目からJmEditorメイン、たまにVxEditor
以前はRDE使ってたんだけど不安定すぎて嫌になった
emacs + ruby-mode エディタの話題は定期的に出るね
>現に今でもActiveScriptRubyでマクロ書けるって >どこかで聞いたような希ガス VBSからASRスクリプト呼び出して実行することが可能ってだけ。 それを対応しているとは言いがたいな。
サクラエディタ 外部ソフト持ち込み禁止なのに 何故かこれは入っていた。 古いバージョンではあったがメモ帳じゃなくてホッとしたよ。
>414 そういやそのサクラエディタもWSHでマクロ書けるからASR使えるね。 ついでに編集中のファイルのディレクトリでコマンドプロンプト開く車輪を再生産してみたw
>>389 それは失礼しました。
>>390 > 保守的GCでググれ。それが定義だアホ。
それでは答えたことになりませんから、いまだあなたの主張は成立してませんね。
> お前の主張は、
> 「保守的GCが一切関係ない、直前の値が記憶されているから消えない」
> だろうが。
「271の」と書いている通り、271のnilを入れない場合において、GC.start直前の
Object.newの返り値が、ですよ。
> 直前の値がnilで上書きされてんのに、お前の環境では消えなかった。
> で、271の環境では消えた。
> なぜお前の環境で消えなかった?保守的GCが関係してるからだろうが。
そんなこと問題にしていませんが。371などで述べている通り、私の主張は
「271でnilを入れる・入れないで消える・消えないが変化するのは」
conservative GCゆえにではなく直前の値が保持されているから、です。
271でnilを入れた場合と338を対比してどうの、などとは言っていません。
当初から直前の値の保持の有無を問題にしているので、それと関係ない事柄を
問題に含めるわけがありません。そもそも338は私ではありませんし。
しかも、338は直前の値も消えた、というものではありませんから、
私の主張には全く関係ありません。
念のために書いておくと、この件に関する私の最初の投稿は
>>299 です。
「内部的な」レジスタと書いてあるのは、Ruby表面に現れない記憶(レジスタ
または変数)であって、CPUレジスタに限定したものではありません。
ま、インタプリタなんだからこんなことは言うまでもないですね。
>>392 ささだ氏が、
>>296 の「
>>271 のコードを見て、nilを付けようが付けまいが、
生成したObjectはGCされる可能性があるんじゃないか」を肯定したのなら
それは氏の誤りです。
なぜなら既に述べているようにRubyの評価器は直前の式の値を記憶していて、
nilを付けない場合にGCがもしこれを回収するならば、それはGCのバグだからです。
GC.startも当然その評価器の中から(念の為に書くと非末尾呼び出しで)呼ばれ、
RubyのGCは現状stop-the-worldで回収までやってしまいますから。
YARVの実装はまた別かも知れませんけどね。例えばレシーバを得る際に入れ子
呼び出しによらないようになっていたら、「直前の値」がレシーバで上書きされる
だろうとかね。いずれにせよ、今はYARVの話はしていないので関係ないですけどね。
xyzyy fundamental-mode
>>416 アホ。お前の主張も成立してないんだよ。
直前の値を保持してるという証拠を提出してない。さっさと出せよ低脳が。
1. nilがあっても消えない →「直前の式の値が記憶されるかされないか」 にかかわらず、他の要因によってGCされていない。 2. nilがあれば消える。 →「直前の式云々」が要因である可能性、 上の場合と同一の他の要因の可能性、 どちらもありうる。 1によって、「他の要因」が、何であれ存在することは確か。 「直前の式云々」の存在は、いまのところ確かではない。 「他の要因」が保守的GCであるという仮説があり、 これを採ると1と2の両方に説明がつく。 「直前の式の値が記憶される」という仮説があり、 これを採ると1のみ説明がつく。
>そもそも338は私ではありませんし。 >「271でnilを入れる・入れないで消える・消えないが変化するのは」 >conservative GCゆえにではなく直前の値が保持されているから、です。 はぁ。じゃあもうそういうことでいいよ。 で 「338でnilを入れる・入れないで消える・消えないが変化しないのは」 conservative GCだから、ということでいいね。
>>423 訂正
誤:
> 「直前の式の値が記憶される」という仮説があり、
> これを採ると1のみ説明がつく。
正:
「直前の式の値が記憶される」という仮説があり、
これを採ると2のみ説明がつく。
何が目的で話題を引っぱるのか知らないけど(結論は出てるんだよね?)、 相手を言い負かすのが目的なら2ch、特にIDのない板は不向きだよ
わたしまけましたわ
GC ネタ結論出てたのか、結局どうなのか良くワカンネ そんなに自信があるなら、ML 逝けよってのは禿同だな。
MLでも迷惑だろ。 議論してるやつはソース読んで納得したらクソして寝ろと言いたい。
431 :
271 :2006/03/21(火) 22:42:47
>>271 俺?別に俺は逃げてないが。逃げる必要も無いし。
とりあえず、ささだ氏の「(問題が起きる可能性はあるが)そういうのはレアケースなので,あまり問題になっていない」というので一応納得したので引っ込んだだけ。
しかし結局仕組みはよく分からないな。
直前値の保存かと思ったら環境によっちゃ再現しないみたいだし、
conservative GC主張者からは「conservative GCだから。以上!」の一点張りで具体的な解説は一切なしだし。
というか、なんで conservative GC で納得しないんだ?
何度諭しても聞き入れないヤツなんて見捨てちまえよ…
>>431 議論の前提になる知識もないし、資料を提示しても読みもしない、理解もしない。
話にならんよ。
じゃ あ な ぜ 放 置 で き な い ?
ちとスレ違いだけど UTF-8Nって認識精度が極端に低いのが困る… UTF-8Nでソースを書いていると、先頭に日本語コメントを置いても 認識を誤ることがしばしば (しかも使うエディタによって認識の可否が違ったりするし) 潔くSJISかEUCを使うべきなのだろうか っていうかrubyでもBOM付きUTF-8を扱えるようにならないのだろうか?
>>439 俺もそれに悩んでる。知らない間に文字化けしてて
動かなくなってるんだよな。
#!/unco/ruby -Ku でもだめダメなん?
エディタの不具合の話をしているの?
FedoraCore5でインストールパッケージ選択の際 Rubyだけが独立したカテゴリになってるな。 gccもperlもpythonもhaskellも同一カテゴリなのに。 その割には標準でoffになってるしわけわからん。
むしろ FedoraCore がわけわからん。
ということにしたいのですね :)
void ktkr
Rakeがやたら面倒そうだったんで もう少しシンプルな自分用ruby make作ってるんだけど こういうのって需要ある? require 'rubymake' include RubyMake TARGETS['application.exe'] = Target.new(''application.exr'){ `exerb.exe -v 'application.exr` } TARGETS[''application.exr'] = Target.new('*.rb'){ `ruby.exe -r exerb/mkexr 'application.rb` } TARGETS['*.rb'] = Target.new RubyMake.operate('application.exe')
450 :
449 :2006/03/23(木) 16:00:34
ところどころに余分なクォートが入ってるのはミスなので忘れてください
残念ながら、その程度ならRakeの方がてっとり早くて便利そう。
>こういうのって需要ある? それなりに使い込んで至れり尽くせりな機能が揃っていて なおかつドキュメントがちゃんとしてればあると思う。
至れり尽くせりな機能……難しい
evalではファイル名と行番号を指定できますが、procでも指定できたりしませんか? Proc#filename=, Proc#linenum= とかあるとうれしいんですけど。
自己レス
>>454 eval "proc { ... } ", filename, linenum
でできますね。
Rakeと大差ないなあ。 無理に記述はrubyプログラムにしない方がいいような気がする。 rubyでパースして実行すればいいじゃん程度で十分。 Makefile形式も読めて、RDocっぽい記述程度をネタとしては考えている。 仕様が練り上がってないけどイメージとしてはこんな感じ。 #!/usr/local/bin/ruby-make target = [test1.rb, test2.rb] prefix = /usr/local/ all: target test: exec(target, -test) install: install(target, 'bin', {:own => 'root:wheel', :mode => 0755}) #!/usr/local/bin/ruby-make :suffixes: .java, .class target = test1 all: target + '.class' exec("java", target) run: target + '.class' exec(appletviewer, target + '.html') clean: rm_rf('*' + '.class') :suffixe: .java: .class: exec("javac", "-deprecation", :depend:)
>457 なぜここに書くのかはよくわからないが、そうするなら原文を気にしないで 詳しく解説した方がいいと思う。 6.11 load と require はどう違いますか どちらも指定した Ruby プログラムを読み込むという点では似ています。しか し、 load が指定したファイルを Ruby プログラムとして読み込むのに利用す るのに対し、 require では拡張ライブラリの読み込みが可能で、拡張子が so や rb のもののみを探索します。また require では拡張子を省略できますし、 一度読み込んだファイルは二度と読み込まないようになっています。 load は 指定すれば何度でも読み込みます。 したがって、 require はライブラリのロードに利用し、 load は設定ファイ ルの読み込みなどに使うのが一般的です。また、両者はファイルのサーチパス も異なります。 とか。
>両者はファイルのサーチパスも異なります。 どうちがうのかも解説した方がいいんじゃまいか。
>>459 組み込み関数のところに書いてあるよ、たぶん。
リンクすりゃいいよきっと。
まあ、ここで議論する暇があったら、さっさと編集すりゃいいと思うよ。
462 :
458 :2006/03/24(金) 14:47:18
んじゃ書いてみたよ
サーチパスってどう異なるの?具体的におながいします。
loadだとライブラリを検索してくれないのかな?と思ったけど load 'yaml.rb' が正常に実行されることを見ると、そうでもないらしい
つーかloadに第二引数があったんだな 初めて知った
>458 GJ
467 :
デフォルトの名無しさん :2006/03/25(土) 00:21:33
良スレあげ
468 :
458 :2006/03/25(土) 00:34:54
>463 require は $: しか見ない。 load は指定したファイルが絶対パスのときは $: を見ない。相対パスのときは $: を見る。 いちおう load にも require にもリンクしてるし、リンク先を見れば一目瞭 然なのでいちいち書くほどでもない気がする。
Module#define_method で、特異メソッドを定義するにはどうしたらいいですか。 やりたいことは、Procオブジェクトを使って特異メソッドを定義することです。
470 :
デフォルトの名無しさん :2006/03/26(日) 11:54:51
>469 こういうこと? module DefineSingletonMethod private def define_singleton_method(name, &block) (class << self; self; end).__send__(:define_method, name, &block) end end module M extend DefineSingletonMethod define_singleton_method(:f){|*a| [self, a]} end p M.f(1,2) #=> [M, [1,2]]
471 :
469 :2006/03/26(日) 13:48:36
>>470 やりたいのは、モジュールの特異メソッドではなくて、インスタンスの特異メソッドです。
イメージとしてはこんな感じ。
class Foo
def initialize(name, &block)
define_singleton_method(name, &block)
end
end
obj1 = Foo.new(:f) { |arg| puts "<#{arg}>" }
obj1.f(10) #=> <1>
obj2 = Foo.new(:f) { |arg| puts "`#{arg}'" }
obj2.f(10) #=> `1'
それなら同じだよ モジュールも Module のインスタンスなんだもん >470 の DefineSingletonMethod の定義を読んでちょ class Foo def initialize(name, &block) extend DefineSingletonMethod define_singleton_method(name, &block) end end
いちいち extent することもないね class Foo include DefineSingletonMethod def initialize(name, &block) define_singleton_method(name, &block) end end
474 :
469 :2006/03/26(日) 15:01:10
どうもありがとうございます。やってみたらできました。 (class << self; self; end) で返されるのは、そのインスタンスオブジェクトの特異クラスということでしょうか。これがよくわからなかったので。 またそうだとして、インスタンスオブジェクトの特異クラスを取得する方法というのは、この方法しかないんでしょうか。なんかもっとスマートな方法があってもいいような気がするんですが。 あと、Ruby1.9からは Object#__send__ でもprivateメソッドは実行できないということらしいですが、その場合はinstance_evalを使って (class << self; self; end).instance_eval "define_method(name, &block)" ということでよろしいでしょうか。
そうそう、その self は特異クラス。正統なとり方は知らない。 本来見えちゃいけないものだからキレイな方法はないんじゃない? instance_eval で普通に文字列を渡すと name, &block が渡らない気がする。 1.9でもいけるマシな方法はあるのかな。eval を使えば出来るのは分かるんだが。 module DefineSingletonMethod private def define_singleton_method(name, &block) (class << self; self; end).instance_eval{ eval("define_method(name, &block)", binding) } end end
module DefineSingletonMethod private def define_singleton_method(name, &block) (class << self; self; end).instance_eval{ define_method(name, &block) } end end
pukipaってどっから落とすの? あの添削版が最新版?
478 :
469 :2006/03/26(日) 18:19:18
>>475 どうもありがとうございます。
>instance_eval で普通に文字列を渡すと name, &block が渡らない気がする。
Ruby1.8.4で試したところ、うまくいくようです。
>>476 なるほど、instance_evalはブロッックをとれるんですね。すげー参考になりました。
479 :
デフォルトの名無しさん :2006/03/26(日) 18:33:13
〜.rbのファイル名からインスタンスを生成する方法ってありますか?
>479何クラスのインスタンス?
eval("#{File.basename($0).gsub(/(\..*?$)/, "")}.new")
482 :
デフォルトの名無しさん :2006/03/26(日) 18:46:08
>>481 これってhoge.rbからhoge.newを行うだけですよね。
>>480 hoge.rbにHogeクラスが定義されてた場合に
hoge.rbのファイル名からHogeのインスタンスを生成したいんです。
んなもん、テキスト検索して class Hoge がマッチしたらrequireだかloadしてeval "Hoge.new"すればいい
const_getで思い出したが、クラス名からクラスを得るAPIが無いんだよな。未だに。
>>485 あんまり使うものでもないだろうし
どういう仕様にするか揉めそう
Classに限定するのかとか
スコープはどこなのかと
:: は許すのかとか
「ない」から使わないだけで、あればそれなりに使うんじゃ? 自ら実装したこともあるし、そういう質問を見たこともあるし。 仕様としては、eval("Foo::Bar") == class_get("Foo::Bar")になってほしい。 これがあらゆる意味で自然だし、議論の余地はないと思うのだが。
488 :
デフォルトの名無しさん :2006/03/26(日) 20:55:38
そんなことはまつもとに言えよとしかいいようがないな・・・
const_getの質問は前スレで出たんだっけか
eval("Foo::Bar") では何故ダメの?
-T1 ですら動かないからなんではないかと邪推
492 :
490 :2006/03/26(日) 22:49:32
class_get("Foo::Bar") だって -T1 で動かなくなる (する) んじゃないかと邪推するんだけど・・・
eval("Foo::Bar")は遅いし、意図がつかみにくいし、何よりダサいでしょ。 > -T const_get("Foo")は-T4でも動くんだから、const_get("Foo::Bar")だって動かない道理が無いよ。
> eval("Foo::Bar")は遅い その遅さがボトルネックになるほど頻繁に呼ぶようなケースがあれば教えて。 > 意図がつかみにくいし、何よりダサい それは主観ですよね。「私はそうは思わない」んですが。 > const_get("Foo")は-T4でも動くんだから、 え?
Ruby on HSPはまだですか? もっとGUIとか使いやすくしてください JAVAの方がまだ遊べます と言うわけで ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・)< Ruby on HSPマダーーー \_/⊂ ⊂_)_ \__________ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :| | .|/
Rubyのマニュアルそんなに悪くねーじゃんと思ってたんだけど、 今日zlibを調べようとしたら、「詳しくはzlib.hを見てください」って説明が多い・・・。 確かにひどいのかもしれないなあ。
プラットフォームに依存してない言語で 依存する機能を求めるのはどうかと思うw JRuby使えばいいんじゃないかな
>494 つまらない用事でいちいちeval()したくない、と思ってるのって俺だけ? そりゃまぁ、確かにRubyスクリプトで速度を語るのはナンセンスだけどさ。 ダサい云々はともかく、ではeval("Foo::Bar")とconst_get("Foo::Bar")(またはclass_get)と、 どちらが意図がつかみやすい? これがどちらも同じように見えるというのなら、確かに単に主観としか言えないね。 -T4については、聞き返すよりもまずやってみたら? っていうかどうみても煽りです。本当に(ry
YARVが解決することをいつまでも蒸し返さない
>498 ×プラットフォームに依存してない言語で ○Unix環境中心の言語で
>>499 「意図がつかみにくい」件については、
const_get があれば class_get とか module_get とかの alias 的なメソッドは
要らないんじゃないかということです。
-T4 については、やってみて eval と const_get が同じになりましたよ。
503 :
デフォルトの名無しさん :2006/03/27(月) 00:19:43
505 :
デフォルトの名無しさん :2006/03/27(月) 00:35:23
>>502 class_get/module_getが必要とは思ってないよ。
と思ってレス見返したらclass_get()を最初に言い出したのは俺だった。それについてはスマソ。
要望としては、const_get()が'::'を受け付けるようになってくれればそれで満足。
エイリアスやタイプチェックはいらない。
セキュリティについては手元で再度試みたらよくわからなくなってきた。
ただ、const_get()は単に「定数参照」でしかないので、セキュリティ面でeval()と比較すること自体ナンセンスなのは確かでしょ。
>>505 どっかで見た気がしてたが、本家のFAQだったか。
…なんで必要性を認識しつつも実装してないんだろう。不思議だ。
508 :
デフォルトの名無しさん :2006/03/27(月) 00:47:27
使うことをお薦めしないから使いにくくしているんじゃない? 理由は知らんけど。
>>503 WindowsだけならVisualuRubyでいいじゃない?
Delphiもいまさら…
>>507 日本語で質問出来るんだし逝ってこい
そもそも名前は class_get なのかな。 module_get じゃなくて。 module_get だと Class も含むのかな。
>>511 いや、だから const_get でいいじゃーん、という話に収束してきているわけで
>>495 勝手に組み合わせて使えばいいじゃない。HSPからRubyスクリプトの実行結果を
取得できないこともないんだから。
515 :
469 :2006/03/27(月) 08:24:50
>>478 なんか、結局おれのやりたかったことは、わざわざブロックから特異メソッドをつくるまでもなく、
instance_evalにブロックをわたせば済んでしまいました。
やりたかったことは、Procのselfがmainになってしまうので、これを別のオブジェクトにすることでした。
マニュアルを探しているとModule#define_methodがブロックを引数にとれるので、これで妥協しようとしてたけど、instance_evalにブロック渡すほうが直接の解でした。
あらためて
>>476 ありがとうございました。
Procというかブロック渡しはそういうものというか 呼び出し側のバインディングで処理が書けるのが嬉しいのだと思われ instance_eval は自制しないと分からなくなりがちなので おれなら第一ブロック引数がselfをとるようにしちゃう
evalを評価するときだけインタプリタを使う。 というのはさすがに富豪すぎますな。 とりあえずevalのコンパイル結果が再利用出来るようになっていれば、 なんとかなるんでないかと思いますが。
>>495 どんなの創造してる?
もっと詳しく
Ruby on DirectXとか作ったら需要ありそうなんだけどね
処理速度考えるとあんまなさそうな。 Ruby.NETでManaged DirectXできるしそっちのが先だな。
>>495 ,520
Rubyの人は言語には興味有るけど、それ以外には興味がない
HSPの人があまり言語に興味が無いのと逆かw
Rubyの不得意な分野=HSPの得意な分野だよな
と言うわけで
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< 便利ライブラリマダーーー
\_/⊂ ⊂_)_ \__________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
| .|/
GUIライブラリなら色々あるんじゃないの? RubyでGUIプログラミングって相性よくなさそうなので使ったことないけど。
RubyのGUIライブラリってオプソの典型的なリソース分散のドツボに陥ってるよな。
Ruby に限らず GUI ライブラリは開発が分散しすぎ。 どれも中途半端だから「じゃ俺が作る」と作り始めて そもれも中途半端だから別の人が「じゃ俺が作る」の繰り返し。
DBのインターフェイスとして「a>=13&b<=5&(c=100|d=200|(e<=40))|(a<30&a>=2)」みたいなのをパースしてDBを検索したいのですが 上手い方法が思いつきません。正規表現で最内の括弧だけマッチさせられないかやってみましたが出来ませんでした 何か良い処理方法、ライブラリ等あったら教えて下さい
>正規表現で最内の括弧だけマッチさせられないかやってみましたが出来ませんでした たぶんできるよ。kwsk
>>526 正規表現じゃムリじゃないだろうか。Racc使ってパーサ作るのがまっとうな方法だと思う。
/\([^()]*\)/
>>523 どの辺が相性悪い?
俺はMacのXcode+InterfaceBuilderがお気に入りだが
あれは言語の相性より開発環境だと思う
言語自体が不適ってあるかな?
相性悪いって言うか論外だな。 GUIしたいと思ったらRubyは選択肢には上らない。 言語が悪いとか悪くないとかどうでもいい。
>>531 理由は全く理解できないが
選択肢にないというのなら仕方ないな
ちなみに俺は5年ぐらい前にHSPを触ってたが
GUIに関してもやっぱりRubyのほうが上だと感じてしまう
何だかんだ言ってもApolloは強い
たぶん、ポトペタの IDE 前提の話をしてるんだろ。
>>530 の言う通り、環境の話をゴッチャにしてる無知様の言として流すのが吉かと。
534 :
526 :2006/03/27(月) 22:47:14
>>530 >俺はMacのXcode+InterfaceBuilderがお気に入りだが
わかるー。あれ、GUI作成に関しては最強の開発環境だよね。
HTML書くより簡単にGUI作れるんだもん。
あれをみると、JavaのSwingとかEclipseとか「なにやってるんだろ」と思ってしまう。
>あれは言語の相性より開発環境だと思う
>言語自体が不適ってあるかな?
たぶん環境も含めて言語といっているのでは?
そう考えると、最初からGUIライブラリがバンドルされているHSPやJavaは有利。
Rubyは自分でGUIライブラリインストールしなきゃいけない時点でやっぱ負けだよ、GUIに関しては。Ruby/TkはバインディングだけでTkが必要だし。
これはもう言語仕様とは関係ない話だけど、でも使う側からみたら大きな問題だと思うよ。
>>524 ,525
はげしく同意。決定版がないんだよね。XULRunnerが使えればいいんだけど。
>>535 > SwingとかEclipseとか
なんか物凄い勢いで間違ってると思う
>>536 なんで?GUIフレームワークとしてSwingを、開発環境としてEclipseを挙げただけなんだけど。
それとも「InterfaceBuilderに対応するならVisualEditorかMatisseだろ」ということ?
> たぶん環境も含めて言語といっているのでは? 言いたいことは察っするが、それ、変だから。 > Rubyは自分でGUIライブラリインストールしなきゃいけない時点でやっぱ負けだよ "お前にとって" "お前の中だけ" で負けなだけでしょ。 何でもかんでも載せりゃあ良いってものじゃないし、嬉しくない人も居る訳で。 本命は wxRuby?
UNIX周りの本命は未来永劫なさそうな飢餓 WinはVS.NETで吐いたAvalonなXML食わせればそれでおしまい。 とかわけもわからず言ってみる。
puts obj.to_s # objを文字列形式に変換 obj.to_s = "objの内容を文字列形式で指定" こういうインターフェースってキモいですか? 他に一般的な名前あったら教えてください。
>>540 前者はいいが、後者がキモい。
そんな風に指定できてしまったら、実際のobjの内容と乖離してしまいかねないと思わないか?
単に「入れもの」が欲しいなら、attr_accessor あたりを使うべし。
文字列を放り込む時のインターフェースは どういうのがいいのかという話で そのこと自体の是非はとりあえずおいといてください。
>>534 正規表現だけで括弧の入れ子を解析することが出来ないことを知っててやってるなら
まあがんばれ。
>>542 だから attr_accessor とか attt_writer とか。
>>543 べつに解析なんてしなくても、全ての括弧をSQL的に置換できればいいんだし。
gsubじゃなくて、subあたりで地道にループさせていけばOK.
いぜん、全く同じ目的の、そういう実装のコードを引き継いだことがあるんだけど、 バグがあった上に sql injection 回避するのがめんどくさくて、racc で書き直した。 まさに racc 向きだと思ったよ。
>>540 漏れなら Obj#description あたりにする。
>540 つMarshal
>>530 GCがMark and Sweepなのがちょっといや。
CUIだとそうでもないんだけど、GUIだといきなり固まるとイライラする。
>>540 Obj#to_xml=
とか言ってみる
問題はtoという一方向性を表す前置詞にあって
to_xmlにしたからといって問題は解決しないと思う
>>540 というわけで、toを使うのはキモい
obj#str=(value) とか
obj#set_str(value) みたいなインターフェースがいいと思う
> obj.to_s = "objの内容を文字列形式で指定" と書かれると、(独自形式の)文字列を元にオブジェクトを生成したいのかなと思ってしまうのだが。 そうだとすると俺ならクラスメソッドにしてこんな感じかな。 ObjClass.load_from_hogehoge(str) # hogehoge は何か形式の名前
独自形式を YAML に変えて取り込めば良いんでないかい?
逆変換可能ならasでいいんじゃないかな
>>543 正規表現というのがチョムスキーのタイプ3を指しているならその通りだが、
最近の言語の正規表現は拡張されているからどうだろうね。
perlならできるはず。rubyはしらない。
>>555 へー。
$s =~ /\A[\(\)]*\z/ が成り立ってるとして、
括弧のバランスがとれてる時だけ $s にマッチする正規表現はPerlでどうかくの?
>>542 インターフェイスというか名前だけの話なら、export, import じゃまいか。
マカってアフォだな。 JavaのGUI開発ツールを使ってない悪寒。 むしろ、IBが無いと何も出来ない方が痛いけどね。 独自のウィンドウ生成とか、IBの範囲外は手も足も出ない。 YAMLベースに独自形式も扱えるようにしちゃえば、YAML同様に扱えるよ。 わざわざYAMLを使う必要も無い。書式変だし。
ぐは、循環的な定義が出来るのか。 ちょっと大きな文字列を試したらすぐにスタック使い果たしたりしないんだろうか。 うーむ、なんか羨ましいから鬼車でもゼヒ。
>>558 >マカってアフォだな。
>JavaのGUI開発ツールを使ってない悪寒。
Javaユーザってアフォだよな。
Eclipseしか知らないで、IBもVBもDelphiも触ったことない悪寒。
>むしろ、IBが無いと何も出来ない方が痛いけどね。
むしろ、IBがあれば他に何もいらないけどね。
>独自のウィンドウ生成とか、IBの範囲外は手も足も出ない。
カスタムクラスつくってIBに登録するだけだよね。何がどうできないのか詳しく。
>YAMLベースに独自形式も扱えるようにしちゃえば、YAML同様に扱えるよ。
>わざわざYAMLを使う必要も無い。書式変だし。
ようやくRubyの話になったっぽいけど、なんの話?
>>563 ごめん、「Javaユーザ」じゃなくて「558」にしといて。
正直すまんかった。
>>555 たしか、Perl6では正規表現という名前をやめたんじゃなかったっけ?
拡張しすぎて、本来の正規表現の能力を大幅に越えてしまったからだとかなんとか。
Perl6 の話をすると鬼が笑う
regexって統一仕様ってあるの?
仕様とかじゃなくて数学的な定義があるんだよ。 でもまあ、後方参照マッチがある時点で既に正規表現から逸脱しているから、 そこのところは気にしすぎても仕方ないという話はある。
やべえ どうしても拡張性器表現って書き込みたくなった 許してもらえるとは思ってない みんなにはそれでも謝っておきたい
>>567 一応 POSIX というのはある。
数学的な定義としては「正則表現」って名前の方が適切なのかな。
Wikipediaから引用すると、
アルファベット A={a_1,...,a_n} 上の正規表現とは
1. 空記号列 ε は正規表現である
2. a_i(Aの任意の要素)は正規表現である
3. X と Y が正規表現ならば、
1. X|Y も正規表現である
2. XY も正規表現である
3. {X} も正規表現である
だって。後方参照マッチが逸脱してるってのはどれにひっかかってるんだろう?
つ【Nerodeの定理】
>>570 たぶんその定義の一番下は
3. {X}* も正規表現である
かな?(クリーネスターってやつ)
全ての正規言語は
>>570 の正規表現を組み合わせるだけで必ず表現できるけど、後方参照マッチとかが入るとその正規表現をどう組み合わせても表現できない。
後方参照マッチする言語は「正規言語ではない」なんていう言い方をする。(文脈自由言語ではあるけど)
>>568 の言う「逸脱してる」ってのはそういう意味じゃないかな。
証明キボン
∵ ∴
誤解する人がいるといけないけど、後方参照があることが問題なんじゃなくて、 後方参照マッチね。たとえば Ruby では、 /([^,]*),\1/ とか書けるが、これは正則言語ではないですよということ。 570は正則表現の正しい定義だが、なぜ違うかというのは、そのどれかにひっ かかるからダメとかいうシンプルな理由じゃないよ。 証明がほしけりゃ反復補題で調べれ。
そうなの? 例えば "a"*(n**2) とか "a"*n + "b"*n あたりがポンプ出来ない例として よく紹介されてるけどこういう文字列は \1 使えばちょうどマッチできるの? pumping lemma は必要条件だから backreference でちょうどマッチできて pump 出来ない例を持ってこないと駄目じゃね?
正直すまんかった。 確かに w,w (w ∈ Σ-{,}) はポンプ出来んから正則じゃないな。サンクス 現実の処理系では |w| < ∃n だから実際は正則。
正規表現がリテラルにあるように、BNFがリテラルとして使えたら便利だと思わないか?
% 記法が拡張できるようになればあるいは
C++のboost::spiritみたいに演算子オーバーロードで頑張ってみるとか
>>579 イメージがまったくわかないんだけど、なにかサンプルあげてもらえるとうれしい。
rubygemsでインストールしたライブラリをautoloadで使うことはできますか? 例えば gem install hogehoge を実行して require 'rubygems' autoload :Hogehoge 'hogehoge' とすると、 no such file to load -- hogehoge (LoadError) というエラーになります。 もちろん require 'rubygems' require 'hogehoge' はうまくいきます。 rubygemsはautoload未対応なんでしょうか。
Appoloインストーラの関連付けは凶悪だな。 Appolo追加してデフォルトの関連付けを変えるだけでいいのに Editや他の操作もすべて消滅した・・・orz
>>584 もしかして:Apollo
Tcl/TkみたいにRubyと言えばRuby/xxって言えるくらいのがあればね
Railsだけじゃ、廃れるのも時間の(ry
なんか GUI 厨が必死だな。 Ruby に GUI を期待してる奴の方が少ないと思うんだが。 気のせい?
>>587 いや、GUIは欲しいよ。
ブラウザも含めれば問題は減るけど。
処理に時間が掛かるようなスクリプトだとレンタルサーバのCGIで動かすのは無理だしな。
あとX?HTML吐くのとGUIコンポーネントをオブジェクトとして操作するのでは結構違いがある。
Railsだとスクリプト<->erubyの間で意識を切り換えなければいけないし。
まあリッチになったらなったで要望のハードルがあがって大変になることもあるだろうけど、ともかくGUIは欲しいと思う。
>>589 はげどう。特にゲームつくりたいという人は多いぞ。
そんなときGUIに弱いRubyは負け組。せっかくいい言語なのにね。
なんでGUIを拒否するのかわからんけど、Rubyの活躍の場を広げることができるチャンスをわざわざ否定するやつがわからん。
かといって、HSPがGUIに強いとは到底思えんが。 なにあのバッドノウハウの塊は。
ゲームをスクリプト言語で作ろうってのがよくわからん
> いや、GUIは欲しいよ。 > ブラウザも含めれば問題は減るけど。 > 処理に時間が掛かるようなスクリプトだとレンタルサーバのCGIで動かすのは無理だしな。 よくわからんのだが、レンタルサーバのcgiと手元のGUIとどういうつながりが? CGIを通じてdRubyですか?w
2行目と3行目の間に 「しかしローカルで鯖立ては面倒だし、」 を追加すればOK
まーゲーム作るのにあえてRuby使おうとは思わんけどな 手軽に作るんだったらFlashとか使う それでもRubyにも手軽に使えるGUIのスタンダードがあったら あったにこしたことないけどな
3Dでマシンスペックが要求されるようなものならスクリプトは使わないけど そうじゃないゲームはいっぱいある テーブルゲーム シミュレーション RPG などなど ロジック書くのが楽ならスクリプトもいいよ
152 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/29(水) 20:28:11
>>148 >obj==nilがobj.nil?になったところで
違う、obj.equals? nil と等しいと考えないと
153 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/29(水) 20:32:40
超秋田。
154 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/29(水) 21:07:02
>>151 > 「○○がない理由」はあくまで「○○がない理由」であり、
> それがどうして「Object#nil?やArray#firstがある理由」の補強になるのでしょうか。
それは、
否定する根拠が再反論によって消滅したため、
> いまのところ、すでに示された理由を否定する理由はありません。
となるからです。
あと、話が分からないときに比喩を使うのは、混乱の元ですからやめましょう。
> 「裏の裏は表」ということですか?今の場合は「右の右は後ろ」でしょう。
という文を、具体的な文にしましょう。
155 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/29(水) 21:31:53
議論してる奴ら全員Ruby本スレに行け
ていうかそろそろ議論止めろ
156 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/29(水) 21:43:53
本スレに湧かせないようにしてるのに何を言い出すか
157 名前:デフォルトの名無しさん[sage] 投稿日:2006/03/29(水) 21:57:03
だからここは初心者スレなんだってばww
こんなよくわかんない空気かもしだしてたら、質問したくてもしにくくなるんじゃない?
まずは標準で使える文字入力ダイアログボックスを用意するんだ。
ただGUIっつーても、WindowsなのかLinuxなのかで結構違う気がするんだけど。
RubyCocoa でいいじゃん。 =終了=
いやいや、そこでこれ つRuby/SDL
いやいや、そこでこれ つCurses
gameといえばBattleField2がPhythonで色々動かしている みたいだよ。他にも描画以外の振る舞いはスクリプトの方が 効率良いんじゃないかねえ。
gameといえばRGSSが(ry
ゲームではなにかしらスクリプトとか使うから、最初からスクリプトだと楽かもわからんね
何を言っているんだお前は
> ライブラリ編が……。 ワッフルワッフル
ブロックについて質問。
[翻訳]RubyについてJavaプログラマが知るべき10の事柄
http://d.hatena.ne.jp/brazil/20050816 >ブロックはオブジェクトではありません。
>しかし、そこに大差はありません。
>それを必要とする時までには、自動的にProcオブジェクトに変換されるからです。
ブロックはProcオブジェクトだとおもっていたんですが、違うの?
def foo(&block)
p block.class
end
foo() { 1 } #=> Proc
これは自動的にProcオブジェクトに変換された結果?
rubyでゲーム作る理由は無いな。 むしろゲーム作るから、ゲーム作れる環境に合わせた言語を選ぶ方が正しい。 目的はあくまでゲームであってrubyじゃない。
>611 &block で受け取る段階で Proc オブジェクトになったはず。 引数として受け取らず、 yeild でブロックを実行すれば Proc にはならない。
>>612 Rubyを使うことによってゲームが作りやすくなるなら
Rubyでゲームを作る理由はあると思うよ
>Rubyでゲーム 少々面倒だが組み込みRuby
>>613 さんくす。
じゃあyieldで実行したとして、Procじゃなければ何なのでしょうか。
Blockクラスというのはないし。
>Rubyでゲーム コンパイラ作成競争
Rubyでゲームだと現状の選択肢は RGSS(RPGツクールXP) Ruby/SDL Ruby/OpenGL Miyako(旧EGSR) ぐらい?
>>618 Ruby/DirectXって無かったっけ。
もしくは Apollo + Delphi用DirectXコンポーネント とか。
>>616 block だね (Blockじゃなくて)。
Confabulator とか Widget を Ruby で書けたらな と思わなくもない まぁだいぶ js にも慣れたけど
>>622 JavaSrciptはJavaScriptで奥が深くておもしろいよね。
Time で任意のタイムゾーン扱えるようにならないかな。 libc が utc と localtime しか扱えないからなのかな。
>616 ブロックは「そういう言語構造」。if とか while がクラスやメソッドでないようなもん。 でも「オブジェクトとして扱いたければ自動的に Proc オブジェクトに変換 されるから気にする必要なし」ってのがもとの文章。
PR第2版てピアソンじゃないんだ。まあ1版は誤植の嵐だったからな。 その方がいいのかも。今度は頼むよまじで。
しかし「オブジェクトじゃないけどオブジェクトと考えて問題なし」って誤解を招きやすいとは思う。 「ブロックでさえもオブジェクトです」とでも書いたほうがより現実に近いし、誤解も招かないよなぁ。
嘘じゃん。
>>624 Windowsにzoneinfoがないからじゃなかった?
>>626 でも翻訳者、監訳者は変わらないしなぁ。悪くなることはないだろうけど。
>>631 タイムゾーン情報のアップデートはどうすんの?
混乱するからマニュアルでとある部分を隠しリンクにしろとか、 嘘書いた方がわかりやすいからそうしろとか、もうねw
>>632 全部自前でアップデートすればいいじゃない
>>634 だれがどんなタイミングでどっから情報をとってきて?
zoneinfo なくても Time::now.timezone = + 9 * 3600 とかでも良いんだけどな。
>>637 んなもんなら、Time#+でいいんじゃないか。Timezoneとは話が別。
639 :
616 :2006/03/31(金) 18:55:18
>>619 ,621,625
ありがとう。そういうもんだと思うことにします。
>>627 同意。ifやwhileは制御構造だからオブジェクトとはならないけど、ブロックはオブジェクトとしたほうがすっきりする。
>>638 それだと time.rb の Time#iso8601 や Time#rfc2822 が使えないですよね。
>>639 直接MLに投稿すれば一発で解決するものを、何だって遠回りな手段を選ぶのか、
その思考回路からして理解できない。
MLって面倒臭いと思うけどな。 わざわざsubscribeしないといけないし、 自分のメアドや名前晒してメール出さないといけないんだから。 2chで気軽に書き込めるのが楽でいいよ。
2chは嘘が多い
各々好きな方でやれ いじょ
>>640 意味不明。Timezoneとは関係ないだろ。
>>643 しかし、マニュアルに嘘を書いてくれと言われてる今日この頃。
>>646 ブロックのことか?
「よく見ようと思って目を凝らすと暗黙のうちにオブジェクトに変換され、結果的にオブジェクトにしか見えないモノ」をオブジェクトと書くのが「嘘」だと?
>>647 Ruby レベルでいくら目を凝らしても真実は見えん。
C言語ソース嫁。
>>647 それはどう考えてもウソだろ。
シングルトンメソッドがオブジェクト特異的だからって、プロトタイプベース言語と
同様にクラスでなく、オブジェクトに直接定義される…と書くのと同じくらいには。
648も言っとるが、疑問があったら、とにかくソース嫁。話はそれからだ。
>>648 来ました!何かあるとすぐ「インタプリタのソース嫁」!
これだからRubyistは嫌われるんだヴォケが。
じゃあ「nil,true,false,Fixnum,Symbol等も全てオブジェクト」も嘘だな。 真実は「Rubyレベルではオブジェクトのように振舞うとある定数」だろ。
つーかソースも読めんのに、プログラム言語使うのが無謀。 アプリケーションでも使っとれ。
C言語書くときはコンパイラ自体とコンパイル後の機械語読めないといけないのか
>>652 嘘じゃないよ。例えVALUEに埋め込まれていようが、オブジェクトはオブジェクトだ
>>655 なるほど。
「オブジェクトのように見え、実際にオブジェクトとして扱えるモノ」をオブジェクトだというのは嘘で、
「オブジェクトのようなモノとして振舞うが、実際にはオブジェクトとしては扱えないモノ」をオブジェクトだというのは真実だと主張するわけだ。
またやってるよこいつらわ
>>656 特異メソッドを定義できないだけで、実際にはオブジェクトとして扱えるだろアフォ
お前はnil,true,false,Fixnum,Symbolを非オブジェクトとして扱ってるか?
頭使ってから発言しなさい。
>>658 おまいの言うとおり本物のオブジェクトだったらよかったんだがなぁ…。
こいつらが「ニセモノ」なせいで、taintフラグをたてることが出来ないのはご存知?
おかげでRubyのセキュリティシステムは信用できないわけだが。
>>651 C言語やSchemeとかなら仕様が定められているからそちらを読むという手がある。
しかし、Rubyは実装以外に仕様書は存在しないからソース読まないと。
LLでもECMA Scriptとかは仕様書あるんだけどねぇ。
まぁ、言うことが「ソース嫁」から「仕様書嫁」に変わるだけだと思うが。
「オブジェクトとして扱う」ってどういう意味なの?
そんなのに汚染フラグが立てられなくても、大した影響は無いだろ。 Rubyのセキュリティシステムはもっと根本的なところで信用できるものではない。 バグで落とせるし。
> バグで落とせるし。 極端な一般論でお茶を濁すアフォ発見。
極端じゃねーよアフォ。
>>660 kwskもなにも、そのまんま。
例えば、ファイルから読み込んだデータは「汚染されているべき」なのだが、
getc, each_byteなどで読み込んだデータはtaintフラグが立っていない(汚染されていない)。
だから、これらを「本来汚染チェックをするはずの操作」に渡すときは、自前で汚染チェックをしなければならない。
これがRubyのセキュリティシステムの、その言語仕様レベルにおける欠陥というわけ。
システムのバグならPerlにもPythonにもPHPにもある(はず)だが、これは仕様なのでどうしようもない。
>>667 taintのような機構がPerl、Python、PHPに無いので、比べるお前はアホ
>>669 taint機構はPerlにインスパイアされたと知った上での発言か?
じゃあ、taintのような機構がPython、PHPに無いので、比べるお前はアホ、で宜しいかね?
>>666 こいつらハズカシス
_ ひろのぶ (2006-04-01 15:35)
「経験と資産の蓄積がものを言います」じゃ、彼らの最初の選択肢はCOBOLのはずだ。なんでPerlなんか使うんだろう:-P
_ び (2006-04-01 16:01)
「馬齢を重ねる」なんて言葉もあるんだけどなぁ... 挑発的な割には思慮の足りない言説は見苦しいものです。
志村ー日付日付と書きたいワタクシ(w
是非、書いて来いw
日付以前に、ぱるまの記事の著者を見ようよとw
>>676 今日はまだ3/32だから…4/1は明日?
>>675 その前にURLをみるべきだと思うが、もう頭に血が上っしまってダメポなんだろうなぁと。
つかRubyユーザってperlユーザとの間に溝があることが図らずも発覚したというか、痛いというか。 語るに落ちるっつーかね。 あの書き込み自体ネタかと小一時間以下略
>>679 一部を見て全体もそうだと決め付けるお前考えの浅さに驚き。お前も痛い。
それとも、お前の書き込みもネタというかw?
>>680 すまんな、「あそこに書き込んでる」の一文が抜けてたよ。
「あそこに書き込んでる一部の」な。ホント考えが浅いつうか…
やれやれ
YAMLで日本語文字列を出力しようとすると、変なエンコードがされて読め ません。無理やりでも良いので、「そのまま」出力する方法は、ありませ んか? YAML::Store で { :a => 'あ' }のようなハッシュや ['あ','い']の ような配列が出力できれば、それでいいです。 ためしに、String.is_binary_data? を再定義してみたけど、だめでした。 to_yamlの再定義でも、エラーが出てだめでした。 def to_yaml(opts={}) "--- " + self.to_s + "\n" end
>>684 rubyのバージョンは、1.8.4 です。
syckだからなぁ。
YAML は UTF が仕様だったと思うが
>>687 sjisでもeucでもutfでもおんなじなんですが、YAML::Store.newのオプションの
:encoding が実装されてないみたいなんで、無理やりやらないと駄目だと思い
ます。
お試しコード ーーーーーーーーーー #! ruby -Ks require "nkf" require "yaml/store" s = "ああああいいいをいいういう" db = YAML::Store.new( "test_yaml.yml" ) db.transaction { db[ "u" ] = NKF.nkf( "-w", s ) p NKF.guess( db[ 'u' ] ) == NKF::UTF8 } ーーーーーーーーーー --- u: !binary | 44GC44GC44GC44GC44GE44GE44GE44KS44GE44GE44GG44GE44GG
YAMLはutfなのか。 世界視野としての仕様としては正しいけど、個人的にはJISにしたいからヲレ独自フォーマットに改変にしよう(w
>>692 基本的な正規表現もわかってないやつに、何を期待してる?
>>691 データの保存形式としてはまだ安心して使えない
ってことだよね。us-ascii だけで設定だけ記述
するのが正解だと思うよ
Perl とか Python の YAML 実装はもうマルチバイト
周りの問題とか解決しちゃってるのかな?
>>694 Syckを使ってるかぎり、一緒だろう。
そらそうだ おれが言ってるのは Syck 以外の実装の話
YAMLってあんまwritableじゃないね。 えぢたでガリガリ書いてる人っているの?
yaml-mode が欲しいよなぁ
emacs使いか。 漏れはウェブ経由で弄って、rubyスクリプトに整形させてる。
「YAMLは、XMLよりイイ」とか言ってたやつは、XMLに謝罪しろよ
YAML は場合によって XML よりイイ
>>698 オートインデントを利用してJmEditorでガリガリ書いてる
しかし、できればスペース以外の記号で
インデントを表現したいと思うことがある
行頭に>記号をつけるとインデントとか
JSON にするのがいいんじゃないだろうかと思う今日この頃
俺もそう思う。 のだが、システム運用者とかには YAML のフォーマットは受けが良いみたいなのよね。
sexp最強
そういうことなら sexp リーダを標準添付して欲しい。
JSON::Store を標準添付してください。
>>706 まずは名前を変えるんだ。話はそれからだ。
etheRapeとかたまに変な名前つける奴いるよな
エーテル猿
BrainFuck
XMLはあまりに可読性が悪過ぎる。 テキスト読み込んだ方がマシ。
rubyの成分解析結果 : rubyの40%は言葉で出来ています。 rubyの34%は情報で出来ています。 rubyの24%は度胸で出来ています。 rubyの1%は欲望で出来ています。 rubyの1%は海水で出来ています。 意外とあってるかも。
>>713 文字化けして、データが壊れるYAMLより、100倍まし。
テキスト>XML>>>>>>越えられない壁>>>>>>>YAML
>>715 アフォか。
XML はドキュメト等、YAML は設定ファイル等に向いてるって Matz タソも言ってと思う。
用途次第だって上にもあったろうが。
というか文字化けって、YAML というより、単に Syck がヘボいだけじゃないのか?
>>716 厳密に言うと Syck はパーサだから関係ないような。 Emitter は pure Ruby だよね?
それはともかく、「文字化けして、データが壊れる」ってのは嘘だよね?
>>713
XMLは人力で読むものじゃない。 と何度言ってもMatzはわかってくれません。
日本語がバイナリでエンコードされてしまうという話は聞くが、
文字化けというのは初耳だ。kwsk
>>713
720 :
719 :2006/04/04(火) 09:48:20
フォーマットは何でもいいけど 永続化ってオブジェクトのプロパティの追加と削除ですぐヘタるから いまだにiniファイルでチマチマやってる。
722 :
717 :2006/04/04(火) 10:02:33
>>717 いえ、壊れます。
文字化けか改行か原因は不明ですが、YAML::PStoreでは、ある時突然、壊れます。
{:BestWidth=>1000} とかやっても、壊れるときは壊れます。
BestWidth を忘れてたら、確実に壊れます。
YAML::PStoreのせいか、syckのせいか知りませんが、日本語を保存すると、
再度読み込もうとしても読めないことが多々あります。
>>723 「BestWidth を忘れてたら」がよくわからない。
あと、もし可能であれば再現コードぷりーず。
「なんかわかんないけどこわれる」だけではちょっと俄には信じ難いです。
>文字化けか改行か原因は不明ですが おいおい「文字化け」って明言してたやつはどこいった? そりゃ、どんなファイルだって壊れるときは壊れるよな。
あまずは環境とお前のコードを疑え。ライブラリは一番最後だ。 と言い切れないのがsyckクオリティ
忘れる方が悪いとしかいい要が無いなあ。 ヲレラッパーでも書いて自動的に実行するようにしとけばいいじゃん。 基本的にスクリプトは楽するために書くモノだよ。
>>723 ruby -vの結果とどうインストールしたか、その「確実に壊れる」というコードをだしてくれ。
$ ruby -v ruby 1.8.4 (2005-12-24) [i386-freebsd4] ruby 1.8.4 (2006-01-31) [i386-cygwin] どっちでも現象は、同じです。 データは、18Kbyte以上あるので出せませんし、内容を出すとプライベートな ことが分かるので出せません。 エラーコードとしては、こんな感じ。このときのデータは、:BestWidth=>10000を 付けて書き出したら正常に読み込めました。 /usr/local/lib/ruby/1.8/yaml.rb:133:in `load': syntax error on line 87, col 38: `8FW" (ArgumentError) 該当行の前後10行程度を抜き出してテストしてみると、再現しません。
733とは別人ですが、再現しました。 #!/usr/local/bin/ruby -Ks require "yaml/store" require "nkf" a = Array.new(1000){["#{rand}", "Rubyについて Part 19"]} db = YAML::Store.new( "store_test.yml" ) db.transaction { db['date'] = Time.now db['a'] = a } db.transaction { p db['a'] == a } $ ruby-1.8.4 -v test_yml.rb ruby 1.8.4 (2005-12-24) [i686-linux] false $ ruby-1.8 -v test_yml.rb ruby 1.8.4 (2006-02-12) [i686-linux] true $ ruby-1.9 -v test_yml.rb ruby 1.9.0 (2006-03-05) [i686-linux] true というわけで、開発版では修正済みのバグのような気もします。
>>721 俺もだ
汎用性があるのはいいんだけど、仕様変更に弱いんだよなぁ
>>731 文字列がShift_JISだからじゃなくて?
737 :
てけとー :2006/04/04(火) 23:57:22
RubyでGUI周りのプログラム書きたいんですけど、 何か良いツールキットみたいなのがあったら教えてください。 簡単なツールとかゲームとか作ってみたいので。
DelphiかC#かHSP使え。 Rubyは最悪の選択肢だ。
JAVAとかもいい選択肢だぞ Ruby開発者は言語以外の事に、あまり関心がないからな
gui考えるとjavaは現実的ではあるね。 DirectX描画機能付きのwinrubyなるものがあれば、遊べるかもね。 何かシフトJISの原因ポイね。そう言う不具合あるから、JISが出来たような(w 多分、全部2byteだと問題ないと思う。1byteと2byteの切り換えで問題が出てる。
良く分からんけど、文字化けでデータが壊れることは、あるんだよね?
対応しているはずのUTFはバイナリ判定されるのに、SJISはされないって
こと?
>>740 2byteだから問題ないんじゃなくて、バイナリだから問題ないのでは?
>>740 「そういう不具合があるから」、EUCができた、ですね。
2bytes文字が途中で折り返されて〜、とか、
あとは「表」等のyen sign問題だと予想。
UTF-8じゃないstringはBASE64かけて保持するとか、
ちゃんと円記号等をエスケープするとか対策すればいいだけなきもするんだけど。
734の文字列の、どのあたりがシフトJISの問題なんですか?
Net::FTP#puttextfile を実行しようとすると止まってしまうんですが、 何で? putbinaryfileは正常に動きます。 cygwin上の、1.8.4 で実行しています。 Net::FTP.open( host, user, pass ) { |ftp| ftp.putbinaryfile( filename ) # <= 正常 ftp.puttextfile( filename ) # <= 異常。CTRL+Cも効かない }
734テストしてみたけど、UTF-8でも問題になるね。 全部2byteでもダメだった。 失敗した時のstore_yaml.txt見てみると、途中で切れてる。
>>737 Windowsだけで動けばいいならApolloがお勧め
俺は738、739の言うほどRubyがGUIに不向きだとは思ってない
というかむしろGUI向きだと思っている
「簡単なツールとかゲームとか作ってみたい」なら尚更だ
漢字コードのことを分かってない人が多すぎ。 i18nとかm17nとか、もっと勉強してほすい 何でもかんでもsjisのせいにしてればいいってもんじゃない。
>>747 是非とも _why に言ってやってください。
>>746 Apolloってインストールしないと使えなくない?
zip解凍して、requireするだけで使えないと使う気起きん
使わなければいいのでは?
RubyでGUIは向いてないって事で
スクリプトで GUI が向いてるのってなんだろうね。
Tcl
アポロって.dfmそのまま食えたりするの? GUIはDelphi IDEで作って それをRubyで読み込んでイベントハンドラ書くんだったらかなり使えそうな気が。 逆にどんなライブラリでもコードでUI記述するのは勘弁だな。
コードでUIの最強は実はHTMLと言ってみるテスト
>>751 Rubyを含まないzipアーカイブは存在する。
msvcrt用のはずだがmsvcrt71で動くかは知らない。
>>757 sample\dfm_to_rb.rb
>>747 昔のYAMLは「表」とかで普通に壊れてたのよ。
さすがに今は対策入ってるみたいね。
>>761 知らないのか?HSPはオブジェクト指向を捨てて
関数型に移行しつつあるらしい。
画面遷移を全部モナドで記述するっていうし。
うかうかしておられんぞ。
>>762 いいえ、関数も定義しにくい糞言語でしたよ
昔HSPでツール作ってたが… 何つーか昔のBASICの雰囲気かな? プログラミング初心者がちょっとしたミニゲーム作る言語。
766 :
デフォルトの名無しさん :2006/04/05(水) 22:19:41
そういやBASICの頃はGUIなんてコードで書くのがあたりまえだったんだよな〜ナツカシス 現実的ではないけど、GUIをコードで書く文化が継承されていたら ベーマガとかも、もうちっとは長生きしたんだろか
>767 やっぱPC立ち上げて最初にBASICインタプリタが起動しなきゃ。 しかしスクリーンエディタがあってインラインで実行できてプログラムも記録できて、って ある意味立派なIDEだったんだなぁあれ。 ……PC立ち上げるとirbがいきなり起動ってどーだろう。だめですかそうですか。
>>768 スタートアップに irb.bat へのショートカットを入れておくといいと思います。
全画面にしておくとなおよし。
Windows 前提なのにワロタ
/etc/rc に irb を入れておくといいと思います。嘘です。
スレ違いなのでこっちに移動して、 個人的にはRuby.NETが本命だと思ってるんだけどな。 GUI含めて潤沢な多言語向けクラスライブラリの土壌の上にこそ 言語仕様で勝負できるRubyの特徴が生きると思っている。 というわけで作者がんばれ。 # といいつつ関数型言語として進化しつつあるC#3.0に一番期待w
773 :
デフォルトの名無しさん :2006/04/06(木) 17:35:11
土台が腐ってるプラットフォームは意味ないな。
HSPか!
>>772 同じくスレ違いなのでこっちに移動して。
初心者スレ
>>294 税金を渡した方は評価も成果も発表して仕事を完了してるからね。
その評価および成果方向によると、さらに完成度を高めて早期に公開、ということになってるから、その後どうなってるのかが気になってるわけだが。
結局.NETなのね Pythonはだいぶ先を行ってるけど、スクリプトかも微妙じゃないの? MatzってWindows使いじゃないんでしょ きっとHSP大好きな凡人の気持ちが分からないんだよ で、凡人でも悲しいので今日Linuxって言うのいれてみようと思います Rubyの人たちは、どのディストリ使ってるんだすか? Debianサーバーが乗っ取られたのは覚えてるんだけどコレでいいのかな…
a = Array.new(1000){["#{rand}", "Rubyについて Part 19"]} じゃなくて、 a = Array.new(1000){["#{rand}", "Rubyについて Part 19"]} だと問題なかったりしない?
>>778 Windows使いの俺にも
HSP大好きな凡人の気持ちがよくわからないんだが
Ubuntuにしとけよ。 面倒ないから。 XとかいらんのならコツをつかめばGentooが楽。
今日もスレ板問わず精力的な布教活動ご苦労様でございます。
そういやRubuntuってどうなった?
UbuntuやGentooは信者が痛いからな
それをこのスレで言うかw
このスレの信者の痛い発言を挙げてくれ
>>778 Windows使ってて、かつGUIを必要としないなら、cygwinかcolinuxでいいと思うけどなー。VMWareという手もあるし。
へたにLinux使うとエディタでキレると思う。
俺はCygwin版でエディタは秀丸。 大規模なもの作らないなら、こんなので十分。
そんな報告しないでいいです
俺はCygwin版でエディタはterapad 100行以下のスクリプトなら、こんなので十分。
792 :
デフォルトの名無しさん :2006/04/07(金) 22:49:19
俺はCygwin版でエディタはterapad 100行以下のスクリプトなら、こんなので十分。
793 :
デフォルトの名無しさん :2006/04/07(金) 22:51:42
俺はCygwin版でエディタはterapad 100行以下のスクリプトなら、こんなので十分。
794 :
デフォルトの名無しさん :2006/04/07(金) 22:52:14
俺はCygwin版でエディタはterapad 100行以下のスクリプトなら、こんなので十分。
795 :
デフォルトの名無しさん :2006/04/07(金) 22:52:52
俺はCygwin版でエディタはterapad 100行以下のスクリプトなら、こんなので十分。
100行以下ならメモ帳で十分使えるよ。
797 :
デフォルトの名無しさん :2006/04/08(土) 01:21:28
そんな報告しないでいいです
viとかemacsがあるのにキレるわけない
俺はOSX付属のrubyでエディタはmi 数行スクリプトなら、こんなので十分。
emacs を覚えとけば、Win/Unix/Mac どれでもいけるじゃん。 ruby-mode もあるし。
だが覚える手間がかかるのではないか
emacsは操作に慣れるのに手間がかかる 確かにあの非Windows的なキーボードストロークに慣れれば 便利に使えそうな感じはするんだが…
>>802 他のエディタが全然使えなくなる諸刃の剣
Unix 系のツールには Emacs キーバインドで
操作できるものが意外とあるから、使えると
世界が広がるよ
世界が狭くなるという一面も。
Emacsの良さは周辺環境が劣悪なら劣悪なほど生きてくる。
そんな報告しないでいいです
死を待つばかりのIRIXでも emacsでルbyスクリプトかけてます
ところでemacsって何て読むの えまくす?
るびぃえでぃた
俺はE-MAXって呼んでるぜ!
そんな報告しないでいいです
>>810 懐かしいな。(昔、 Emu 社の廉価版サンプラーでそういうのがあった)
おれE-mulatorって呼んでるぜ
いいかげんつまらん
プロジェクトのサイトのトップページが RDOC だと萎えるのは俺だけ?
Ruby-win32 + xyzzy + Ruby-mode な、俺がきましたよ
神の自己展開キター
うが、リリースまだ?
マカの時点で負け。 今時代はXPだし。マカも喜んでXP入れてる。 rdocブラウザって作るとおもしろいかもね。 ルビキチのサイトはことごとく、HTMLの代わりにrdocになってるとかさ。 にちゃんも有る意味datサイトなんだけどね。ねらーはdatブラウザ使ってるし。
いまだに2000ですいません
Ruby使うのに最適な環境はXPですか。 そうですか。
>821 (´・ω・`)つなんでやねん
eXtreme Programmingには最適なんじゃね?
2000じゃマクで動かないはず。
初心者質問スレを見てて思ったんですが Marshalってなぜあんなにコロコロ仕様が変わるんでしょうか おかげで怖くてPStore使えません…… Marshalといいcgi.rbといい Rubyは互換性に関する考え方が何かおかしい
>>825 互換性が必要な箇所で Marshal を使う方が間違いでしょ。
元々そういう(後方互換性しか保証しない)仕様なんだから。
cgi.rb については同意だけど。
まあ保存はヲレフォーマットでテキスト保存が最強ですよ。 採用時に無いからとはいえ、中途半端なのが標準添付になると不幸の再生産だとは思う。 変に互換性気にしないと逝けないから、新しく出来ないし。 最近、diff.rb欲しい。今はsystemからdiff呼んでお茶濁してるけど。
cgi.rb って何?ふつー webrick/cgi でしょ。
例えば、こんなのだったら何を使って作るのが一番手数が少なくてすむのでしょうか? * textareaとsubmitボタンとドロップダウンリストが一個ずつあるフォームがある。 * textareaに元ネタを書き込んでsubmitすると変換結果がtextareaに表示される。 * ドロップダウンリストで選ぶ値によって変換の仕方を指定できる。 自分は、cgi.rbを使ってサクッと済ませたんですけど、何か問題ありますか? 変換ロジック自体は別で作成済みとして、表示部分にwebブラウザを 使うということで考えてみてください。
ぢff大杉・・・ これだからオプソって・・・
ほとんどはゴミdiffだけどね。 配列のdiffなんて要らんよ。
一番使いやすいdiffライブラリを教えてくれまいか
835 :
デフォルトの名無しさん :2006/04/10(月) 01:46:05
俺的にはdiff-lcs diff/patch/spatchの全てをサポートしてるし 返値がちゃんと独自のクラスで返るから使いやすい
俺的には`diff`でいいやという気分になりますた
dev と list で NKF の仕様変更の話が出てるけどおまいらどう思いますか
携昆布の話なら勝手にしやがれと思います
>>838 後で騒いだほうが面白いから今は黙ってる
>>840 本家 nkf は既に仕様変更してるみたいなのでそっちでちょっと騒いでもらえないか。
>>841 本家はまだだね。
2.1.0で変更するとか言ってるけど。
ありゃ、ホントだ。結局仕様変更しなかったんだ。
んじゃ、後で期待してます。
>>840
マクドいってこよ
848 :
デフォルトの名無しさん :2006/04/11(火) 03:00:18
メソッド内で引数の値が変えられない(或いは変えられたことを検知できる) ようにしたいんだけどJavaでいうところの public void hoge(final String str) {...} みたのってできる?
>>847 Wall: ええ、「ドロボー」ですね。もっとも、我々言語デザイナーは皆そうですが(笑)。
851 :
850 :2006/04/11(火) 10:44:20
間違えた obj.freeze (Object#freeze) だな
>852 なんつーか「誤解されるニッポン・各国教科書編」のノリだな
……というか「海外で見かけたヘンな日本語」のノリだったのか
>>848 >public void hoge(final String str) {...}
のfinalって
str = "hoge";
と参照先を変えることを出来なくなるようにする機構だぞ。そんなのが欲しいのか?
>>851 > 間違えた obj.freeze (Object#freeze) だな
のfreezeって
hoge(obj)
を抜けてからもobjの変更が出来なくなるようにする機構だぞ。そんなので良いのか?
>>858 Haskell のインタラクティブシェルかと思った
irbで文字列""でくくらないような仕組みは用意できないのかね。 >def cd(path) Dir.chdir(path) end >cd /usr/bin とかできるとがんばってラップしていけばすごい事になりそうな気が。
path が path なのか "path" なのかはどう区別するの?
^\s*(\w+)がcd, ls, mkdir, ...の時だけ特別扱いするw
それは確かにすごい事になりそうな気が。
初心者スレで出てた小ネタを拝借して ShellCommand = %w(ls cd ...) と登録しておいて入力行にフィルタかまして Shell.ls(*args), ... に飛ばせたら面白そうだな。弄ってみよ 破綻すっかな?
>>857 って事はdupしてからか
何にしても質問者の意図が判らんのがなぁ
>>856 848じゃないが、ほしい。
俺は他の言語も使ってるとほしくなる。
引数には、変更する変数でない限りconstつけるので。
むしろ、デフォルトでfinalでいいよ。
変更したいときだけ、mutableをつける。
まあ、俺言語の話。
引数を代入できないようにして何が嬉しいのかわからん。 そんなことでバグが出るとも思えん。 void foo(const int* p); ならわからんことはないが、finalつけて得られるのは void foo(int* const p); だぞ。
そういうのって静的言語がコンパイルの際にエラーを検出できるようにするための機構じゃないのかなあ Rubyに入れることに意味があるのかわからん。
>>868 最近の言語の動向の説明もできない人ですねw
まーRubyみたいなゆるゆるな動的言語にはいらんかもな
Winnyウィルス("○○の秘密動画.mpg .exe"みたいなやつね)を 削除するスクリプトを書こうとしたら、Dir.glob( '*' )で見つからなかった。 スペースがいっぱい入ってるファイルは、Rubyで認識できないのかな? ちなみに、cygwin+ruby1.8.4。
>>872 見つかるよ?
ruby1.8.4 cygwin, mswin32
で確認
長いファイル名でそ
>>873 駄目みたいです。
あと説明悪くて、ごめん。872くらいの短いファイル名だと見つかります。
とりあえず、↓のファイル名だと駄目でした。間にスペースが150個くらい
はいっています。
あああああああああああああああああああああああああああああああああ
あああああああああああああああああああああああああああああああああ
あああああ ああああああああああ.mpg.txt
スペース無くても駄目なのね。 ああああああああああああああああああああああああああああああああああ ああああああああああああああああああああああああああああああああああ ああああああああああああああああああああああああああああああああああ ああああああああああああああああああああああああああああああああああ ああああああああああああああああああああああああああああああああああ ああああああああああああああああああああああああああああああああああ ああああああああああああ.mpg.txt
RubyにC/C++のconst機能はないのでしょうか? const状態では、破壊的メソッドが呼べなくなるような。 #↓こんな感じのです a = Foo.new b const = a a.bar! #破壊的メソッドが呼べる b.bar! #こっちはエラーとなる
破壊的メソッド抑止ならそれこそObject#freezeじゃね?
>>879 freezeでは、その後、どこからも変更が出来なくなってしまいます。
やはりfreeze以外で似たような機能はないのでしょうか。
無いとしたら次のようなときは、皆さんどうしてるのでしょうか?
class Hoge
def initalize
@a = "..." # 巨大な文字列、または配列等
end
def get
return @a
end
end
これだと、
hoge.get[0]=0
と外部から変更出来てしまいます。
constがあると、変更されないで外部に見せれるのですが。
もうdup等するしかないのでしょうか?
うーむ。そういう場合はJavaのStringやObjective-C(つかCocoa? )のNSStringのように 「そもそも内容を変更できないクラス」 を作ってしまうというのも手かも。 既存クラスに対してそれをやりたいときは、破壊的メソッドをテッテ的にundefするとか。 とOOPかじりかけて歯が欠けた漏れが申しておりますがときに皆の衆どうよ。 # ちなみに>880の例はあくまで例であって、 # 「そりゃ@aを生で晒したらいじり放題なの当たり前やん」ってのは野暮な突っ込みだよね?
>>876 確認した。
長いファイル名だと駄目みたいだな。
パスが255文字以上の時の問題じゃなかろうか。
ソース読めば分かるのかな?
>>878 ラッパー作って、破壊不可にするのがスマートじゃね?
DVD-R などに焼くときと似た問題だったりして > ファイル名の長さ
誰かおぶじぇくとしこうしろうとな俺のためにObject#thawがない理由を教えてくれ。
>>885 freezeが解けたら意味ないからじゃないの。
dir.cみてたけどどこみればいいのかww
object#untaintはセキュリティホールに繋がりかねないから即刻廃止すべきだ
ruby自体セキュリティホールにつながりかねないから即刻廃止するべきだ。
>>887 どうでもいいけどCharNextいらね。
ついでにglob_call_funcもいみね。
hase = Hash.new{[]} これが動かないのは納得できない
>>891 動いてるみたいだけど?
hase がどうなるのを期待してるの?
あるクラスのサブクラスの一覧を取得するような ancestors の逆みたいなものってありますか? class Command; end class Ls < Command; end class Rm < Command; end ってあった場合に、[Ls, Rm] という結果がほしいです。
Objectでそのメソッドつかうと クラスツリーができるわけだな
>>892 hase = Hash.new{|hash,key| hash[key] = [] }
上のような結果が得られないのが納得できないのでは?
まぁ、はまりやすいポイントですな。
そんな私もはまりました。デフォルト値と初期化を勘違いしてた…
>>893 class Command
@@children = []
def self.inherited(child)
@@children << child
end
def self.children
@@children
end
end
class Ls < Command; end
class Rm < Command; end
p Command.children # => [Ls, Rm]
alias descendants children
898 :
896 :2006/04/15(土) 19:48:31
>>897 クラス変数が継承されるの忘れてたorz
でもこれじゃchildrenでもdescendantsでもなくてrelativesだな。
う〜ん。 h = Hash.new Module.constants.sort.each do |i| con = Object.const_get(i) next unless con.class==Class con.ancestors.each do |mod| next if mod==con next unless mod.class==Class h[mod.name] ||= [] h[mod.name].push con.name break end end h.each_key do |k| puts k h[k].each {|i| puts "\t" + i} end
>>896 ,899
あまり何も考えずにancestorsの逆があればいいのになぁ。。。
と思ってたんですが一般化しようとすると結構面倒そうですね。
今回は継承も1段階で単純なので以下のようにしました。
どうもありがとうございました。
module Shell
HOGE = 1
class Command
def self.commands
Shell.constants.map {|e| Shell.const_get(e) }.find_all {|e| Class === e and e < self }
end
end
class Ls < Command; end
class Rm < Command; end
class Hoge; end
end
p Shell::Command.commands # => [Shell::Rm, Shell::Ls]
クラスのインスタンス変数を使えばいいんじゃね? メソッド名は気にしない方向でこんな感じ? class C def self.subclasses (@subclasses ||= []) end def self.inherited(c) subclasses << c end def self.descendants subclasses + subclasses.map do |c| c.subclasses end.flatten end end class D1 < C end class D2 < C end class E1 < D1 end p(C.subclasses) # => [D1, D2] p(C.descendants) # => [D1, D2, E1] p(D1.descendants) # => [E1]
~/.irbrc ってWinだとどこのディレクトリになるの?
>902 "~"がどこに当たるかって話だよね? NT系だと%USERPROFILE% (たいていC:\Documents and Settings\ユーザー名) 9x系は分からん。
>>903 1.9ユーザ発見。
> NT系だと%USERPROFILE%
基本的には%HOME%だけど、1.9では、初期化時に設定されていなければ、
以下の順序で最初に見付かったものをセットするようになっている。
1 %HOMEDRIVE%%HOMEPATH%
2 %USERPROFILE%
3 マイ ドキュメント
905 :
903 :2006/04/19(水) 02:41:50
>904 あり? 漏れ1.8.4(i386-mswin32)だがそれでいけたけど。 ちなみにHOMEを別途設定して、%HOME%に.irbrcを置いても %HOMEDRIVE%%HOMEPATH%に.irbrcを置いても読んでるぽい。(両方に置いたらどうなるかは試してない) ひょっとしてirbが自力更生(?)してるのかな。ソース読む気力無いので後は知らない(ぉぃ) てか%USERPROFILE%より%HOMEDRIVE%%HOMEPATH%が先なのか。スマソ>902
>>905 irbはカレントディレクトリにあるのも読むぞ。
そういうことじゃないか?
x = [[1, 2, 3], [5, 3, 7], [1, 1, 7], [3, 2, 9], [5, 4, 8]] みたいなArrayを p x.sort_ex #=>[[1, 2, 3], [1, 1, 7], [3, 2, 9], [5, 3, 7], [5, 4, 8]] みたいに一番最初の要素のみでソート(重複した場合はソースの順番)したいんですが何かお手軽な方法はありますか? 普通にsortすると2番目以降も反映されてしまいますし def sort_ex self.sort{|a, b| a[0]<=>b[0] } end みたいにすると重複した場合にソースの順番がバラバラになってしまいます
>>907 [[1, 2, 3], [5, 3, 7], [1, 1, 7], [3, 2, 9], [5, 4, 8]].sort_by {|e| e[0]}
>>908 sort_byだと安定じゃないみたいなので907の望むのとは違ってるよ。
ヘルプに載ってた例だけど、下のような感じで書けばいいらしい。
i = 0
ary.sort_by {|v| [v, i += 1] }
でも、i が綺麗じゃないねぇ。
>906 ……その通りですたorz 重ね重ね相済まぬ>902
stable_sort_by実装すればいいやんけ
912 :
デフォルトの名無しさん :2006/04/20(木) 03:02:57
def stable_sort_by self.zip((0..self.size).to_a).sort_by{|e| [yield(e[0]),e[1]]}.map{|e| e[0]} end
zip のところを enum_for(:each_with_index) にするとより変態チックでよいと思います
914 :
912 :2006/04/20(木) 21:56:14
>>913 enum_for知らなかった。こりゃ便利。
def stable_sort_by
self.enum_for(:each_with_index).sort_by{|e,i| [yield(e),i]}.map{|e,| e}
end
enum_with_indexも思い出してあげて。
916 :
907 :2006/04/22(土) 02:07:35
レスありがとうございます 出来ました…が、使ってみてリバースソートできないことに気が付いた…il||li ○| ̄|_ もう少しいじってみます…
- e[0] では?
環境が連続してると勘違いしてんのか
920 :
デフォルトの名無しさん :2006/04/23(日) 16:38:35
↓の2つのクラスのf.puts以外のところを共通化したいんだけどいいパターンないですか? class BBS FILE='bbs.txt' def initialize @db=PStore.new('bbs.db') end def print @db.transaction{ @db.roots.each{|name| x=@db[name] file=File.join(x['dir'],FILE) if(!File.exist?(file),'w') then open(file){|f| f.puts(x['url']) end } } end end class Sure FILE='sure.txt' def initialize @db=PStore.new('sure.db') end def print @db.transaction{ @db.roots.each{|name| x=@db[name] file=File.join(x['dir'],FILE) if(!File.exist?(file)) then open(file,'w'){|f| f.puts(x['title']) end }......
#テキトー。細かい仕様は知らぬ。 class MyPrint #モジュールでも良いかもね def print @db.transaction{ @db.roots.each{|name| x=@db[name] file=File.join(x['dir'],FILE) if(!File.exist?(file),'w') then open(file){|f| fputs f, x } end } } end end class BBS < MyPrint FILE='bbs.txt' def initialize @db=PStore.new('bbs.db') end def fputs(f, x) file.puts(x['url']) end end class Sure < MyPrint FILE='sure.txt' def initialize @db=PStore.new('sure.db') end def fputs(f, x) file.puts(x['title']) end end
922 :
921 :2006/04/23(日) 16:59:33
ミス。fputs メソッドの中身は file.puts じゃなくて f.puts だった。
923 :
デフォルトの名無しさん :2006/04/23(日) 21:47:12
>>920 f.putsのところを別メソッドに切り出す。
class AbstractBBS
def func()
raise NotImplementedError.new # 切り出した部分
end
def print
...
func()
...
end
end
class BBS < AbstractBBS
def func()
# f.putsの処理その1
end
end
class Sure < AbstractBBS
def func()
# f.putsの処理その2
end
end
926 :
デフォルトの名無しさん :2006/04/24(月) 10:56:09
>>925 ありがとうございます
NotImplementedErrorなんてのがあるのか
抽象メソッドが作れるですな
なんかこのスレにウィルスがいるとノートン先生に怒られるなあ。
こんなmail欄ごときに反応してるのか orz
UNIX/Linuxさえなければこんな迷惑をこうむらずにすんだのにな。
vbs反応するから、どっちにしてもかわらんよ
単に、こんなもんに反応するノートン先生が狂ってる。
ノートン先生に感染するウィルスは無いのだろうか
ノートン先生って神経質なマッドサイエンティストっぽいな。
これで相殺
普通に迷惑だからやめてくれ
>>872 忘れかけてた。これどうなった?
>>882 くらいで終わってる感じだけど。
ソース読み切れなくてもいいからさ、確認できた人が報告した方が将来の誰かのためにもなると思うよ。複数の環境で再現できるのが確認できてるわけだし。
>>939 Cygwin だと Ruby に限らずファイル開けないっぽいね。
941 :
・∀・)っ-○●◎ ◆Pu/ODYSSEY :2006/04/28(金) 00:56:55
ActiveScriptRubyならおkじゃね? Cygwin版使うのはApache立ち上げて自作CGIのテストやるとき
>>939 Cygwin 側の問題ならスレ違い
別の言語や別の環境で試してみてくれよ
再現スクリプトきぼーん。
>>939 メンテナが対応パッチまで作ってたから、報告はいらないんじゃね?
946 :
939 :2006/04/28(金) 17:53:39
Rubyで名前付きパイプを扱う方法ありませんか?
どういうプラットフォームで? ext/dl 使えばなんでもできそうな気はする、とは言っておこう。
949 :
・∀・)っ-○●◎ ◆Pu/ODYSSEY :2006/04/28(金) 22:37:07
ActiveScriptRubyなら普通にAPIコールでCreatePipe呼べばいいと思うよ
ぷう
おねにぃさま
Rubyリファレンスマニュアルのwikiの字句構造の埋め込みドキュメントの説明だけど、今時は、もはやRDじゃなくてRDocスタイルを推奨すべきでは?
953 :
947 :2006/04/29(土) 05:31:18
>>948 Linux です
system("mkfifo hoge") で、FIFO作るのはできるんだけど、
opneして、getsで読み込み一回したあとは gets が即 nil で返ってきちゃう。
あと、書き込み側がopenするまで open() から返ってこないのも・・・
Cで
mkfifo()
open("hoge", O_RDONLY|O_NONBLOCK) した時と同様の挙動をさせたいんですが、
どうすればいいんでしょうか。
>>953 File.open("hoge", File::RDONLY|File::NONBLOCK)
今日のざっと見て3倍の速度(赤い彗星?) 今日のドナドナ夫 今日の黄金水 今日の「やっぱこれからはデジモでしょ」 今日のがまん汁委員会 今日の「あーそうさ.オレらはどうせしもじもですよ.」 今日の「やっぱイジメたいです.とことんまで.」 今日の「最近ヤツの動きが少なくてツマラン」 今日の「tDiaryはモテ系ってマジ?」 今日の「クソババァって誰のことよ?」
>>952 日本の Ruby コミュニティは RDoc 好きじゃないんじゃない?
標準ライブラリには入ってるけど積極的に使ってる人いない気がする
ていうかみんな使い方分かってないんじゃまいか。 いいサイト紹介キボン。
試してないだろ? ちょこちょこ使う分なら、ググった出てくる情報をさっと読めば使えると思うが。 最近は、日本語の説明も見掛けるし。 下手すりゃ RD よか、よっぼど分かりやすい。
RDoc使う利点て何? いや、煽りじゃなくて。 どんな時につかうのかなーと思って。 ソース内のコメントに使う?
ソースから文書を生成できるから。最近の言語にはみんな付いてるよ。使われてるかはさておて。
Rubyのライセンスって、GPLとどう違うの? COPYING読んだら「GPLに基づく」と書いてあるけど、でもGPLそのままというわけではないんだよね。
GPLだと著作権も放棄同然、 BSDだと論文と同じ扱いで著作権は堅持、 この中間で行くってことじゃないの?
>>963 むしろ日本語としては問題ないが意味がわからない。
A=B,B=CなのでA=(B+C)/3
と言ってるようなもん。
どっちかって言うとBSDのほうがゆるいライセンスだと思うんだけどな。
966 :
・∀・)っ-○●◎ ◆Pu/ODYSSEY :2006/04/30(日) 21:03:25
GPLに基づくってのはGPLそのもの。
いちどGPLを選択したら他のライセンスに変更できない融通のきかなさ。
>>965 商用利用考えるなら普通はBSDライセンスのほうが流用しやすい
英文を読んで意味がわからないならCOPYING.jaを読めばいいのに。 デュアルライセンスだからGPLまたは下記のライセンスに従え、と書いてあるだけじゃん。
end end end end end end end ↑これどうにかならない?
969 :
デフォルトの名無しさん :2006/05/02(火) 00:43:59
>>968 スーパー括弧みたいのが欲しいってこと?
begin と end ってのは、大失敗だったと思う。 {と}で良かった。
補完なしでしこしこ作ってるから閉じるのが面倒になってきたんだ end*8 みたいにすると do の数を数えなきゃならないから逆効果 解決方法思いついたけどPythonになった orz
972 :
デフォルトの名無しさん :2006/05/02(火) 01:13:27
endclass, enddef, endif, enddo
ssalc, fed, fi, od
補完とかそういうことが問題じゃないんだ end乱舞は見た目がきもい
} 乱舞は気にならないの?
おまえはきもいだろうが、俺はきもくない。以上。終了。
>>976 end よりはマシ
スクリプト言語だぞゴラァと言いたいためだけに
わざわざbegin end を使っているとすら感じる
vi なので { } でないと辛い。
そこまでネストするプログラムを書く、 お前のヘタレプログラミングをなんとかするか、 Pythonに鞍替えすればいいじゃん。 今更どーこー言おうが、{}にはならんよ。 互換性がどうこううるさいヤツもいるってのに。
>解決方法思いついたけどPythonになった orz おぇっ やめてくれ あの趣味の悪さと中途半端さ、途中でどの言語で 書いてるか判らなくなる文法の汚さは、悪魔の言語
はいはい、貴方が大好きなC系の言語に似てないと、全部汚い文法なんだよねー。
↑自分が低脳晒してるのに気付いてないのね
ネストしないプログラムをかけれるような文法と言語ってどんなんだろう Perlの暗黙標準出力なんかがぱっと浮かんだけど
条件文や繰り返し文がクロージャを引数として取る関数として実装されていて、かつ、無名クロージャを書くことができない文法であればネストしないプログラムを書くしかなくなるのではないだろうか。
テキストでプログラム表現しないこと前提にすればいいんじゃね
RubyはC系じゃない文法だから逆によい。 C系は普段使う/使わざるを得ない古女房。Rubyは誰にもないしょで出会う秘密の恋人。 つまりだな、Rubyは一夫多妻制という教祖の思想を反映した言語だったんだよ!
な、なんだってー(AAry と返してやりたいが、内容はふーんそうでしかないな
endで文句いう人って、対応関係がわからないから文句いってるのかな。 カッコだったら簡単にわかるけど、endだとそれがわからない。 もしそれだけが問題なら、例えばendにカーソルをおくと対応するifやdefをハイライト表示するような、 エディタのマクロやIDEのプラグインを誰かが用意してあげればいいってこと? それ以外に問題点ってある?
ワンライナーが ; だらけで汚くなるとか?
そりゃbeginが残ってendだけ;;にしたら、pythonもびっくりの汚さになっちゃうからねw
>>991 ハイライト表示用の設定ファイル有った希ガス
endが3文字なのに対してbeginが5文字もあるのがバランス悪いと言われる原因 begにしよう
(そうだ、括弧にしよう)
>>994 beginが残ってて…
お前本当にRubyやってんのか?
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。