介绍一本好书 :)
时间:2025-01-15 10:26:03
来源:作文网
作者:管理员
《自己动手写Python虚拟机 海纳 书》【摘要 书评 试读】- 京东图书
这本书里详细地介结了如何写一个解释型语言的虚拟机。嗯。所以,这篇文章其实是一篇硬广告。哈哈。
写书的时候有一些心得,本身不适合放在书里去讲的。在这里补充一下。
这本书里有很多有意思的主题,是市面上同类型的书都没有涉及的。我这里想再补充一下,顺便有一些东西也想吐槽。我们一条条地说。
一切皆是对象
要想学好Python,一定要牢牢记住这句话:一切皆是对象。类型是对象,函数是对象,类也是对象。在以前的Python虚拟机的相关文章或者书籍中,对于这一条的解释总是让人觉得不过瘾。比如,我在面试的时候喜欢问的 instanceof 的实现机制,就需要对对象系统有深入地了解。Java程序员可以想想,自己是不是能讲明白,Long.class,Class.forName背后的机制?Python虚拟机的源代码也非常晦涩,因为那里没有特别地把 type, object, typeobject区分开来。但在这本书里,我的实现是使用了Hotspot中的Klass-oop的命名方式,然后,再借鉴了java_mirror的设计,让一切皆是对象变得不再模糊不清。当你写下type,type时就不会再模糊不清。
大家还记得这段神奇的代码吗?几乎每一个Python初学者都会被搞懵的一个例子:
>>> def func: ... lst.append ... print ... >>> func [1] >>> func
只有深刻地理解了函数也是对象,才能搞明白这段代码背后的问题。
垃圾回收
垃圾回收是每个Java程序员的必备技能,几乎所有的Java面试,日常工作中的所有调优都和GC相关,但有几个程序员写过垃圾回收的代码呢?我相信肯定有很多程序员有和我一样的困惑,GC的原理看了一大堆,自己想改进一下GC算法感觉无从下手,不管是Python还是Hotspot,还是什么Go,Art,它们的代码都十分庞大,想看懂都已经很难了,更不要说还想在里面改几行代码了。
我曾经在一个Java语言讨论群里看大家讨论,里面讲到什么是roots,这个东西只要自己写一个最简单的GC就能讲明白的,但如果只是原理讲解却是很难理解的。这就是理论和实践的差别。在这本书里,我只用300行代码就实习了一个完备的copy gc。为读者提供了一个良好的示范,然后因为copy gc非常简单,大家完全可以在这个框架里去完善自己的算法,在这个架子里去做mark-sweep, mark-compaction,甚至于分代,分region都是可能的。
我觉得一个Java程序员,一个Python,Android,Go的程序员,一生应该至少写一个专属于自己的内存管理框架。我们天天讲GC,却从未动手写过,实在是一大遗憾。
迭代
出乎我意料的是,很多Python程序员竟然没用过yield,更有少部分是听都没听说过。这就很糟糕了。同步,异步编程是程序员的基本技能之一。yield算是一个stackless的小协程吧。大家如果读完我的这本书就会明白yield和Generator是怎么回事了。javascript里也有Generator,v8里的实现和python中yield的实现是完全一样的。实现完yield以后再往前走一步,如果说我们每次保存状态都是把栈全部保存下来,那就是协程了。好多人看协程,goroutine的相关文章,看得十分痛苦,看上好几遍还不知道什么意思,那是因为没有掌握正确的学习方法,一旦你把虚拟机里的实现搞明白了。再去学习协程,你会体会到降维打击的乐趣。
通过字节码完全读透代码
Python中有很多非常特别的语法,我们称之为pythonic的,例如,正确地使用lambda表达式,在合适的地方使用with语句,通过decorator简化代码,适当的时候使用列表,字典推导。这些特性看着好像挺高级的,但其实它翻译成的字节码平平无奇,在学习Python的时候遇到一些特殊的语法,我们最好是有查看它所对应的字节码的能力。如果我们把字节码的种种细节都搞明白了,这些特别的语法在我们眼里就毫无秘密可言了。
再比如Python中的闭包的写法,正确的写法是这样的:
def cnt_func : cnt = 0 def foo : nonlocal cnt print cnt += 1 print ) return foo f = cnt_func f f
如果第4行,不带nonlocal标志,那就会报出奇怪的错误(这一点和大多数支持闭包的语言都有所不同)。为什么会产生这样奇怪的区别呢?我们只有从字节码中才能找到答案。
我个人觉得,结合我学习编程的过程来看,一些花了很多时间才理解的本质问题在这本书里,我都尽量地告诉读者了。除此之外,关于语言的模块,类定义,绑定和非绑定方法等部分,都有很详尽的介绍。总之,我觉得这本书非常值得一读。
从头到尾做一个工程,可能会比专栏里比较零散的文章来得系统,学得更扎实。这是一本学习语言虚拟机基本原理的必备书(至少目前为止,我认为是这样)。
文章的最后,还是要感谢专栏的读者们,是你们的热情鼓励着我去完成这样一件事情;中间有很多主题也是在和专栏读者们交流时得到的启发。谢谢大家。关于这本书,如果有任何问题,欢迎来我的工程里提issue。
专栏目录:
最新更新
普通话证书编号 书信作文国际护肤品品牌排行榜乡村的联谊会的主持词 好词优秀员工颁奖背景音乐 好词三严三实组织生活会主持词...qq上怎样表白 好词mc王佳表白词歌词 好词新春茶话会主持词 好词老员工颁奖词 好词最佳团队奖颁奖词 好词最佳团队奖颁奖词 好词2016年春节联欢会主持词 好...2016年联欢会主持词 好词2016年联欢会主持词 好词2016年联欢会主持词 好词企业先进个人颁奖词 好词全县目标考核会议主持词 好...全县目标考核会议主持词 好...全县目标考核会议主持词 好...新春贺词2016 好词春节联欢会主持词 好词2016年晚会主持词 好词2016年晚会主持词 好词2016年晚会主持词 好词2016年团拜会主持词 好词2016年团拜会主持词 好词团拜会主持词 好词众人划桨开大船串词 好词2016拜年词 好词2016拜年词 好词
热门排行:
2016拜年词 好词