"require" 在哪里定义的?

Where is "require" defined?

我一直在查看 Rakudo source for the implementation of require,首先是出于好奇,其次是因为我想知道它是否返回了一些东西。

我查了一下sub require,返回的是this hit,其实好像是require的源码,其实叫sub REQUIRE_IMPORT。它 returns Nil 并被声明为这样,这几乎回答了我原来的问题。但现在我的问题是:从那个 sub 到 require 的映射在哪里?它真的是该功能的实现吗?是否有其他函数以这种方式声明?

require 不是子控件,而是语句控件(因此,在 useiffor 等同一类别中。 ) 是 parsed by the Perl 6 grammar and there are a few different cases that are accepted. It is compiled in the Perl 6 actions,需要处理的东西很多。

大部分工作委托给各种 CompUnit 对象,这些对象也涉及 use/need。它还必须处理 require 将引入的存根符号,因为给定词法范围内的符号集在编译时是固定的,并且 REQUIRE_IMPORT 实用程序 sub 与运行时有关符号也导入。

你的问题的答案将在方法的末尾给出:

    $past.push($<module_name>
               ?? self.make_indirect_lookup($longname.components())
               !! $<file>.ast);

这意味着:

  • 如果它是 require Some::Module 则评估为查找 Some::Module
  • 如果是 require $file 风格的案例,计算文件名