最初は Rakudo 読み会だったんだけどな〜
午前中は、nqp と rakudo の文法規則を読んでました。だいたい Perl6 は nqp の5.5倍の大きさ。実際にトレースすることはできなかったんですけどね。
午後は、VM読もうということで、moar command を lldb で trace 。nqp のcommand line が出た所で、control-C 打って、lldb に。楽ちん。
でも、もはや、lldb は -O0 -g3 でも、引数がないとか変数が見えないとか。disass でレジスタから直接値を見るんですが、まぁ、疲れますね。
VMのregister は大域変数に取ってあって、オペランドからレジスタ名(数字)をとってきてアクセス。わかりやすい。レジスタには型はないので union 。それでいいのか?
で、jit のentry point を探すんですが、適当に「ここかな」というところに break point 。で、MoarVM のbyte code を graph ってのに変換する所は見つけて、それを emit ( native code を出力する) ところまではわかりました。
nqp --target=mbc --output=fib.moarvm examples/fib.nqp
moar --dump fib.moarvm
で、MoarVMのbyte code のdumpが見れます。
でも、
最適化しているところはどこだ?
どうも、inline 展開と、定数式展開ぐらいしかしてないみたい。いや、見つけられなかったので想像なんですが。
まぁ、そこで時間切れかな。
10時から18時までですが、遅れ気味に始めて、12時にはお昼休み。14時まで休んで、16時に休憩はさんで18時までなので、まぁ、そんなに大変と文句をいうほどのものではありません。
感想に「普段見れない河野先生が見れた」みたいなことを言った学生がいますが、あんまり変わらない奴なので、観測力がないだと思います。
でも、今回は割とスムーズだったかな。スライドもわかりやすかったし。
No comments:
Post a Comment