为什么Rakudo的src/core/Int.pm里的类都用my声明了?

Why are all of the classes in Rakudo's src/core/Int.pm declared with my?

查看 source for Int,我发现所有 类 都是用 my 声明的,我原以为这会使它们成为私有的并且在该文件之外不可用。但是,他们显然是。为什么需要这样声明?

my class Rat { ... }
my class X::Numeric::DivideByZero { ... }
my class X::NYI::BigInt { ... }

my class Int { ... }
my subset UInt of Int where {not .defined or $_ >= 0};

my class Int does Real { # declared in BOOTSTRAP

我认为 BOOTSTRAP 评论与此有关。在 Perl6/Metamodel/BOOTSTRAP.nqp 中有这样的行:

my stub Int metaclass Perl6::Metamodel::ClassHOW { ... };

Rakudo 的 src/core/ 目录中的文件没有编译为具有自己私有文件级范围的单独模块,而是在构建过程中连接成单个文件,例如 gen/moar/CORE.setting

从语义上讲,这个 'setting'(在其他语言中称为 'prelude')形成了隐式围绕您的程序的外部词法范围。

S02: Pseudo-packages, and parts of that section have made it into the official documentation中描述了设计。