我叫Java,生活在计算机世界的“编程语言”层。
什么?
你说我的名字有些怪?听起来像咖啡?
其实你可能不知道,以前我叫Oak,我特别喜欢这个名字。可是后来我老爹高斯林发现,已经有人叫这个名字了,所以我被迫改名成Java。
但我一点也不喜欢咖啡,它太苦了,即便加了糖,也难以遮掩它原本的味道。
我喜欢的是糖水,因为它像爱情的味道。
……
那是在1994年,我喜欢上了她,那年我刚1岁。
她聪明睿智,美丽动人。人们称她为OS,Operating System,你看,多么优雅的名字。
我并非暗恋,我是个说做就做的人,所以,我曾坚定的与她告白。
我没有听到她拒绝我。
可世界上最悲催的事情莫过于,当你深情告白时,对方却听不懂你在说什么。
最最悲催的事情莫过于,对方说什么,你也听不懂。
当时我伤心欲绝,C语言老大哥听了我的遭遇,对我深表同情。
他告诉我,作为编程语言,想要和OS(操作系统)交流,必须带着同声传译——编译器。
我兴奋极了,恳求我老爹高斯林为我搞一部编译器。老爹也没推诿,作为“聪明绝顶”的高级工程师,造个编译器虽然麻烦,但并不困难。
过了些时日,老爹的编译器造好了,取名叫Javac。
老爹非常体贴,怕我搞不明白Javac编译器的用法,特地为我写了一张说明书,上面详细介绍了编译器的使用方法及工作过程。
原来,想要把一种语言翻译成另外一种语言,编译器Javac首先要读取我的话(源代码),交由它的词法分析部件处理。词法分析部件将我讲的话转变为Token(标记)集合。
这个所谓的标记集合属实让我感到费解,还好老爹做了说明。
词法分析部件,顾名思义,就是分析我话中都有哪些单词,单词可以包括话中的关键字、变量名、运算符等,不符合规范的单词会被词法分析部件发现并告诉我修改。词法分析部件分析出来的“单词”被称为Token,是整个翻译(编译)过程中的最基本单位。
随后,Javac中的语法分析部件开始工作,将Token集合组合成抽象语法树。
等等,抽象语法树又是个啥?
我仔细一看,说明书的注解2详细说明了抽象语法树。我不禁感慨,江湖人称高老大的老爹果然名不虚传。
抽象语法树,是句子的一种抽象表现形式,也是一种树形表示句子的形式,比如:“2+3*4”可大致表述为:
有了抽象语法树,Javac的翻译过程进入下一步——语义分析。这一步就好理解了,语义分析就是分析我说的话,到底是什么意思。同时,这一步还能判断我说的话是否符合逻辑。
语义分析结束,整个翻译的过程也接近尾声。
我定睛一看,最后一步被老爹称为“字节码生成”。根据老爹的描述,字节码是一种类似普通话的东西,简洁明了。
再也按捺不住激动的心情,还没来得及细看字节码的后续介绍,我就激动地冲出房间,找到了OS。
打开编译器Javac,我大声地对OS喊道:“我喜欢你!”
过了片刻,我只看到OS一脸茫然。
我急得满头大汗,又说了一句:“我喜欢你!”
OS更茫然了。
她说了一句:“&*%¥……¥#%#!@”
???
她说了什么?
C语言老大哥不是说有了同声传译我们就能互通彼此了吗?
我很不开心,想要问问C语言老大哥这到底是怎么回事。
C语言老大哥研究了一会我的编译器,哈哈大笑:“看来你老爹不希望你早恋。我们之所以拿着编译器就能和OS交流,是因为我们的编译器最后生成的结果是汇编语言,这种语言能够被操作系统中的汇编器处理。根据你说的,你的编译器最后产生的结果是字节码,肯定是不能被操作系统识别的。因此,你们俩根本就没法交流。“
我对C大哥道了声谢,郁闷的返回家中。
老爹见我闷闷不乐,便对我说,只将我的话翻译到字节码,是为了以后让我适应更广阔的天地,有更好的发展,现在即便我和她表白,也是没有结果的。
他还告诉我,这世界上不只有这一个操作系统,何必单恋她这OS呢?
我不解。
因为当时,我只想让那心心念念的姑娘明白我的心意。
过了许久,老爹交给了我许多名为JVM(Java虚拟机)的东西,他告诉我,当我把编译器Javac和JVM连接在一起的时候,就能生成最终机器码,将明确的意思传达给操作系统。
老爹还笑眯眯的对我说,当你使Javac和不同的JVM组合时,就能够和不同的OS交流。
听到这里,我没再理会老爹,飞奔而出。
见到了OS后,我将代表着她的JVM和Javac连接,终于说出了能让她明白的”我喜欢你!“。
可是……她还是没有任何反应。
最后我懂了,我爱她,她却胸怀天下。
“所爱隔山海,山海不可平”,大抵如此吧。
最后的最后,我凭着JVM,成为了新一代的海王……
(完)