gpt4 book ai didi

raku - 刷新预编译的 perl6 模块的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 14:08:21 25 4
gpt4 key购买 nike

我正在尝试重构一些代码。我的方法(使用 vi)是将旧库从/lib 复制到/lib2。这样我就可以破解大部分内容,但仍然有一个框架可以重构。

所以我继续从 use lib '../lib'; 更改 mymain.p6 header 至use lib '../lib2'; .然后我删除 ../lib2/mylibrary.pm6 中的一大块行并确保 :w 正在做我期望的事情。

想象一下我的惊讶,尽管我的程序已被大量删除,但仍然可以完美运行。当我 rm -R/lib 时它甚至可以工作,所以那里没有任何东西持续存在。

我有没有机会对旧的 lib 模块进行预编译?如果是这样,我该如何冲洗它?

这是基于 MoarVM 版本 2019.03 构建的 Rakudo Star 版本 2019.03.1
实现 Perl 6.d。

最佳答案

更新 .好吧,我以为我已经复制了这个场景。它在一小时内可靠地显示了该错误。但现在不是。这很令人不安。调查仍在继续……

我已经复制了@p6steve 的场景,以防有人希望将此报告为错误。目前我和@p6steve 在一起(根据下面的评论),我将把它视为 DIHWIDT 而不是可报告的错误。也就是说,现在我们有了一个高尔夫总结。

原主程序使用path1其次是它直接使用的模块,然后是使用的模块:

use lib 'path1';
use lib1;
say $lib1::value;

unit module lib1;
use lib2;
our $value = $lib2::value;

unit module lib2;
our $value = 1;

这显示 1 .

如果将库复制到新目录,包括 .precomp 目录,然后编辑 lib2 但未编辑 lib1,则忽略对 lib2 的更改。

Here it is on glot.io before and after copying the libs and their .precomp directory and then editing the libs .

原始答案

感谢您编辑您的问题。这给了我们更多的继续。 :)

我想尝试深入了解它,并希望您也愿意尝试一下。这个(n)答案和下面的评论将记录我们的进步。

根据您对@ValleLukas 回答的评论:

Then I noticed ../lib2/.precomp directory - so realised library precomps are stored in the library folder. That did the job!



这是我对发生的事情的第一个猜测:

您复制了 lib集体到 lib2 .这复制了 precomp 目录。

您修改了 use lib ... mymain.p6 中的声明引用 lib2 .

您的 mymain.p6代码包括 use module-that-directly-or-indirectly-uses-mylibrary .

你修改 mylibrary.pm6 .

但什么都没有改变!为什么不?

你没碰过 module-that-directly-or-indirectly-uses-mylibrary , 所以 Rakudo 使用来自 lib2/.precomp 的模块的预编译版本目录。

推测...

也许预编译版本存在这一事实导致预编译逻辑假设它是否也找到了 module-that-directly-or-indirectly-uses-mylibrary 使用的模块的预编译版本。然后它可以继续使用它,甚至不用检查它的时间戳与源版本的比较。

这符合您的情况吗?如果不是,它会出错哪些位?

关于raku - 刷新预编译的 perl6 模块的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57466611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com