読者です 読者をやめる 読者になる 読者になる

観察日記 2011-01-18

Are you miniruby?

miniruby か miniruby じゃないか,を C 側で把握するにはなんか方法ある?
実行中のコアの中からそれを把握する方法
Ruby レベルなら,require して rescue すればわかるような気がする
ないっちゅう結論だったような気がする
Encoding.list見ればとりあえず推察は可能
そうかなあ
{unak} C:\Users\usa\ruby\build>.\ruby -e "p Encoding.list"
{unak} [#, #, #]
推察は出来るが外れるケースもあるよ、と。
なんで?
そういえばrequireは常に失敗するようにリクエストした気がする
ビルドしてインストールしてないrubyさんには拡張ライブラリやエンコーディングライブラリが見えないのだ。
% ./ruby -e'p Encoding.list'
/libexec/ld-elf.so.1: Shared object "libruby.so.19" not found, required by "ruby"
もっと辛い環境の人が
ふむ、なるほど
まあruby自体が動かない場合は問題じゃないからいいのだが。
lib/rubyを移動すると確かにそうなるな
minirubyがrunrubyと同じarchとも限らんしなあ
だいたい信用できるパターンとして
minirubyはminirubyという名前をファイル名に含む
というのがある。
クロスを無視すれば
「minirubyかどうかを判定したい」のか「ビルド時かどうかを判定したい」のかによって変わってきそう
ただし、minirubyという名前を含む真rubyも作れるという噂もある。
dummyなんちゃらになんかつっこむほうが確実かしら
そう思う
最近luisとかいう人が新規参入してきたのでクロスが案外無視できない感じで。
full rubyで同名を定義するバカの可能性
なかださんがなんかその辺に一家言持ってた気がする。
やっぱりminirubyにはないものでやらないとだめだな
minirubyにはenumerator.soを$"に入れないってのはどうだろう
それで判定するってのも将来また悩むことになりそうな。
どっかのextconf.rbが死んだりして
今から将来でいいのか、過去もやりたいのかで変わってくるな
minirubyとかいう時点で過去は捨てた感はあるのだが。
1.9.2で出来ることを要件に入れると新しく何かするのはだめだな
じゃあ、現状で判断しないといけないわけだ
minipreludeになにか定数を入れておけばいいと思ったがそれもダメか
定数MINIRUBYをminipreludeで、というのはまあ思った。
full rubyでMINIRUBY定義された瞬間終わる
まあ、そんなfull rubyは終わればいいんじゃない?
しかし、Rubyレベルではなんでもありか、そういえば
というかこの方式だとfake minirubyが作れるので、crossに優しいかもしれない。
Rubyスクリプトから判定できる方法で何か、という意味だと、定数は再定義できるしメソッドは再定義できるしオブジェクトは後から作れるし、
だから結局何をしたいのかなんだよね。
full rubyが終わらないような方法ってなくね
ないですね
だからトレードオフとしては定数はありだとおもうなあ
適当なところで妥協は必要ですね。
なので定数はありという意見に賛同する。
RubyVM.self.miniruby?メソッドとかかね
でも特異メソッドはfreezeしてても追加できるか。だめだな。
俺が前にほしかったのは、minirubyはencを動的ロードできないから、その辺を事前判定するために自分がminirubyかどうかを知りたいというものだった。
結局現状はロードして失敗したのねそうなのねで判定してるが。
すばらすぃ
minirubyの違いというと
拡張ライブラリがロードできない
locale_charmapがASCII-8BIT固定
$:が少ない
$:か
ふむ
少ない、ってのはまたこう難しいな。
手元だと0だけど0以外のことがある?
-Iでいくらでも増やせるんだなあ、残念ながら。
言われてみればそらそうだ
で、rubyビルドプロセス中では実際にたいてい-Iが指定されている。
locale_charmapかな。
full rubyでlocale_charmapがASCII-8BITになることってあったっけ
locale_charmap上書き
しね
故意のケースはとりあえず無視するとして
普通にはどうですかねえ。
知らないエンコーディングの時ASCII-8BITだっけ
LANG=Cだと何なんだっけ
US-ASCIIか
これはいけるかな?
知らん場合はそのままか
なんかいけそう
そういえばASCII-8BITなんて設定するやつRuby以外にいないしな
nl_langinfo_codesetやnl_langinfoが"ASCII-8BIT"を返す可能性はないと思っていいよな
ないと思うんだけどねえ。
ASCII-8BITって造語だし