补全:CALL
(每道题开头都有同一段:06 的词法/语法/show、Env、RunError;本条加的 compile_expr / compile_stmt / compile_block / compile_program(树 → 指令列表)、lis
补全:RETURN 和 MAKE_FN
(每道题开头都有同一段:06 的词法/语法/show、Env、RunError;本条加的 compile_expr / compile_stmt / compile_block / compile_program(树 → 指令列表)、lis
补全:记下最长的帧名串
(每道题开头都有同一段:06 的词法/语法/show、Env、RunError;本条加的 compile_expr / compile_stmt / compile_block / compile_program(树 → 指令列表)、lis
运行时是什么
VM 之外还有一堆东西在替程序干活:分配对象的内存、回收没人用的、维护调用栈、报错。这一整套叫「运行时」。它和 VM 的关系是【0】。
引用计数怎么回收
(这一节用一个自造的小堆 Heap 模拟运行时:alloc(名) 造对象,link(持有者, 名) 让持有者引用它(持有者 None 表示「根」,比如一个变量),unlink 解除引用;计数归零就 free,free 会连带解除它对别人的引
引用计数的死角
(这一节用一个自造的小堆 Heap 模拟运行时:alloc(名) 造对象,link(持有者, 名) 让持有者引用它(持有者 None 表示「根」,比如一个变量),unlink 解除引用;计数归零就 free,free 会连带解除它对别人的引
看计数归零
(这一节用一个自造的小堆 Heap 模拟运行时:alloc(名) 造对象,link(持有者, 名) 让持有者引用它(持有者 None 表示「根」,比如一个变量),unlink 解除引用;计数归零就 free,free 会连带解除它对别人的引
真的环,真的回收器
用真 Python 看引用环:两个对象互相引用、外面的名字都删掉,弱引用还活着吗?gc.collect() 之后呢?(弱引用不计数,对象没了它就变成 None;列表不能被弱引用,所以用一个小类) import gc, weakref c
补全:释放的连锁
(这一节用一个自造的小堆 Heap 模拟运行时:alloc(名) 造对象,link(持有者, 名) 让持有者引用它(持有者 None 表示「根」,比如一个变量),unlink 解除引用;计数归零就 free,free 会连带解除它对别人的引
补全:从根出发标记
(这一节用一个自造的小堆 Heap 模拟运行时:alloc(名) 造对象,link(持有者, 名) 让持有者引用它(持有者 None 表示「根」,比如一个变量),unlink 解除引用;计数归零就 free,free 会连带解除它对别人的引