“加载 *”方案库是什么意思?何时是计划库 *加载 *



我正在研究修订的 7 关于算法语言方案的报告。我的问题是在第5.6节中。

在本节中,它说:

加载库时,其表达式将按文本顺序执行。如果图书馆的定义是以程序或图书馆主体的扩展形式引用的,则必须在评估扩展的程序或库主体之前加载该库。该规则适用。如果库是由多个程序或库导入的,则可能会加载其他时间。

这应该是什么意思?这是否意味着仅在实际引用导入标识符的情况下,或者当库是扩展程序或库的导入集的一部分时,库是已加载?如果同一程序导入的其他两个库正在引用同一库,则该库是加载两次还是仅一次?

由于库的加载可能由于其表达式执行而具有副作用,因此这些问题的答案对我来说似乎很重要。另外,共享两个库将第三个库导入其内部全局变量?

我已经对Chibi-Scheme进行了一些实验:每个程序,Chibi-Scheme仅加载每个库一次,即使实际上没有引用其导出的标识符。实际上,这对我来说看起来像是明智且易于实现的事情。

p.s。:我认为规范有点模糊的另一点:如果在程序中,导入集合导入名为import的标识符会发生什么?这是否意味着立即关注行(import ...)被解释为命令或定义(取决于导入的标识符import代表什么)或仍然为导入集?

P.P.S。:甚至是允许在顶级程序中允许多个导入声明的原因?

让我尝试一次回答您的每个问题。另外,如果有帮助,这里是指向千叶方案实现库的元语言的链接。


通过import语句导入库时,将加载库。


如果图书馆的定义是以程序或图书馆主体的扩展形式引用的,则必须在评估扩展的程序或库主体之前加载该库。

这只是意味着必须在引用其定义之前加载库(或者是错误的,因为找不到定义)。


如果库是由多个程序或库导入的,则可能会加载其他时间。

这是取决于实现的,因此您的库代码不应假设仅将其加载一次。


如果在程序中,导入集将导入的标识符import导入?

最有可能的是,新的import标识符将阴影或替换import,以使同一范围中的任何import语句都无法如预期的那样工作。这可能取决于实现 - 如果import作为特殊表格实现,那么新引入的标识符不会覆盖它。

相关内容

  • 没有找到相关文章

最新更新