手写 Python 虚拟机
海纳
华为资深编译专家,原 Huawei JDK 团队负责人
1128 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 15 讲/共 28 讲
导学|直播加餐:三小时掌握C++ (2讲)
手写 Python 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

12|Native方法:打通底层软件与高层应用的关键

你好,我是海纳。
在过去的几节课中,我们实现了函数的基本功能。实际上,在 Python 中有很多内建函数,例如,range、print、len 等都是内建函数。这些内建函数往往是使用 C/C++ 在虚拟机内部实现的,所以我们把这些函数也称为 native 函数。
这节课我们就通过实现 len 方法来讲解如何在虚拟机里实现 native 函数。

实现内建函数(Builtin Function)

在 Python 开发者看来,内建函数和普通函数是一样。也就是说,开发者使用自定义的函数和使用 len、print 等内建函数时,并不需要感知它们之间有什么不同。
这就决定了,在虚拟机层面,我们希望内建函数与 FunctionObject 所代表的自定义函数也是统一的。所以我们选择继续使用 FunctionObject 来代表内建函数,不同点在于,普通的 FunctionObject 是由 MAKE_FUNCTION 字节码使用 CodeObject 主动创建的。前边两节课,我们重点介绍了这个机制。
但是内建函数并没有对应的字节码,它的所有实现都在虚拟机内部,也就是说,内建函数都是使用 C++ 来实现的。这里需要一种方法把 CALL_FUNCTION 与虚拟机内部的实现联系起来。我们还是要在 FunctionObject 身上想办法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

1. Python 中的内建函数是使用 C/C++ 在虚拟机内部实现的,因此被称为 native 函数。 2. 引入了 NativeFunctionKlass 来代表内建函数,并在 FunctionObject 中增加了一个方法“call”来实现内建函数。 3. 通过引入函数指针,可以实现不同内建函数的不同逻辑,使得内建函数的实现变得简单且灵活。 4. 实现了内建函数后,可以通过测试用例验证实现的正确性。 5. 虚拟机引入了 MethodObject 类型来完成传递隐式参数的功能,并与 FunctionObject 的唯一区别是 MethodObject 多了一个 _owner 属性,用于绑定方法与目标对象。 6. 完成了 LOAD_METHOD 这条字节码的执行逻辑,使得虚拟机能够正确执行方法调用的操作。 7. 虚拟机中已经有了基本的内建类型、整数和字符串,也有了基本的函数和方法的功能。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)