手写 Python 虚拟机
海纳
华为资深编译专家,原 Huawei JDK 团队负责人
949 人已学习
新⼈⾸单¥59
手写 Python 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

07|类型标识:虚拟机支持对象自检的基础设施

你好,我是海纳。
前边两节课我们实现了控制流的功能。在实现控制流的时候,遇到使用基本数据类型的情况时,我们都采用了一些手段回避过去了。但是在进一步实现其他功能之前,我们必须把对象体系建立起来。这节课我们就从虚拟机中的基本数据类型入手,补全之前的功能,从而实现基本的对象体系。

Klass-Oop 二元结构

到目前为止,虚拟机里只有一个 HiObject 类,Integer 和 String 都是继承自这个类。我们回顾一下 Integer 的 equal 方法。
HiObject* HiInteger::equal(HiObject* x) {
if (_value == ((HiInteger*)x)->_value)
return Universe::HiTrue;
else
return Universe::HiFalse;
}
代码里的参数 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
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部