为什么源文件名不是人类可读的?

Why are the source file names not human readable?

我用 rakudobrew 安装了 Perl6 并想浏览安装的文件以查看 ~/.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

这些文件包含软件包的源代码,但这感觉不太容易访问。这样做的理由是什么?

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

一个是基于文件系统的存储库,它与 -Ilib 之类的东西一起使用。这仅使用磁盘上的路径解析模块。每当加载模块时,它首先必须检查模块源是否未更改,以便重新编译它们。这对于开发来说是理想的,但是这样的检查需要时间。此外,这不允许同一模块的多个版本可用,也不允许选择与 use 语句中的规范匹配的版本。同样,非常适合开发,当您只希望它使用您的最新更改时,而不是从生态系统安装模块。

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

因此,安装库不适合人类直接使用。 SHA-1 主要是为了实现方便;可以在 return 中使用一个替代方案来付出更多的努力(并且很可能在未来使用)。然而,SHA-1 确实也会创建一些不适合直接操作的外观 - 确实如此:在其中编辑源文件不会立即产生任何影响,并且可能会在下次编译器时产生混淆效果已升级到新版本。