ToDo:
http://d.hatena.ne.jp/moira/20080502/1209734354
似た感覚があるなぁ。
匿名だとデタラメなことを色々したあげく バレて恥ずかしいことになりそうとかいう
(00:08)
でけた。適当にとりあえずこんなかんじでできた。
% ./configure --target=i386-linux --program-suffix=86 % make CFLAGS='-fPIC -O -g -m32' LDSHARED='gcc -m32 -shared -Wl,-R' % sudo make LDFLAGS='-m32 -L.' LDSHARED='gcc -m32 -shared' CFLAGS='-m32 -O -g' prefix=/usr/local/stow/ruby_x86 PREFIX=/usr/local/stow/ruby_x86 install-nodoc % ruby86 -v ruby 1.9.0 (2008-05-25 revision 0) [i386-linux]
でも extconf.rb 実行してもうまいこといかんので 手作業コンパイルするか。
(21:12)
が悲惨すぎる。 結局スタックの積み方が逆なんだよというのが一番大きい問題である。
f(a, b)
とかを呼ぶ時、
push b push a call f
となって欲しいのだけど、 YARV は a から順に積んでくので、 順番を逆向きにしなくてはならない。
あーうーん rb_funcall を直接呼んでるのがアホなんだな。 rb_funcall2_rev とか作ってやれば良い気がする。
案外簡単だった。
(22:28)
落ち着いて考えるべき
YARV は
putnil putstring "%d\n" putobject 4
とかしてくるので、 CPU スタックの上では、
←若いアドレス 4 "%d\n" self SP
となる。向きを逆向ける必要はやはりあるだろー。
まぁ逆向けるコード入れることによって解決。 だいぶ簡潔になったのでやっと x86 に行く気が起きる、か
(23:08)
i@u4 ~/wrk/yajit > time ruby1.7 euler55.rb zsh: correct 'ruby1.7' to 'ruby1.8' [nyae]? y 249 ruby1.8 euler55.rb 2.40s user 0.04s system 99% cpu 2.449 total i@u4 ~/wrk/yajit > time ruby1.9 euler55.rb 249 ruby1.9 euler55.rb 1.71s user 0.00s system 98% cpu 1.743 total i@u4 ~/wrk/yajit > time ./rubyjit.rb euler55.rb 249 ./rubyjit.rb euler55.rb 1.66s user 0.10s system 99% cpu 1.775 total
(23:22)
だと全部スタックで渡すので、
← 4 "%d\n" self SP
とかなってるのだが、 受け手としては
← argv argc mid self SP
を期待しているため、
← argv argc mid self 4 "%d\n" self SP argv
とすれば良いか。 つまり普通通りだな
あと argv の引っくり返しは C 側でやっても tail call が jmp になるので良さげ。
(23:35)
def factor4(a) r = 1 (1..a).each{|i|r *= i} r end
が
local table (size: 3, argc: 1 [opts: 0, rest: -1, post: 0, block: -1] s1) [ 3] a<Arg> [ 2] r 0000 putobject 1 ( 85) 0002 setlocal r(2) 0004 putobject 1 ( 86) 0006 getlocal a(3) 0008 newrange 0 0010 send :each, 0, block in factor4, 0, <ic> 0016 pop 0017 getlocal r(2) ( 87) 0019 leave
と
local table (size: 1, argc: 1 [opts: 0, rest: -1, post: 0, block: -1] s3) [ 1] i<Arg> 0000 getdynamic r(2), 1 ( 86) 0003 getdynamic i(1), 0 0006 opt_mult 0007 dup 0008 setdynamic r(2), 1 0011 leave
で
def factor2(a) r = 1 for i in 1..a r *= i end r end
が
local table (size: 4, argc: 1 [opts: 0, rest: -1, post: 0, block: -1] s1) [ 4] a<Arg> [ 3] r [ 2] i 0000 putobject 1 ( 77) 0002 setlocal r(3) 0004 putobject 1 ( 78) 0006 getlocal a(4) 0008 newrange 0 0010 send :each, 0, block in factor2, 0, <ic> 0016 pop 0017 getlocal r(3) ( 81) 0019 leave local table (size: 1, argc: 0 [opts: 0, rest: 0, post: 0, block: -1] s0) [ 1] <CFUNC><Rest> 0000 getdynamic <CFUNC>(1), 0 ( 80) 0003 expandarray 1, 0 0006 setlocal i(2) ( 78) 0008 getlocal r(3) ( 79) 0010 getlocal i(2) 0012 opt_mult 0013 dup 0014 setlocal r(3) 0016 leave
なのか。
えーと…
(06:55)
for の方はなぜこんな複雑なことになってしまうのかー。
あと
*a=1
が
local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1) [ 2] a 0000 putobject 1 ( 1) 0002 dup 0003 expandarray 0, 1 0006 setlocal a(2) 0008 leave
か。とりあえず expandarray の flag&4 は実装されてない… そして flag&2 もなにやら難解だな。
(07:03)
なんか見たような名前で呼称されてるのを見てちょっと調べた。
つまるところ僕的にはエスプの人な TAC の人のとこの兄弟はみな異常というような話みたいだ。 HAL の人らしい。
(11:14)
void protect(const void *addr, size_t size, bool canExec) { #ifdef __linux__ long pageSize = sysconf(_SC_PAGESIZE); char *p = (char*)(reinterpret_cast<size_t>(addr) & ~(pageSize - 1ULL)); int mode = PROT_READ | PROT_WRITE | (canExec ? PROT_EXEC : 0); mprotect(p, ((size + (pageSize - 1)) / pageSize) * pageSize, mode);
これひょっとしてダメか。
size < pageSize でも p + size が page 境界をまたぐことはある気がする。
(16:56)
なんかまわりに見たような名前が多くて面白い。
http://tophatenar.com/ranking/subscriber/78
via: http://d.hatena.ne.jp/lethevert/20080524/p2
odzさんに少しまけ、はともかく、 ABAさんに勝ってる!
(18:14)
カゼにより予定より早期に実現した。
サボったんならともかく、割と本当にしんどいから全然意味ねーな…
今日は我が家がアリに侵略されてここはサバンナかと思った。 ゴミ袋を捨てたら平和的に退散してくれた。
あとカーネルなんちゃら行きたかったな。無念。 kzkさんにkosakiさんにf/tさんとかいろいろ珍しい感じ
(19:43)
2003年って車かー。なつかしいな。 http://d.hatena.ne.jp/ranha/20080523/1211474043
ちょっと ICFPC で上位どんくらいだったのかなと振り返ってみた。
去年は卑怯なマグレでしかないので、 まぁ上位 10% くらいに入れるといいなぁという感じか。
(19:44)
http://d.hatena.ne.jp/suu-g/20080523/1211498211
って今どうなってるんだろう。
kernel 見たら fs/coda とかちゃんとあるね。
あとそいや 9p が何やらメインに入ったらしいとか言ってたなーと 思って見てみるとあった。
だからどうだという感じもするけど Documentation/filesystems/coda.txt は長い。 1600行とかある。
i@u4 ~/src/linux-2.6.25.4/fs/coda > wc * 12 43 324 Makefile 116 354 2970 cache.c 166 512 4219 cnode.c 20 41 434 coda_int.h 195 623 5259 coda_linux.c 698 2163 17202 dir.c 243 641 6331 file.c 306 762 6700 inode.c 95 304 2467 pioctl.c 436 1173 10451 psdev.c 53 136 1221 symlink.c 71 173 1373 sysctl.c 875 2690 23291 upcall.c 3286 9615 82242 total
えっと
(23:35)
i = 0 1.upto(3){|i|} p i
みたいなののブロック内の YARV コード見て、 なんで getdynamic i, 0 なんだよ 1 だろボケ… とか思って少し悩んだ僕は ruby1.8 に毒されてると思う。
ところで getdynamic ?, 0 と getlocal ? って 何が違うのかしらという。
(23:59)
なんか色々増やしていただいていたのでちょっとやってみた。
http://shinh.skr.jp/sdmkun/zipup.cgi?mode=txt&down=sonic.bml
これいいな。明らかに僕の好み
(01:33)
http://markmail.org/message/ozva662lcvxdg76b
とりあえずめも
たぶんレシーバが無いことを示してるとかなんとか。 でも VM_CALL_FCALL_BIT があるんなら良くねーとか思ってしまうんだけど
(02:14)
きょうやったこと
http://jp.youtube.com/watch?v=nrFMRuB2lbA
をみた。とても良かった。
ニコニコをみた。
http://www.nicovideo.jp/mylist/4491340
の人がすごいな。
(01:25)
平日でした!
なんか週末は麻雀打った記憶しかなくてもったいないなーと思う。 麻雀はクソゲーだと信じている。同じ4人ゲーならカタンの方が面白いよ
で今日はしんどいから休んだのでまた休日
(14:20)
http://cvs.m17n.org/~akr/diary/2008-05.html#a2008_05_18_2
を使うと strace とか使わなくても ~/.w3m/request.log に 手軽に残せたりとか。
(16:52)
消してみてから、どうせ絶対消し忘れがあるよなーと 思ってぐぐったらあった。 得に美人ストーカーの方から連絡をいただいたりはしてない気がするので、 野郎の電話番号なんて隠すような情報でもなんでもないとよくわかる。
(17:31)
高くて金利1%弱くらいみたいだ。 ついでに外貨とかインデックスファンドとか 30分くらい勉強してみたところ 基本的に外貨とかも別に単にオトクなんじゃなくて、 それなりのリスクとかあるんだなぁと勉強になって面白かった。
たぶん
なんとなく結局リスクが大きいものほど利率多いんだなぁというような 当たり前の結論に至った。 あと国債とかあったか。見てないけど似たようなもんだろう。
結局リスクとかいやで面倒なのもイヤな僕のような子は 年に一度くらい定期預金に入れるといいんだろうなとわかった。
(18:08)
前 | 2025年 1月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
_ Qxsvoswy [この間も俊太郎の詩をお http://www.stlouisbusinesslist.com/business/5..]