10、构建编译器家族:基于产品线工程的方法

构建编译器家族:基于产品线工程的方法

1 引言

在为基础编译器添加新扩展时,常见做法是复制基础编译器的源代码并进行编辑。这种简单方法会产生两个不同的编译器,尽管它们的许多代码是重复的,应共享,但仍需分别维护。即便将新扩展合并回基础编译器,也会增加整体复杂性,使其难以作为进一步扩展的基础。

为解决这一问题,可采用产品线工程范式。产品线工程是一种开发产品家族的范式,软件产品线是一组具有共同特征和差异的软件系统,它们应基于相同的软件架构,由一组通用的软件组件(核心资产)开发而来。我们采用了面向特征的产品线工程,原因如下:
- 它能以特征为基础,合理分析产品间的共性和差异。
- 它促进基于架构的开发,适合编译器,因为大多数编译器采用管道 - 过滤器架构风格,便于添加或替换组件,提高透明度和可重用性。

2 MLPolyR 编译器家族历史

MLPolyR 语言于 2005 年作为课堂项目引入,具有先进的特征,如 Hindley - Milner 风格的多态类型系统和记录多态性。随着语言的发展,其编译器也不断演进,产生了多个分支:
- 基础 MLPolyR 编译器(MC):生成原生 PowerPC 代码。
- MLPolyR 前端编译器(MM):生成运行于 Intel x86 的 C– 代码。
- MLPolyR lambda 解释器(INT):作为解释器运行。
- MLPolyR 带语言断言表达式的编译器(AST)。

这些分支虽独立,但都需随基础编译器的演变而修改,因为它们共享部分代码库。使用源代码配置工具(如 CVS 和 Subversion)虽能管理分支,但存在局限性:
1.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值