构建编译器家族:基于产品线工程的方法
1 引言
在为基础编译器添加新扩展时,常见做法是复制基础编译器的源代码并进行编辑。这种简单方法会产生两个不同的编译器,尽管它们的许多代码是重复的,应共享,但仍需分别维护。即便将新扩展合并回基础编译器,也会增加整体复杂性,使其难以作为进一步扩展的基础。
为解决这一问题,可采用产品线工程范式。产品线工程是一种开发产品家族的范式,软件产品线是一组具有共同特征和差异的软件系统,它们应基于相同的软件架构,由一组通用的软件组件(核心资产)开发而来。我们采用了面向特征的产品线工程,原因如下:
- 它能以特征为基础,合理分析产品间的共性和差异。
- 它促进基于架构的开发,适合编译器,因为大多数编译器采用管道 - 过滤器架构风格,便于添加或替换组件,提高透明度和可重用性。
2 MLPolyR 编译器家族历史
MLPolyR 语言于 2005 年作为课堂项目引入,具有先进的特征,如 Hindley - Milner 风格的多态类型系统和记录多态性。随着语言的发展,其编译器也不断演进,产生了多个分支:
- 基础 MLPolyR 编译器(MC):生成原生 PowerPC 代码。
- MLPolyR 前端编译器(MM):生成运行于 Intel x86 的 C– 代码。
- MLPolyR lambda 解释器(INT):作为解释器运行。
- MLPolyR 带语言断言表达式的编译器(AST)。
这些分支虽独立,但都需随基础编译器的演变而修改,因为它们共享部分代码库。使用源代码配置工具(如 CVS 和 Subversion)虽能管理分支,但存在局限性:
1.
超级会员免费看
订阅专栏 解锁全文
3511

被折叠的 条评论
为什么被折叠?



