2016-12-31 5 views
7

私が見ているとindir実装でこのコメントを見ました:なぜtempはPerl 6のコア設定で動作しませんか?

sub indir(Str() $path, $what, :$test = <r w>) { 
    my $newCWD := $*CWD.chdir($path,:$test); 
    $newCWD // $newCWD.throw; 

    { 
     my $*CWD = $newCWD; # temp doesn't work in core settings :-(
     $what(); 
    } 
} 

私はmyが実際に字句である場合についてdoc issue #1082やっかいにつながった、myのこの使用は奇妙だと思いました。私はtempが動的変数のユーザーレベルの一時的な変更に適していると思っていたでしょう。

今、このコメントが表示されていますが、その意味がわかりません。 tempはこの深刻な壊れていますか?ここでは利用できませんか?それとも、コメントは間違っていますか?

コメントが正しければ、それは一部の人々は根性でなければならないものですので、日常プログラマのレベルにまで漏れた動的変数を扱うこの方法がある(と彼らはそれに慣れましたか?)

そして、このレベルは本当にどのように低レベルですか? Perl 6のすべてがここで利用できるはずです。

答えて

5

それがあった場合はおそらく、ソースコード内のコメントはあまり誤解を招くことになります。

# temp $*CWD doesn't work in core settings (which we're in) 
# my $*CWD = ... is a decent workaround in this case :) 

のPerl 6のすべてがここで利用可能であるべきであるように思えます。

完全なPerl 6は、Perl 6 CORE settingのコンパイルが完了するまで待たなければなりません。これはthe Rakudo Perl 6 compiler's "core" src treeに相当します。これは、the codeと "#tempはコア設定では機能しません:-("コメント。

2

@ raiphのポイントを強調するために:一般に、rakudoで実装されている特定のPerl 6機能は、

コアに取り組んでいる開発者は、このことを認識しておく必要があります。たとえば、COREの構築方法、どの機能がどの時点で利用可能であるか(さらに、どの機能がより低いレベルでより性能が高いのか、COREで見られるPerl 6はいくつかの理由で慣用的ではないかもしれません)

関連する問題