补全:把 VM 的环境当根

(每道题开头都有同一段:06 的词法/语法/show、Env、RunError;本条加的 compile_expr / compile_stmt / compile_block / compile_program(树 → 指令列表)、lis

开始练习 →

Python 和本条的对应

(Python 自己就是「编译成字节码、由 VM 执行」:dis.get_instructions(f) 列出函数 f 的指令,每条有 opname(指令名)和 argval(操作数);f.__code__ 是代码对象,co_varname

开始练习 →

co_varnames 是什么

(Python 自己就是「编译成字节码、由 VM 执行」:dis.get_instructions(f) 列出函数 f 的指令,每条有 opname(指令名)和 argval(操作数);f.__code__ 是代码对象,co_varname

开始练习 →

看一个真函数的代码对象

(Python 自己就是「编译成字节码、由 VM 执行」:dis.get_instructions(f) 列出函数 f 的指令,每条有 opname(指令名)和 argval(操作数);f.__code__ 是代码对象,co_varname

开始练习 →

循环在字节码里

(Python 自己就是「编译成字节码、由 VM 执行」:dis.get_instructions(f) 列出函数 f 的指令,每条有 opname(指令名)和 argval(操作数);f.__code__ 是代码对象,co_varname

开始练习 →

补全:数指令

(Python 自己就是「编译成字节码、由 VM 执行」:dis.get_instructions(f) 列出函数 f 的指令,每条有 opname(指令名)和 argval(操作数);f.__code__ 是代码对象,co_varname

开始练习 →

补全:局部还是全局

(Python 自己就是「编译成字节码、由 VM 执行」:dis.get_instructions(f) 列出函数 f 的指令,每条有 opname(指令名)和 argval(操作数);f.__code__ 是代码对象,co_varname

开始练习 →

补全:找出所有函数的代码对象

(Python 自己就是「编译成字节码、由 VM 执行」:dis.get_instructions(f) 列出函数 f 的指令,每条有 opname(指令名)和 argval(操作数);f.__code__ 是代码对象,co_varname

开始练习 →

补全:对照两个 VM

(每道题开头都有同一段:06 的词法/语法/show、Env、RunError;本条加的 compile_expr / compile_stmt / compile_block / compile_program(树 → 指令列表)、lis

开始练习 →

编译器和 VM 谁先写

从零实现「编译 + VM」,最稳的顺序是【0】。

开始练习 →