我正在研究关于算法语言方案的修订版7报告。我的问题是关于第 5.6 节库。
在本节中,它说:
加载库时,其表达式按文本顺序执行。如果以程序或库主体的扩展形式引用库的定义,则必须在评估扩展的程序或库主体之前加载该库。该规则可传递地应用。如果一个库被多个程序或库导入,它可能会被加载额外的次数。
这是什么意思?这是否意味着仅当实际引用导入的标识符或已经在库是扩展程序或库的导入集的一部分时才加载库?如果同一个库被同一个程序导入的两个其他库引用,该库是加载两次还是只加载一次?
由于库的加载可能会由于其表达式的执行而产生副作用,这些问题的答案对我来说似乎很重要。另外,是否共享导入第三个库其内部全局变量的两个库?
我用 chibi-scheme 做了一些实验:每个程序,chibi-scheme 只加载每个库一次,即使它的导出标识符都没有被实际引用。事实上,这对我来说似乎是一件明智且易于实施的事情。
PS:还有一点我认为规范有点含糊:如果在程序中,导入集导入了一个名为 的标识符,会发生什么import
?这是否意味着紧随其后的行(import ...)
被解释为命令或定义(取决于导入的标识符import
代表什么)或仍然作为导入集?
PPS:在一个顶级程序中允许多个进口申报的原因是什么?