网站首页 > 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的,从而你就可以走到第四步。
4、当你觉得有信心了,用A.exe把B编译一遍,就得到了B.exe。然后A的代码和A.exe都在也不需要存在了,删掉他们。以后你就不断的用B.exe来编译下一个版本的B就好了。就自举了。
所以为什么要用自举?自举能带来什么好处?
自举其实是为了证明语言的表达能力,同时语言的设计者也可以通过这样一个实际的复杂的项目来验证语言的设计。
同时自举也能方便后续开发人员对语言增加新特性且不用依赖其他语言,实现自我迭代和进化。
猜你喜欢
- 2024-09-16 读Java性能权威指南(第2版)笔记08_即时编译器中
- 2024-09-16 Java @SuppressWarnings:抑制编译器警告-4
- 2024-09-16 PHP 8.0正式发布:支持JIT编译器,性能提升高达3倍
- 2024-09-16 「深入理解java虚拟机」(一) - 编译器和字节码文件
- 2024-09-16 学习廖雪峰的JAVA教程---泛型(擦拭法由编译器实现强制转型)
- 2024-09-16 JVM底层原理之如何选用C1、C2编译器?它们有什么区别?
- 2024-09-16 JIT编译器的神奇之处:为什么Java如此快速
- 2024-09-16 JVM底层原理之什么是JIT编译器?什么是HotSpot VM?
- 2024-09-16 C语言/C++/Java 入门到项目 资料和编译器
- 2024-09-16 如何在maven pom.xml文件中设置Java编译器版本
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)