Scheme库被加载*意味着什么?什么时候加载Scheme库*?

时间:2014-01-20 15:16:09

标签: module scheme r7rs

我正在研究有关算法语言方案的修订 7 报告。我的问题在5.6节图书馆。

在本节中,它说:

  

加载库时,其表达式按文本顺序执行。如果在程序或库主体的扩展形式中引用库的定义,则必须在评估扩展的程序或库主体之前加载该库。此规则适用于传递。如果库由多个程序或库导入,则可能会加载额外的时间。

这是什么意思?仅当实际引用了导入的标识符时,或者当库是扩展程序或库的导入集的一部分时,是否意味着库已加载?如果同一个程序导入的另外两个库引用了同一个库,那么库是加载两次还是只加载一次?

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

我已经用chibi-scheme完成了一些实验:每个程序,chibi-scheme只加载每个库一次,即使它实际上没有引用任何导出的标识符。事实上,这看起来对我来说是一个明智且容易实现的事情。

P.S。:还有另外一点,我认为规范有点模糊:如果在程序中导入集导入名为import的标识符,会发生什么?这是否意味着紧接的后续行(import ...)被解释为命令或定义(取决于导入的标识符import代表什么)或仍然作为导入集?

P.P.S。:在顶级计划中允许多个进口申报的原因是什么?

1 个答案:

答案 0 :(得分:1)

让我尝试一次一个地回答你的每个问题。此外,如果它有帮助,here是用于在chibi方案中实现库的元语言的链接。

<小时/> 通过import语句导入库时会加载库。


  

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

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


  

如果某个库是由多个程序或库导入的,则可能会多次加载它。

这是依赖于实现的,因此您的库代码不应假设它只会被加载一次。


  

如果在程序中导入集导入名为import?

的标识符,会发生什么情况

最有可能的是,新的import标识符会影响或替换import,因此同一范围内的任何import语句将无法按预期工作。这可能是依赖于实现的 - 如果将import实现为特殊形式,则不会被新引入的标识符覆盖。