作者:云小白 | 来源:互联网 | 2022-12-03 12:34
我安装了Perl6 rakudobrew
并且浏览已安装的文件以查看十六进制文件名列表~/.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
这些文件包含软件包的源代码,但这种方式并不容易访问.那是什么理由?
1> Jonathan Wor..:
在Perl 6中,加载模块和缓存其编译的机制是可插拔的.Rakudo Perl 6有两个主要机制.
一个是基于文件系统的存储库,它用于类似的东西-Ilib
.这可以简单地使用磁盘上的路径来解析模块.无论何时加载模块,首先必须检查模块源是否未更改,以便重新编译它们.这是开发的理想选择,但这种检查需要时间.此外,这不允许具有相同模块的多个版本,并且在use
语句中选择与规范匹配的模块.同样,当您只是希望它使用您的最新更改时,非常适合开发,但对于从生态系统安装模块则更少.
另一个是安装库.这里,安装并预编译了特定版本的模块.预计与此类存储库的所有交互都将通过API或使用API的工具完成(例如,zef locate Some::Module
).假设一旦安装了特定版本的模块,那么它就是不可变的.因此,不需要对源进行检查,它可以直接加载模块的编译版本.
因此,安装库不是供人们直接使用的.SHA-1主要是实现方便; 可以使用替代方案以换取更多努力(并且可能在将来使用).但是,SHA-1还会创建一些不用于直接操作的东西 - 事实确实如此:在那里编辑源文件会立即产生影响,并且下次编译时可能会产生混淆效果升级到新版本.
@matthiaskrull这算作开发.你可以将你感兴趣的模块下载到一个目录中,比如'lib',然后在你的命令行中添加`-Ilib`或在你的代码中添加`use lib'lib';`.也许有意义的是,如果`zef`还没有复制,它可以选择进行复制.
这也允许分布在不区分大小写的文件系统上表示例如Foo.pm和foo.pm.我不知道有一种人类可读的方法来解决这个问题,因为几乎所有模块名称/文件路径都有大写和小写字母(几乎在所有情况下都意味着名称需要被修改).