先有鸡还是先有蛋,这个问题你是否也想过?这种具有互相依赖关系的情况,其实相对于经常接触电子产品和信息系统的程序员来说,也很常见。你有没有想过,这种现象就好比现代CPU的设计,需要在PC电脑上设计,而PC电脑的运行又依赖CPU。好比编写操作系统的人,也是在操作系统中开发。好比go语言的编译器,还是用go语言写的。
go语言发展史
作为程序员,最近追踪了一下go语言的发展史,发现go的编译器,最开始是用c语言写的。有些初学者可能不清楚,简单科普一下编译器(compiler),有了编译器,你写的代码才能成为可执行程序,而没有编译器,则称不上一个完整的编程语言。每一种语言,在不同的操作系统上面,有不同的编译器。
但是,后来google把编译器也使用go语言重写了,这个时候,新的go版本的编译器的生成,是依赖低版本的go编译器。最终变成了go语言的编译器也是用go语言写成的。那么,如果不了解go语言发展史的人,就会问,是先有的go编译器还是先有的go语言?其实这种现象,在基础语言开发中很常见,比如说,java的运行时,也是用java写的,gcc也是用c写的。
再谈先有鸡还是先有蛋
所以说,鸡和蛋并不是一下子就形成的,中间肯定存在着很长的过度时期,在这个时期,蛋不一定是鸡下的,鸡也未必是从鸡下的蛋里孵化出来的,这种情况经过漫长的时间,不断进化和优胜劣汰,最后才稳定为蛋生鸡鸡下蛋。如果非要在先有鸡还是先有蛋之间做一个选择,我认为是先有蛋。理由是从物种进化论来看,鸟类也是由爬行动物进化而来,蛋并不是只有鸟类才能下,而鸡一定是从蛋里面孵化出来的。
最后声明一下,以上结论纯属个人瞎编八卦,请勿作为科学结论。
十年老兵,写有技术深度的技术博客,微信公众号“猿界汪汪队”