为了说明动态类型系统和静态类型系统之间的差异和联系,这里简单叙述一下如何使用静态类型系统来构建动态类型系统。这个任务类似于为一门新的语言设计类型系统。所以如果你发现这个动态类型系统类似于你使用过的任何OO系统,请原谅我。应为所有的动态类型系统都是类似的,而且其背后的机理完全相同,只是实现上的差异而已。
先列出OO的核心技术,这样在我们设计的时候可以时刻对比我们是不是在这样做。
* 使用类来表达概念
* 使用消息在类之间传递信息
我们动态类型系统的期望目标很简单,那就是可以动态添加成员和方法。有了这个,我们就可以实现几乎所有的动态系统的特性了,如不特定消息发送,避免虚函数调用的开销,更简单的函数覆盖实现等等。
动态的类型系统,那就意味着运行时我们有一切的类型信息。所有我们需要把类型信息以合适的方式存储起来。在C++中,基础的类型就有十几种,更不要说用户创建的更多类型了。怎么办呢?简单想一下,就明白,我们只要一简单的字符串表达类型即可。不是使用字符串本身的类型,而是使用字符串对象的内容,不同的内容表示不同的类型即可。于是,我们可以说,对象Foo有如下的成员,其类型为“double”,其名字为weight,其值为94.5。可以看到,我们需要三个不同维度的东西来表达一个成员。C++中之需要两个就可以了,类型信息是静态的,编译期会处理。所以,这里的核心是:把类型信息表达为数据。
另一方面,C++成员的名字的硬编码的,在执行的时候,这些名字已经被地址替代了。这不是我们想要的,所以,我们要进一步把成员