ilocker:关注 Android 安全(新手) QQ: 2597294287
采用 three-phase 的设计方式,便于编译器支持多种语言和多种目标平台。
如果在优化器阶段采用通用的 IR (中间语言) 表示 (LLVM 就是这么做的),那么就可以为任何语言编写一个前端,只要能编译生成 IR 就可以了。后端也一样,可以为任何目标平台编写一个后端,只要能从 IR 编译生成该目标平台的指令代码就可以。
采用这种设计方式,如果想支持一种新的编程语言,只需要实现一个新的前端就可以了,而优化器和后端都可以复用。假如不是采用这种分离式的设计,就需要从头到尾重新做。这样如果需要支持 N 种目标平台和 M 种编程语言,可能就需要开发 N*M 个编译器。
采用这种 three-phase 的设计方式,使得开源编译器能够更轻松的支持多种编程语言和目标平台,这样也会服务于更多的程序员。对于开源项目来说,这意味着会有更大的贡献者社区,会对编译器有更多的增强和改进。
另外,采用这种分离式的设计,使得对开源编译器的贡献门槛降低了。比如,搞前端的程序员只需具备前端技能就可以。另外,如果我想实现具备混淆功能的编译器,可能只需要在优化器阶段操作 IR 就可以了,不需要了解前端和后端。
时间: 2024-10-24 20:54:08