更新。好吧,我以为我已经复制了这个场景。它在一小时内可靠地显示了该错误。但现在不是。这很令人不安。调查仍在继续……
我已经复制了@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 的更改。
在复制 libs 及其 .precomp 目录然后编辑 libs 之前和之后,它位于 glot.io 上。
原始答案
感谢您编辑您的问题。这给了我们更多的继续。:)
我想尝试深入了解它,并希望您也愿意尝试一下。这个(n)答案和下面的评论将记录我们的进步。
根据您对@ValleLukas 回答的评论:
然后我注意到 ../lib2/.precomp 目录 - 所以实现的库预编译存储在库文件夹中。那完成了工作!
这是我对发生的事情的第一个猜测:
您大量复制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
那么它可以继续使用它,甚至不用检查其时间戳与源版本的比较情况.
这符合您的情况吗?如果不是,它会出错哪些位?