我用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
文件包含软件包的来源,但感觉很难访问。这样做的合理性是什么?
答案 0 :(得分:15)
在Perl 6中,用于加载模块和缓存其编译内容的机制是可插入的。 Rakudo Perl 6为此提供了两种主要机制。
一个是基于文件系统的存储库,它与-Ilib
之类的东西一起使用。这仅使用磁盘上的路径即可解析模块。每当加载模块时,首先必须检查模块源是否未更改,以便重新编译它们。这是开发的理想选择,但是这种检查需要时间。此外,这不允许同一模块具有多个版本,并且不允许在use
语句中选择与规范匹配的版本。同样,当您只希望它使用最新的更改而对于开发却是理想的选择,而对于从生态系统中安装模块而言,则更是如此。
另一个是安装库。在此,将安装并预编译模块的特定版本。期望与此类存储库的所有交互都将通过API或使用该API的工具(例如zef locate Some::Module
)完成。假定一旦安装了特定版本的模块,则该模块是不可变的。因此,无需对源代码进行检查,它可以直接加载模块的编译版本。
因此,安装存储库不旨在直接供人类使用。 SHA-1主要是实现上的便利;作为替代方案,本来可以付出更多的努力来回报(将来很可能会使用)。但是,SHA-1的确会产生一些不适合直接操作的外观-的确如此:在其中编辑源文件不会立即产生效果,下次编译时可能会造成混淆已升级到新版本。