为什么 temp 在 Perl 6 核心设置中不起作用?

Why doesn't temp work in Perl 6 core settings?

我正在查看并在 indir 实施中看到了这条评论:

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 #1082my 是否真的是词法的感到厌烦。我本以为 temp 更适合动态变量的用户级临时更改。

但是现在,我看到这条评论,但我不太清楚它是什么意思。 temp 碎这么深?这里不可用吗?还是评论有误?

如果评论是正确的,这种处理动态变量的方式是否已泄露到日常程序员级别,因为这是一些人必须做的事情(他们已经习惯了?)

而且,这个级别到底有多低?似乎所有的 Perl 6 都应该在这里可用。

也许源代码中的注释如果是:

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

It seems like all of Perl 6 should be available here.

完整的 Perl 6 必须等到 Perl 6 CORE setting. This corresponds to the Rakudo Perl 6 compiler's "core" src tree. This includes the code 编译完成后才能使用“#temp 在核心设置中不起作用:-(”评论。

强调@raiph 的观点:一般来说,期望在 rakudo 中实现的任何特定 Perl 6 功能在 CORE 中的任何给定点工作是不合理的,因为那是我们如何使功能可用。

从事核心工作的开发人员必须意识到这一点,并考虑到这一点,例如,在订购 CORE 的构建方式时,以及哪些功能在哪个点可用(以及哪些功能更进一步)较低级别的性能,因此您在 CORE 中看到的 Perl 6 可能由于多种不同的原因而不是惯用的。)