tokuhirom's Blog

Faster.pm が 5.10.1 と 5.8.9 でうごくようにしてみた。

5.10.0 でしかうごかないことで有名な Faster.pm ですが、コードをよんでみたところ、ロジックがちがうくさいので、なおしたら 5.10.1 ではうごいた(in_perl の部分)。

あと、global destruction 時にも JIT がうごいてて、これが原因でおちてるくさかったので PL_dirty みるようにした。この変更により、Perl 5.8.9 でもうごくようになった。Global Destruction 時は不安定な動作になるし、そもそも終了処理をかけてる最中に jIT しても意味ないので、これは必要な処理といえる。

2点の変更とも、たまたま perl5.10.0 ではうごいてただけな気がする。

diff --git a/Faster.xs b/Faster.xs
index e568ab2..3c6e174 100644
--- a/Faster.xs
+++ b/Faster.xs
@@ -15,7 +15,7 @@ faster_entersub (pTHX)
 {
   static int in_perl;

-  if (!PL_compcv || in_perl) // only when not compiling, reduces recompiling due to op-address-shift
+  if (!PL_compcv && in_perl==0 && !PL_dirty) // only when not compiling, reduces
 recompiling due to op-address-shift, global destruction
     {
       dSP;
       dTOPss;