这个问题不是, “为什么人们仍然使用旧的编程语言?” 我非常了解。实际上,我最了解的两种编程语言是C和Scheme,它们都可以追溯到70年代。
最近,我在阅读有关C99和C11与C89(实际上仍然是C语言中最常用的版本,以及我从K&R那里学到的版本)有关的更改。环顾四周,似乎每一种频繁使用的编程语言都会每十年左右获得至少一次新规范。尽管事实上大多数使用Fortran的人仍在使用FORTRAN 77,但甚至Fortran仍在获得新的修订。
将此与排版系统TeX的方法进行对比。1989年,随着TeX 3.0的发布,Donald Knuth宣布TeX具有完整的功能,以后的版本将仅包含错误修复。他甚至声明,在他去世后,“所有剩余的bug都将成为特性”,并且绝对不会进行进一步的更新。其他人则可以免费使用TeX并已这样做,但是对结果系统进行了重命名以表明它们与官方TeX不同。这不是因为Knuth认为TeX是完美的,而是因为他了解稳定,可预测的系统的价值,该系统将在五十年内完成与现在相同的任务。
为什么大多数编程语言设计师不遵循相同的原则?当然,当一种语言是相对较新的语言时,它会经历一段时间的快速变化然后才适应。没有人能真正反对微小的变更,这些变更所做的工作不只是编纂现有的伪标准或纠正意外的读数。但是,当一种语言在十到二十年后似乎仍然需要改进时,为什么不只是分叉它或从头开始,而不是尝试更改已经使用的语言呢?如果某些人真的想在Fortran中进行面向对象的编程,为什么不为此目的创建“ Objective Fortran”,而让Fortran自己呆着呢?
我想可以说,不管将来的版本如何,C89已经是一种标准,没有什么可以阻止人们继续使用它。这是对的,但内涵确实有后果。GCC将以学究模式警告C99中不推荐使用的语法或含义稍有不同的语法,这意味着C89程序员不能完全忽略新标准。因此,C99必须具有一定的优势,足以使使用此语言的每个人都承担此开销。
这是一个真实的问题,而不是引起争论的邀请。显然,我对此有意见,但是目前,我只是想了解为什么这不只是事情的完成方式。我想问题是:
与基于旧语言创建新语言相比,更新语言标准有哪些(真正的或可感知的)优势?
--std=x
开关(例如,GCC的开关)来调用,因此创建新标准并不会导致破坏旧代码的工具。