07|类型标识:虚拟机支持对象自检的基础设施
海纳
你好,我是海纳。
前边两节课我们实现了控制流的功能。在实现控制流的时候,遇到使用基本数据类型的情况时,我们都采用了一些手段回避过去了。但是在进一步实现其他功能之前,我们必须把对象体系建立起来。这节课我们就从虚拟机中的基本数据类型入手,补全之前的功能,从而实现基本的对象体系。
Klass-Oop 二元结构
到目前为止,虚拟机里只有一个 HiObject 类,Integer 和 String 都是继承自这个类。我们回顾一下 Integer 的 equal 方法。
代码里的参数 x,如果它的类型是 Integer,equal 函数就可以正确执行。如果 x 的实际类型不是 Integer,这段代码就不能正常工作了。
我们需要一种机制,来判断某个 HiObject 对象的实际类型到底是什么。在编程语言虚拟机中,最常用的解决办法就是使用 Klass-Oop 二元结构。Klass 代表一种具体的类型,它是“类”这个概念的实际体现。例如,Integer 类在虚拟机里就有一个 IntegerKlass 与之对应,所有的整数都是 IntegerKlass 的实例。Oop 是 Ordinary object pointer 的缩写,代表一个普通的对象。每一个对象都有自己的 Klass ,同一类对象是由同一个 Klass 实例化出来的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. 对整数类进行重构,包括定义 IntegerKlass 作为单例类,设置整数对象的 klass 为 IntegerKlass,并实现相应的虚函数。 2. 重构字符串,使用单例模式实现字符串的 StringKlass,并在字符串的构造函数里把 klass 属性设为 StringKlass。 3. 重构对象系统,将内建对象改成不带虚函数的普通对象,以保证每个对象的内存布局完全可控。 4. 实现了字符串和整数的重构,从而支持变量功能,最终可以运行 Fibonacci 的例子。 5. 单例模式是设计模式的一种,可以保证一个类在全局只能生成一个对象,通过私有构造函数和静态方法实现。 6. 静态变量一定要记得定义和初始化,否则就会出现链接错误,这是新手程序员最常见的错误之一。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》,新⼈⾸单¥59
《手写 Python 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论