本书适合的人群包括:
1. 在校大学生,大一大二的同学可以通过本书掌握很多计算机工作运行的核心知识。
2. 对编译器和编程语言感兴趣的人。相比起直接将一门语言编译成机器码,将其编译为虚拟机上的字节码文件会简单很多,所以掌握一门虚拟机字节码,甚至自己实现一个虚拟机对学习编译器、了解编程语言特性有很大的帮助。
本书的内容虽然很新颖,但是对读者门槛的要求并不高。读者只要简单地掌握一些或者某一门类C语言(例如Java)即可。在本书中,我选择了使用C 来实现语言虚拟机。这主要是由于在内存操作方面,C 可以更精准地表达作者的意图。C 是一门很难的语言,相比起 Java、和PHP 等语言,流行度也不高,但是读者不必有畏难情绪,本书在使用 C 的时候是比较克制的。本书并没有使用很多 C 的高级技巧,*多只涉及到类和一点点的模板编程的知识。C 是一门多范式的编程语言,我们不可能在一个工程中使用所有的编程范式。本书中所涉及的代码,读者只需要有任何一门面向对象的语言的编程经验即可顺利阅读。
如何使用本书:
本书共分为六个部分,*部分介绍语言虚拟机的基本概念,并实现字节码解释器;第二部分,实现了内嵌类型,如整数、字符串、列表和字典等;第三部分,实现了函数;第四部分,实现自定义类、对象和方法;第五部分,实现垃圾回收,也就是自动内存管理;第六部分,模块和迭代。其中第二、第三和第四部分的实现并不是完全独立的,而是相互嵌套依赖的。比如完整的对象系统必然依赖函数,而 中的函数本身也是对象,这就产生了循环依赖,解决这个问题的办法是先实现一套相对简单的对象系统,然后基于此也实现一套简单的函数系统,再回过头来补充完善对象系统……这样螺旋式地上升,*终完成整个系统的搭建。
本书章节的内容之间都有很强的依赖,后面章节的内容都是在前面的章节的基础上去实现的。所以读者必须按部就班地从前向后阅读,才能保证阅读的流畅。本书为了节约篇幅,对于一些逻辑比较简单的代码,就都省略了。读者可以在 里找到全部的代码,包括该项目*近的更新以及各种提交记录。在提交记录中,读者可以清晰地看到本项目的进化过程。
感谢出版社编辑剧艳婕的耐心审校,尤其还要感谢专栏《进击的Java新人》的读者,是你们的精彩评论和学习反馈引发了这本书的创作。
实现一个高效的编程语言虚拟机是一个十分复杂的问题,从虚拟机的发展过程中就可以看出来。书中难免有讹错纰漏之处,欢迎读者及时指出。书中如果有描述不清的地方,也欢迎读者来信交流,可发至邮箱:。