16

我安装了 Perl6rakudobrew并想浏览已安装的文件以查看.~/.rakudobrew/moar-2018.08/install/share/perl6/site/sources~/.rakudobrew/moar-2018.08/install/share/perl6/sources/.

例如

> ls ~/.rakudobrew/moar-2018.08/install/share/perl6/sources/
09A0291155A88760B69483D7F27D1FBD8A131A35  AAC61C0EC6F88780427830443A057030CAA33846
24DD121B5B4774C04A7084827BFAD92199756E03  C57EBB9F7A3922A4DA48EE8FCF34A4DC55942942
2ACCA56EF5582D3ED623105F00BD76D7449263F7  C712FE6969F786C9380D643DF17E85D06868219E
51E302443A2C8FF185ABC10CA1E5520EFEE885A1  FBA542C3C62C08EB82C1F4D25BE7B4696F41B923
522BE83A1D821D8844E8579B32BA04966BAB7B87  FE7156F9200E802D3DB8FA628CF91AD6B020539B
5DD1D8B49C838828E13504545C427D3D157E56EC

这些文件包含包的来源,但感觉不是很容易访问。这样做的合理性是什么?

4

1 回答 1

15

在 Perl 6 中,加载模块和缓存它们的编译的机制是可插入的。Rakudo Perl 6 为此提供了两种主要机制。

一个是基于文件系统的存储库,它与-Ilib. 这仅使用磁盘上的路径来解析模块。每当加载一个模块时,它首先必须检查模块源是否没有更改,如果有则重新编译它们。这对于开发来说是理想的,但是这样的检查需要时间。此外,这不允许使用同一模块的多个版本并选择与use语句中的规范匹配的版本。同样,当您只希望它使用您的最新更改时,它是开发的理想选择,但对于安装来自生态系统的模块则不太理想。

另一个是安装存储库。在这里,安装和预编译特定版本的模块。预计与此类存储库的所有交互都将通过 API 或使用 API 的工具完成(例如,zef locate Some::Module)。假设一旦安装了特定版本的模块,那么它就是不可变的。因此,不需要对源代码进行检查,它可以直接加载模块的编译版本。

因此,安装存储库不适合直接供人使用。SHA-1 主要是为了实现方便;可以使用替代方案来换取更多的努力(并且很可能在将来使用)。但是,SHA-1 也确实会产生一些不适合直接操作的外观 - 确实是这样:在其中编辑源文件不会立即产生影响,并且可能会在下次编译器时产生混淆效果已升级到新版本。

于 2018-10-02T13:19:50.820 回答