背景

强类型通过限制格式良好的程序可以执行的操作来帮助软件工程师 。 当引入新的类型集时,工程师可以使用它们来编写更明确指定的程序,避免在编译时出现错误,而不是依赖于测试或运行时发现。

当将一组新类型引入大型软件系统时,重构该系统以利用这些类型的成本非常高。 现有的自动类型迁移系统假定旧类型和新类型之间是一对一的对应关系,这使得它们无法对更复杂的类型集进行部分迁移。

  • 例如:在遗留系统中,使用整数类型来表示位置和速度,但是一组新的类型可以将这两个概念表示为单独的类型,它们之间有一组受约束的操作,以提高程序的正确性。
  • int —-> position, velocity

本文通过使用基于编译器的迁移工具和代数建模的类型集,可以使用少量手动播种的类型信息通过大型单片 C++ 代码库自动传播新类型。

Incremental Type Migration Using Type Algebra - 图1

迁移方法

  1. 根据引入库的完整描述,得到强类型与基础类型之间的转换关系

Incremental Type Migration Using Type Algebra - 图2

  1. 根据类型推断,从现有语法中推断语义并执行部分类型迁移。

Incremental Type Migration Using Type Algebra - 图3