Skip to content

operational coupling vs functional coupling

· xieyuheng

coupling 有多种,其中重要的两种是:

  • operational coupling -- 运行时的依赖关系
  • functional coupling -- 责任和功能上的重叠

basic-lisp 和 machine-lisp 可以独立运行。 x-lisp 同时依赖 basic-lisp 和 machine-lisp 来写 pass。

目前的责任划分:

  • x-lisp -- 语言功能
  • basic-lisp -- 优化
  • machine-lisp -- 代码生成

但是有 functional coupling:

  • x-lisp 与 basic-lisp 都实现了 module 功能,几乎是直接翻译过去。

    这个可以通过把 bundling 在 x-lisp 中实现来解决。 但是这会导致我们没法把单独的 x-lisp 文件独立编译到 basic-lisp 文件。

  • basic-lisp 与 machine-lisp 都实现了 data layout 功能,也是几乎直接翻译过去。

    这个可以通过 extract data layout 功能出来成一个新的模块。 但是如何把语言的功能 extract 出来成为 shared 模块?

    这好像也不对,因为 basic-lisp 需要被 execute, 而 machine-lisp 需要被 transpile。