Scheme工程的文件与阅读关系[#63]

环境、原语、求值器、入口与测试各有模块边界。evaluate与apply-value互相调用,所以进入同一个engine模块;内部递归不变成两个文件之间的循环导入。阅读仍可分别讨论求值和闭包,不需要按文件目录排列。

(make-program "mce-primitives-module" "Scheme原语模块"
  (list primitives-fragment) '(initial-environment)
  #:imports (list (make-import '(lp-example mce environment)
                              '(extend-environment))))

make-import声明实际导入的模块与名称,make-module-output将计划映射到Guile模块路径。make-project核验项目内的导出、重复身份和模块顺序;它不自动排序,也不猜测自由变量。外部模块在实例化或独立运行时由Guile解析。

project. Scheme解释器的模块工程[mce-project]

Module order: 文件按显式依赖顺序声明;每个Module拥有独立的导入和导出。

module. Scheme环境模块[mce-env-module]

Outputs: lp-example/mce/environment.scm

Checks: Scheme工程的11项值与5项异常核验

Exports: (extend-environment lookup define-value!)

Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。

module. Scheme原语模块[mce-primitives-module]

Outputs: lp-example/mce/primitives.scm

Checks: Scheme工程的11项值与5项异常核验

Imports: (lp-example mce environment) (extend-environment)

Exports: (initial-environment)

Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。

module. Scheme求值与闭包应用模块[mce-engine-module]

Outputs: lp-example/mce/engine.scm

Checks: Scheme工程的11项值与5项异常核验

Imports: (lp-example mce environment) (extend-environment lookup define-value!)

Exports: (evaluate-sequence)

Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。

module. Scheme解释器入口模块[mce-entry-module]

Outputs: lp-example/mce/entry.scm

Checks: Scheme工程的11项值与5项异常核验

Imports: (lp-example mce primitives) (initial-environment)

Imports: (lp-example mce engine) (evaluate-sequence)

Exports: (run)

Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。

module. Scheme工程核验模块[mce-checks-module]

Outputs: lp-example/mce/checks.scm

Checks: Scheme工程的11项值与5项异常核验

Imports: (lp-example mce entry) (run)

Exports: (run-checks)

Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。

Module的Exports是公开入口,Imports链接到提供名称的项目模块,Initialization order是定义建立顺序。Outputs直接打开生成文件。片段上的Assembled in列出所有使用它的计划,包含原来的单文件计划和本页的模块计划;这些信息来自装配数据,不需要另写索引。