LP身份、依赖与命名空间[#45]
片段和计划的ID使用简短ASCII字母、数字与连字符,标题表达内容含义。相同ID在森林中表示同一个阅读目标,命名不能依赖文章的章节序号。片段来源由原始文件与字符范围定位,不通过标题猜测。
make-program拒绝重复片段、重复定义、未知或重复导出、导入与本地定义冲突,以及未满足的显式依赖。requires由作者声明,可以指向计划中的定义、选定的模块导入或宿主默认接口;initial-requires要求依赖在整个片段开始初始化时已经可用。二者不是自动自由变量分析,同一片段内部的顺序仍由执行检查。
instantiate-program将完整定义放入共同的新命名空间,连接计划显式导入的名称并按顺序执行。声明处的词法binding和文章导入不自动进入实例。每次实例化创建新的本地定义,外部模块可能共享状态。当前接口不支持宏装配和任意表达式的卫生插入。
make-project保留作者声明的模块顺序,拒绝项目内消费者在提供者之前出现、循环导入和导入未公开的名称。instantiate-project创建私有模块接口,不注册全局模块;生成文件则使用普通Guile模块加载。项目内片段可共享原文,模块之间只共享显式公开的binding,详见解释器多文件工程。