为什么要写这《深入解析Java编译器:源码剖析与实例详解》?
Java是一门流行多年的高级编程语言,相关的就业岗位很多,但是最近几年却出现了用人单位招不到人,大量研发人员找不到工作的尴尬局面。究其根本原因还是岗位对技术的要求高,不但要会应用,更要懂其内部的运行原理。对于想要深入研究Java的从业者来说,目前国内市场上还没有一本剖析Java编译器(Javac)源码的书籍,也没有一本剖析工业级编译器源码的书籍,这正是本书要填补的市场空白。
本书围绕市面上的主流编译器Javac进行源代码剖析,详细介绍了词法分析、语法分析、语义分析及代码生成等各个阶段的具体实现。另外,本书有大量的配图和实例,以便读者能更好地理解书中的要点。
《深入解析Java编译器:源码剖析与实例详解》有何特色
1.内容丰富,讲解详细
《深入解析Java编译器:源码剖析与实例详解》对Java编译器的词法分析、语法分析、语义分析及代码生成等各个阶段的源代码实现做了详细介绍,可以帮助读者系统地掌握Java编译器的实现原理。
2.原理分析与实例并重
《深入解析Java编译器:源码剖析与实例详解》对Java编译器各个编译阶段的源代码实现都进行了重点介绍,同时也简单介绍了一些编译器的基本原理,并给出了大量的配图和实例,能让读者真正掌握Java编译器的具体实现。
3.分析工业级编译器的源码实现
《深入解析Java编译器:源码剖析与实例详解》分析的编译器Javac是一个工业级的编译器,它是大部分Java开发人员将Java源代码转换为Class文件的首选编译器。对于Java从业人员来说,《深入解析Java编译器:源码剖析与实例详解》可以让他们学习到Javac是如何支持Java语言的相关特性的,如泛型;而对于那些对编译器感兴趣的人来说,《深入解析Java编译器:源码剖析与实例详解》则可以让他们真正学习到如何将编译器的相关理论知识应用到开发实践中。
《深入解析Java编译器:源码剖析与实例详解》内容
本书深入剖析了Javac的源代码实现,每一章都会对重点的源代码实现进行解读。各章的内容简单介绍如下:
第1章介绍了Javac的目录结构及源代码调试,同时对Javac支持的编译命令的实现进行了简单介绍。
第2章介绍了Javac操作文件(如读取.java文件、读取JAR包)相关的类。
第3章介绍了Javac将读取到的Java源代码的字符流转换为Token流的过程。
第4章介绍了抽象语法树的每个树节点,这些树节点可以大概划分为定义及声明、语句与表达式。
第5章介绍了如何建立抽象语法树,即Javac根据Token流建立一个完整的抽象语法树。
第6章介绍了符号表的结构,同时也对Javac中使用的符号及类型做了详细介绍。
第7章进行符号表的填充,分两个阶段对抽象语法树进行扫描,然后向符号表中填充相关的符号。
第8章介绍了插入式注解的具体实现过程。
第9章介绍了Java的类型转换,重点介绍了赋值转换、方法调用转换、强制类型转换及数字提升这些上下文环境中的类型转换实现。
第10章介绍了语法检查,主要是对类型定义、变量定义及方法定义的合法性进行检查。
第11章介绍了引用消解,主要是查找表达式中所引用的唯一符号,Resolve类中提供了对类型引用、变量引用及方法引用的具体查找方法。
第12章对抽象语法树进行了类型与符号标注,重点介绍了一些重要树节点,如JCIdent和JCFieldAccess等的具体标注过程。
第13章介绍了泛型的实现。泛型类型或泛型方法等与泛型相关的特性完全由编译器来支持,而在后续生成Class文件的过程中需要对泛型进行擦除。
第14章介绍了数据流分析,分别从变量赋值、语句活跃性及异常这3个方面对if判断语句、循环语句及try语句等进行分析。
第15章介绍了语法糖去除,分别对简单的语法糖、语句语法糖、枚举类语法糖与内部类语法糖进行分析。
第16章介绍了字节码指令的生成,通过简单模拟Java虚拟机运行时的情况来更好地生成字节码指令。
第17章介绍了重要结构的字节码指令生成,对一些常见的控制结构,如if语句、循环语句、switch语句及try语句等指令的生成过程进行了详细介绍。
第18章介绍了Class文件的生成,根据Class文件规范生成可被Java虚拟机加载运行的文件。
附录A介绍了Javac支持的命令。
附录B介绍了Java语言涉及的文法。
附录C介绍了对类型的常见操作。
附录D介绍了对符号的常见操作。
附录E介绍了虚拟机字节码指令。
本书读者对象
阅读本书需要读者有一定的编程经验,最好是对Java语言有一定的了解。具体而言,《深入解析Java编译器:源码剖析与实例详解》主要适合以下读者阅读:
? 想深入学习Java语言特性的Java从业人员;
? 想通过实践学习编译器理论的人员,如高校相关专业的学生;
? 想借鉴编译器架构的人员;
? 对大型工程源代码感兴趣的人员。
《深入解析Java编译器:源码剖析与实例详解》阅读建议
《深入解析Java编译器:源码剖析与实例详解》每一章都和前后章形成了承前启后的关系,所以建议读者在阅读本书的过程中,严格按照章节的顺序进行阅读,同时也建议读者在阅读每一章的过程中对书中给出的实例进行实践,以便更好地理解本书所讲的内容。
Javac有10万行以上的源代码实现,并且代码的逻辑密度非常大。读者阅读相关源代码的实现时,建议不要过分纠结于每个实现细节,否则会陷入细节的汪洋大海中。本书对Javac的重点源代码进行了解读,读者可以参考书中对这些重点源代码的讲解进行阅读和调试即可。
《深入解析Java编译器:源码剖析与实例详解》配套资源获取方式
本书涉及的Javac源代码已经开源,可以通过多种途径获取。读者可以直接访问以下网址获取:
读者反馈
由于笔者水平所限,书中可能还存在一些疏漏,敬请读者指正,笔者会及时进行调整和修改。联系邮箱:hzbook2017@163.com。
致谢
在本书的写作过程中,得到了很多朋友及同事的帮助和支持,在此表示由衷的感谢!
感谢欧振旭编辑在本书出版过程中给予笔者的大力支持与帮助!
最后感谢我的家人在写作时给予我的理解与支持,在我遇到挫折和问题时,家人都坚定地支持着我。爱你们!
……