観察日記 2010-01-28

Windowsを忘れないでいただきたい

23:22 (kosaki) 今のrubyってビルドオプションに-fPIEついてない気がするけど意図的?
23:23 (unak) -fPIEとは
23:24 (kosaki) gccのオプションで実行アドレスがランダムかされる
23:24 (kosaki) コンパイルオプションつけないとヒープとかスタックしかランダム化できない
23:24 (unak) ランダム化は主ではないよね?
23:25 (kosaki) 僕の認識では主
23:25 (kosaki) つまり、CGIとかで動かすときにコードのアドレスが固定だとコードパッチングが簡単すぎるので
23:26 (kosaki) fedoraとかのruby-1.8.6はlibrubyに全コードはいっていて、rubyコマンドはライブラリ呼ぶだけという面白い構成
23:27 (unak) /DYNAMICBASE か...
23:30 (unak) しかし昔はわざわざrebaseしてロードアドレスの固定化をしてプロセス起動を高速化しなさいと言われていたものなのに世知辛い時代だ
23:30 (kosaki) そもそも、rubyは-rdynamicついているのでアドレス固定でも速くないよ
23:30 (unak) ちっちっち
23:31 (unak) 俺と話すときは土俵がWindowsだということを忘れないでいただきたい
23:31 (kosaki) おみそれしました!

Linux前提でコードを書く人間を日頃罵倒している僕ですが、よくうささんにPOSIX前提で喋るなと怒られます。

gcc以外でビルドするには

23:57 (kosaki) rubyMakefileってgcc前提に見えるのですが、マイナープラットフォームの方々はどうやってビルドしてるの?
23:58 (unak) (1) ccでもいける(ことが多い)よ!
23:58 (unak) (2) 必要なら別の方法でMakefileを作るよ!
23:59 (unak) どっちか。
23:58 (nurse) ./configure --with-gcc=clang

configure.in

00:02 (kosaki) configure.in とか見ていると自分がいかにユーザランドに疎いか分かるな
00:02 (mame) 異国人だ
00:03 (unak) ぜひwin32の下を見て
00:03 (nurse) configure.inを見て、あれがホームだと思える人は
00:03 (unak) カルチャーギャップに酔いしれていただきたい
00:03 (nurse) めがつぶれてしまう
00:04 (kosaki) これは死ねる
00:04 (kosaki) 目がー目がー
00:04 (unak) かぁっこいいよっ!
00:05 (unak) win32/setup.makの意味不明さとか

そもそもmswin32はconfigure.inではなく、win32\configure.batを使う。configure.inやmkmf.rbなどはあまりにアレなので書き換えようという話がたまに出るのだが、まぁ、何で書いても汚いんだよな。

make uninstall

10:42 (n0kada) make uninstallつけるかな
10:45 (n0kada) sed '/\/$$/d;s:^/::' $(INSTALLED_LIST) /dev/null | (cd $(DESTDIR)/.; exec xargs rm)
10:45 (n0kada) あたりかな
10:49 (eban) それだと掘ったディレクトリは残るねえ
10:50 (n0kada) sed '/\/$$/!d;s:^/::' $(INSTALLED_LIST) /dev/null | (cd $(DESTDIR)/.; exec xargs rmdir)
10:51 (eban) たとえば
10:51 (eban) /usr/local/lib/ruby/1.9.1/i386-linux/
10:51 (eban) /usr/local/lib/ruby/1.9.1/i386-linux/io/
10:51 (eban) って順番に出てくるからそれもだめ
10:51 (n0kada) 逆順か revを間に
10:52 (eban) xargsとかrevとかちょっとアレだな
10:52 (n0kada) un.rbにでも入れる?
10:52 (eban) 自分自身を消すことになるよ?
10:52 (n0kada) 消せるでしょ DOSISH以外なら
10:52 (eban) windowsはだめ cygwinはいけるかな
10:53 (nurse) srcdirのun.rb使えば
10:54 (n0kada) MakefileとINSTALLED_LISTが利用できるという前提ならminirubyでも
10:54 (eban) ああ、そうか
10:55 (n0kada) そういう意味ではun.rbじゃなくてtool/rbuninstall.rbとか、tool/rbinstall.rbに--uninstallとかつけるのでもいい
10:58 (eban) そういえばrevじゃなくてtacだな
10:58 (eban) tacにしたところで、solaris10になさげ
10:59 (nurse) とりあえずFreeBSDにないからtacダメ
10:59 (n0kada) revは行内だったか
11:00 (eban) まあそこはsort -rとかでがんばれないこともない
11:01 (n0kada) -rなら必ず親が後になるな
11:02 (eban) xargsはsolaris10にはあるが微妙な線
11:04 (n0kada) まぁWindowsまで考えればxargsもsedも期待できない
11:09 (n0kada) Windowsだとdrive letterというゴミもあった

configureとかもそうなんですが、まぁ、クロスプラットフォームだとなかなか難しいです。

Enumerator#length

12:14 (mame) [ruby-dev:40200] うーん
12:14 (znz_m) http://mla.n-z.jp/?ruby-dev=40200
12:14 (mame) 悪くないと思うけど隠し機能くさい API がなんとも
12:16 (mrkn) 隠し機能感は確かにありますね・・・

個人的には特異メソッドではなく普通に定義するべきだと思う。しかし、提案の影響範囲を広げると発散しやすくなるんだよな。

bladeの仕組み

12:37 (mrkn) blade 変だ
12:37 (mrkn) [ruby-dev:40199]
12:37 (znz_m) http://mla.n-z.jp/?ruby-dev=40199
12:37 (mrkn) P とかN とか消えてる
12:38 (mrkn) [ruby-dev:40198]
12:38 (znz_m) http://mla.n-z.jp/?ruby-dev=40198
12:38 (mrkn) N がアンカーになってない
12:43 (eban) たぶんそのあたりはcronかなにかで定期的に更新してるんじゃないかな
12:43 (mrkn) なるほろ
12:46 (mame) 投稿直後だとなんかリンクされないですね
12:47 (eban) メールだと順番通りに来るとは限らないので、ある程度の幅でバッファしてるんだと思う

定数のprivate化

21:01 (mame) [ruby-dev:40207] きゅうむだよきゅうむ
21:01 (znz_m) http://mla.n-z.jp/?ruby-dev=40207
21:17 (nurse) Cuamですか
21:17 (mame) くあむ

確かに定数を公開APIにしたくないって事はしばしばあって、よくHOGE_CONST__とかやってます。