【问题标题】:Why are the source file names not human readable?为什么源文件名不是人类可读的?
【发布时间】:2018-10-02 09:37:44
【问题描述】:

我用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

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

【问题讨论】:

标签: raku rakudo


【解决方案1】:

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

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

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

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

【讨论】:

  • 我明白了。因此,无需再破解已安装的模块,即可快速轻松地进行调试或探索:'|但我明白了。
  • @matthiaskrull 这算作开发。您可以将您感兴趣的模块下载到一个目录中,比如“lib”,然后将-Ilib 添加到您的命令行或在您的代码中添加use lib 'lib';。如果zef 还没有复制的选项,也许它是有意义的。
  • 我知道,我只是习惯于使用PerlRubyPython 周围的许多/大多数其他语言轻松编辑。
  • 这也允许分布表示例如Foo.pm 和 foo.pm 在不区分大小写的文件系统上。我不知道有一种人类可读的方法来解决这个问题,因为几乎所有模块名称/文件路径都有小写和大写字母(这意味着在几乎所有情况下,名称都需要被修改)。
  • 我理解它现在解决的问题,完全可以接受。遇到这些文件名仍然会引起人们的注意,因为我认为其基本原理并不直观。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2013-02-17
相关资源
最近更新 更多