先有鸡还是先有蛋?C语言给出了答案
先有第一只鸡还是先有第一只鸡蛋?这是个悖论。没有鸡哪儿来的鸡蛋呢?同样,没有鸡蛋怎么孵出鸡呢?计算机语言中其实也有类似的现象。
以C语言和它的编译器gcc为例。C语言的编译器是用C语言写的,这样看来应该先有C语言。可是如果没有C语言编译器,C语言也没法运行。这里C语言就好像鸡蛋,而C语言编译器就好像是鸡。鸡孵化鸡蛋,C语言编译器编译C语言。在C语言这个范畴里,先有C语言还是先有C语言编译器也
可是跳出这个圈子问题就迎刃而解了。因为第一个C语言编译器可以用其它语言实现。C语言及其编译器的发展历史可以概述如下:首先是用汇编语言产生了第一个C语言编译器,于是我们可以使用K&R的C语言。后来用K&R C写出了ANSI C87标准的C语言编译,然后用C87语言写出了支持C99标准的C语言编译。
根据这个过程类推,我们可以猜测鸡的进化过程大概是这样的:首先是原始鸟类下了一个基因变异的蛋,然后从这只蛋里孵出了第一只原始鸡。然后鸡生蛋,蛋孵化出鸡。其中每次鸡生蛋的时候都有小量的基因变异,最终形成了现在的鸡这个物种。至于先有鸡还是先有鸡蛋,就要看我们是否把那个原始鸟类下的变异蛋叫鸡蛋了。