[Feature: trunk] relayouting struct RNode

Yuguiです。

「第7回RHGの逆襲」(http://qwik.jp/rhg-strikes-back/78.html )の結果とし
て、RNode::nd_fileは誰も利用していないことが分かりました。

よって、RNodeのレイアウトにおいてポインタ長だけ空間が余っています。添付
のパッチでは、とりあえずこの空間をvoid *reservedとして、YARVに残っている
無駄なNULL pointer代入を削除してみました。

さて、この空間を何らかの形で有益に活用したいと思います。関係者に聞いてみ
たところでは次のような案が出てきました。

  1. 行番号に使う
    行番号のMAXが15bit増えます。現状では32bit環境でも2**17あるので現実的に
    特に困ることはないと思いますが、もう少し増えても悪くはないかもしれません。

  2. RNodeを4分木にする
    ASTの分岐の数を増やします。笹田さんによれば、これで楽になるケースが少
    しはあるとのことです。

どのようにしたら良いか、ご意見をいただければと思います。

nagachika e$B$H?=$7$^$9!#e(B
RHGe$B$N5U=1$G$O$*@$OC$K$J$C$F$$$^$9!#e(B

  1. e$B9THV9f$K;H$&e(B
    e$B9THV9f$Ne(BMAXe$B$,e(B15bite$BA}$($^$9!#8=>u$G$Oe(B32bite$B4D6-$G$be(B2**17e$B$"$k$N$G8=<BE*$Ke(B
    e$BFC$K:$$k$3$H$O$J$$$H;W$$$^$9$,!"$b$&>/$7A}$($F$b0-$/$O$J$$$+$b$7$l$^$;$s!#e(B
    e$B@hF|$5$o$@$5$s$,Js9p$7$F$$$?$h$&$K!"Nc30$N%P%C%/%H%l!<%9$de(B caller
    e$B$K4^$^$l$ke(B
    e$B9THV9f$Oe(B 65536 e$B$Ge(B overflow e$B$9$k$h$&$G$7$?!#3N$+$Ke(B
    struct RNode e$B$G$Oe(B 17 bit
    (long e$B$,e(B 32bit e$B$N4D6-$Ge(B)e$B$^$G;H$($F$$$k$N$G$9$,!“e(BVM
    e$B$N<B9T%3!<%I$K%3%s%Q%$%k$5$l$k$He(B
    struct iseq_insn_info_entry e$B$H$$$&9=B$BN$Ne(B line_no
    e$B%a%s%P$K3JG<$5$l!”$3$l$,e(B
    unsigned short e$B$KDj5A$5$l$F$$$k$?$a$G$7$?!#e(B

e$B$G$9$N$Ge(B nd_line
e$B$r3HD%$9$k$N$O0UL#2r@Oe(B/e$B%3%s%Q%$%k%(%i!<$N%a%C%;!<%8$K$OM-8z$G$9$,!“e(B
e$B<B9T;~$N%P%C%/%H%l!<%9$N>pJs$O$3$N9=B$BN$NDj5A$b3HD%$7$J$$$H$$$1$^$;$s!#e(B
e$B%3%s%Q%$%k8e$N9=B$$O$h$/D4$Y$F$$$^$;$s$1$I!”;HMQ%a%b%jNL$,A}$($=$&$G$9$7!"e(B
e$B9THV9f$K;H$&$N$O$b$C$?$$$J$$$+$J$!$H;W$$$^$9!#e(B

4e$BJ,LZ$K$7$F4r$7$$$3$H$,$"$k$J$i$=$l$G$$$$$N$+$J$H;W$$$^$9!#e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:35947] [Feature: trunk] relayouting struct
RNode”
on Mon, 25 Aug 2008 15:03:10 +0900, “Yugui (Yuki S.)”
[email protected] writes:

|e$B!VBhe(B7e$B2se(BRHGe$B$N5U=1!We(B(http://qwik.jp/rhg-strikes-back/78.html )e$B$N7k2L$H$7e(B
|e$B$F!"e(BRNode::nd_filee$B$OC/$bMxMQ$7$F$$$J$$$3$H$,J,$+$j$^$7$?!#e(B

1.9e$B$G$O;H$C$F$$$J$$$s$G$9$M$(!#e(B

|e$B$h$C$F!“e(BRNodee$B$N%l%$%”%&%H$K$*$$$F%]%$%s%?D9$@$16u4V$,M>$C$F$$$^$9!#E:IUe(B
|e$B$N%Q%C%A$G$O!“$H$j$”$($:$3$N6u4V$re(Bvoid *reservede$B$H$7$F!"e(BYARVe$B$K;D$C$F$$$ke(B
|e$BL5BL$Je(BNULL pointere$BBeF~$r:o=|$7$F$_$^$7$?!#e(B

e$B;H$C$F$J$$$J$i:o$C$F$b$h$$$N$G$O$J$$$G$7$g$&$+!#e(B

|e$B$5$F!“$3$N6u4V$r2?$i$+$N7A$GM-1W$K3hMQ$7$?$$$H;W$$$^$9!#4X78<T$KJ9$$$F$_e(B
|e$B$?$H$3$m$G$O<!$N$h$&$J0F$,=P$F$-$^$7$?!#e(B
|
|1) e$B9THV9f$K;H$&e(B
| e$B9THV9f$Ne(BMAXe$B$,e(B15bite$BA}$($^$9!#8=>u$G$Oe(B32bite$B4D6-$G$be(B2**17e$B$”$k$N$G8=<BE*$Ke(B
|e$BFC$K:$$k$3$H$O$J$$$H;W$$$^$9$,!“$b$&>/$7A}$($F$b0-$/$O$J$$$+$b$7$l$^$;$s!#e(B
|
|2) RNodee$B$re(B4e$BJ,LZ$K$9$ke(B
| ASTe$B$NJ,4t$N?t$rA}$d$7$^$9!#:{ED$5$s$K$h$l$P!”$3$l$G3Z$K$J$k%1!<%9$,>/e(B
|e$B$7$O$“$k$H$N$3$H$G$9!#e(B
|
|e$B$I$N$h$&$K$7$?$iNI$$$+!”$40U8+$r$$$?$@$1$l$P$H;W$$$^$9!#e(B

4e$BJ,LZ$K$9$k$N$O$A$g$C$H$@$1L%NOE*$G$9$M$(!#e(B

e$B!!$5$5$@$G$9!%e(B

nagachika wrote:

e$B$G$9$N$Ge(B nd_line e$B$r3HD%$9$k$N$O0UL#2r@Oe(B/e$B%3%s%Q%$%k%(%i!<$N%a%C%;!<%8$K$OM-8z$G$9$,!"e(B
e$B<B9T;~$N%P%C%/%H%l!<%9$N>pJs$O$3$N9=B$BN$NDj5A$b3HD%$7$J$$$H$$$1$^$;$s!#e(B

e$B!!$3$NOC$OGD0.$7$F$$$^$9!%e(B

e$B%3%s%Q%$%k8e$N9=B$$O$h$/D4$Y$F$$$^$;$s$1$I!";HMQ%a%b%jNL$,A}$($=$&$G$9$7!"e(B
e$B9THV9f$K;H$&$N$O$b$C$?$$$J$$$+$J$!$H;W$$$^$9!#e(B

e$B!!7k6I!$e(BRValue
e$B$N%G!<%?%5%$%:$OJQ$o$i$J$$$N$G!$;HMQ%a%b%jNL$OJQ$o$je(B
e$B$^$;$s!%e(B