Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NQPとMoarVMと私/nqp_moarvm_anatofuz

AnaTofuZ
January 25, 2019

 NQPとMoarVMと私/nqp_moarvm_anatofuz

YAPC::Tokyo前夜祭でのLTです

AnaTofuZ

January 25, 2019
Tweet

More Decks by AnaTofuZ

Other Decks in Technology

Transcript

  1. my $self = shift; • 八雲アナグラ ( id:AnaTofuZ ) •

    Okinawa.pm と Perl入学式in沖縄から来ました • 本業は沖縄の大学生 (4年次)
 (出身は沖縄で無いので詐欺と呼ばれる)
 • 今日飲みすぎて明日トークできない気がする
  2. NQP • 再帰呼び出し的なフィボナッチ #! nqp sub fib($n) { $n <

    2 ?? $n !! fib($n-1) + fib($n - 2); } my $N := 29; my $z := fib($N); say("fib($N) = " ~ fib($N));
  3. n sub add_test($n) { my $sum := 0; while ($n

    > 1) { $sum := $sum + $n; --$n; } return $sum; } say(add_test(10000));
  4. n • オペコード+型を指定してみる sub add_test (int $n) { my int

    $sum := 0; while nqp::isgt_i($n,1) { $sum := nqp::add_i($sum,$n); $n := nqp::sub_i($n,1); } return $sum; } say(add_test(10000));
  5. NQP • 引数や数に型を指定することが可能 #! nqp sub fib(int $n) { $n

    < 2 ?? $n !! fib($n-1) + fib($n - 2); } my int $N := 29; my $z := fib($N); say("fib($N) = " ~ fib($N));
  6. NQP MoarVM • 2引数を受け取って足すだけのコード2種類で書いてみる sub add_test($left,$right) { return $left +

    $right; } say(add_test(2000,19)); sub add_test(int $left,int $right) { return nqp::add_i($left,$right); } my int $n := 2000; my int $m := 19; say(add_test($n,$m));
  7. name : add_test Instructions : 00000 checkarity 2, 2 00001

    param_rp_o loc_0_obj, 0 00002 param_rp_o loc_1_obj, 1 00003 paramnamesused annotation: add.nqp:1 00004 decont loc_4_obj, loc_0_obj 00005 smrt_numify loc_3_num, loc_4_obj 00006 decont loc_4_obj, loc_1_obj 00007 smrt_numify loc_5_num, loc_4_obj 00008 add_n loc_5_num, loc_3_num, loc_5_num 00009 hllboxtype_n loc_4_obj 00010 box_n loc_4_obj, loc_5_num, loc_4_obj 00011 throwpayloadlex loc_4_obj, 32, loc_4_obj 00012 goto label_1(00015)
  8. name : add_test Instructions : 00000 checkarity 2, 2 00001

    param_rp_i loc_0_int, 0 00002 param_rp_i loc_1_int, 1 00003 paramnamesused annotation: addtype2.nqp:1 00004 add_i loc_3_int, loc_0_int, loc_1_int 00005 hllboxtype_i loc_4_obj 00006 box_i loc_4_obj, loc_3_int, loc_4_obj 00007 throwpayloadlex loc_4_obj, 32, • 型が有ると実行が早くなる事も