为什么Rakudo的src/core/Int.pm中的所有类都声明了我的?

bri*_*foy 7 perl6 lexical-scope

查看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
Run Code Online (Sandbox Code Playgroud)

我认为BOOTSTRAP评论与它有关.在Perl6/Metamodel/BOOTSTRAP.nqp中有以下行:

my stub Int metaclass Perl6::Metamodel::ClassHOW { ... };
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 7

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

在语义上,这种"设置"(在其他语言中称为"前奏")形成了一个隐含在你的程序周围的外部词汇范围.

该设计在S02:伪包中描述,该部分的部分已经成为官方文档.