先有第一只鸡还是先有第一只鸡蛋?这是个悖论。
先解释一下: 悖论—逻辑学指可以同时推导或证明两个互相矛盾的命题的命题或理论体系。
没有鸡哪儿来的鸡蛋呢?同样,没有鸡蛋怎么孵出鸡呢?计算机语言中其实也有类似的现象。
以C语言和它的编译器gcc为例。C语言的编译器是用C语言写的,这样看来应该先有C语言。可是如果没有C语言编译器,C语言也没法运行。这里C语言就好像鸡蛋,而C语言编译器就好像是鸡。鸡孵化鸡蛋,C语言编译器编译C语言。在C语言这个范畴里,先有C语言还是先有C语言编译器也是一个悖论。
可是跳出这个圈子问题就迎刃而解了。因为第一个C语言编译器可以用其它语言实现。C语言及其编译器的发展历史可以概述如下:首先是用汇编语言产生了第一个C语言编译器,于是我们可以使用K&R的C语言。后来用K&R C写出了ANSI C89标准的C语言编译,然后用C89语言写出了支持C99标准的C语言编译。
根据这个过程类推,我们可以猜测鸡的进化过程大概是这样的:首先是原始鸟类下了一个基因变异的蛋,然后从这只蛋里孵出了第一只原始鸡。然后鸡生蛋,蛋孵化出鸡。其中每次鸡生蛋的时候都有小量的基因变异,最终形成了现在的鸡这个物种。至于先有鸡还是先有鸡蛋,就要看我们是否把那个原始鸟类下的变异蛋叫鸡蛋了。
注:
----起初,C语言没有官方标准。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。布莱恩·柯林汉(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本书,名叫《The C Programming Language》。这本书被 C语言开发者们称为K&R,很多年来被当作 C语言的非正式的标准说明。人们称这个版本的 C语言为K&R C。
----即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最 准要求,许多老旧的编译器仍然运行K&R C的标准。
----1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。
----1983年,美国国家标准协会(ANSI)成立了一个委员会X3J11,来制定 C语言标准。
----1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSI X3.159-1989 “Programming Language C”。因为这个标准是1989年通过的,所以一般简称C89标准。有些人也简称ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。
----1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC 9899:1990 - Programming languages – C。因为此标准是在1990年发布的,所以有些人把简称作C90标准。不过大多数人依然称之为C89标准,因为此标准与ANSI C89标准完全等同。
----1994年,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C89标准修订版,名叫ISO/IEC 9899:1990/Cor 1:1994 有些人简称为C94标准。
----1995年,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C89标准修订版,名叫ISO/IEC 9899:1990/Amd 1:1995 - C Integrity,有些人简称为C95标准。
----1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC 9899:1999 - Programming languages – C,简称C99标准。这是C语言的第二个官方标准。
----2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C语言的新标准,名叫ISO/IEC 9899:2011 - Information technology – Programming languages – C [10] ,简称C11标准,原名C1X。这是C语言的第三个官方标准,也是C语言的最新标准。
C语言发展史参见百度百科:
https://baike.baidu.com/item/c%E8%AF%AD%E8%A8%80/105958?fr=aladdin