用Java写Java编译器?编译自举及其原理
其实我们熟知的Java编译器javac不是用C语言或者是C++语言写的,而是用Java本身写的(源代码可以看这里:http://hg.openjdk.java.net/jdk6/jdk6/langtools/file/779c45081059/src/share/classes/com/sun/tools/javac)
或许我们会觉得奇怪,为什么可以用Java语言编写用来编译自身的Java编译器,其实这在编译器技术中叫做自举(bootstrap),可以用如下过程来解释其原理:
如果你想创造一门V语言,而且用V语言来写V编译器的话,你得按照下面的方法做:
1、用C++把那个编译器(A)写出来,顺便留下很多测试用例。
2、用V语言把那个编译器写(B)出来,用A.exe来编译B,修改直到所有测试用例都通过为止。
3、B.exe来编译B自己得到B2.exe,修改直到B2.exe所有测试用例都通过为止。这是为了保证,就算B本身有很多bug,至少编译自己是没有bug的,从而你就可以走到第四步。
推荐阅读
- 我的世界|我的世界:Java种子新出炉,内陆蘑菇岛算什么,这些种子它不香?
- Java|Java 地位不保,落后已成定局 ?| 10月编程语言排行
- Java|Lombok 简单方便,为什么有些公司不让用?
- 华为鸿蒙系统|华为真是起名鬼才!鲲鹏原生编译器正式上线,黑子们可以闭嘴了
- Java|面试官:开口要25K,我就用了2成功力,把你问到怀疑人生(Java)
- 在家里睡觉、刷剧,不如看看这些份Java面试宝典,跳槽面试不心慌!
- 工作10年,面试超过300人想进阿里的同学,总结出的java面试69题
- Java 操作 HBase 教程
- 一文详解 Java 的几把 JVM 级锁
- 为什么C语言编译器能用C语言编写?