深入理解 Python VM
要问现在最火的编程语言是什么,答案很大概率是 Python。
Python 是一种灵活且高效的编程语言,尤其在学术、人工智能等领域广为使用。深度学习科学家对 Python 的青睐,更是让 Python 一跃成为目前最炙手可热的编程语言之一。
Python 语言是一种解释型语言, 类似的还有 Java、Lua、javascript、 PHP、C#、Basic 语言等等。
解释型语言由解释器一边 “解读代码”,一边执行,解释器像蜂群一样,每一只蜜蜂的本能都是确定的,但是最终制造出来的蜂巢,却由于情况不同而千变万化。
与之相对的比如 C、C ++ 等等,代码被编译为 CPU 指令,CPU 基本上就只能按照指令,规规矩矩办事,CPU 像厨师炒菜一样,最多调整调整咸淡,醋溜白菜的菜谱,终归是炒不出鱼香肉丝来的。
编译型语言只需要诚实肯干的 CPU 就好了,但是编写菜谱就不得不事无巨细的向 CPU 交代清楚,大量的细节都落在程序员身上。很多 C 或者 C++ 程序的 bug 是程序员对内存的错误操作引起的。面对成百上千块内存,周而复始的申请、释放,出错也是正常的,无可厚非。
实际上,一些现代编译语言(GoLang、Swift)已经配备了 GC (Garbage Collection: 内存垃圾回收),很大程度上缓解了程序员的负担,我认为它们是介于传统编译语言和解释型语言之间的存在,读者可以自行了解。
现代语言之间的技术界限已经越来越模糊,我们主要讨论的是经典情况,轮廓更加清晰可辨。
解释型语言的灵活性高,代码更像“人话”,编写起来省心的多了,不用太关心系统层的细节,但是需要更聪明的解释器,脏活累活总归是需要它代劳的,当然也会浪费一点性能。不过机器的意义不就是解放人力吗?程序员也是人呀 :)。
Python 的易用来自于解释器的无私奉献,要不然 Python 程序员也得大把大把掉头发。Python 解释器包揽了底层数据抽象、内存管理、一部分优化、跨平台等等累活。
今天开始,我们将逐步深入 Python VM,了解它的皮肉骨骼。Python 是一种基于栈的虚拟机技术,我们将对比 Lua 为代表的寄存器式 VM,深入理解Python VM 的实现机制。