用Java写Java编译器?编译自举及其原理

用Java写Java编译器?编译自举及其原理其实我们熟知的Java编译器javac不是用C语言或者是C++语言写的,而是用Java本身写的(源代码可以看这里:http://hg.openj

欢迎大家来到IT世界,在知识的湖畔探索吧!

用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的,从而你就可以走到第四步。

4、当你觉得有信心了,用A.exe把B编译一遍,就得到了B.exe。然后A的代码和A.exe都在也不需要存在了,删掉他们。以后你就不断的用B.exe来编译下一个版本的B就好了。就自举了。

所以为什么要用自举?自举能带来什么好处?

自举其实是为了证明语言的表达能力,同时语言的设计者也可以通过这样一个实际的复杂的项目来验证语言的设计。

同时自举也能方便后续开发人员对语言增加新特性且不用依赖其他语言,实现自我迭代和进化。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/56757.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信