有多个原因。不过最主要的一点是,并不是因为A是B的superset,就说明A更好。
0:程序语言特性不兼容。
这点其他人已经说了,就不再重复。
1:学习复杂度
语言特性越多,学起来要花时间。
有的时候,可以学一半用一半-事实上大部分人都是这样干的,但是很多特性,比如说隐式转换,subtyping,exception等等,不是你当不存在就不存在的,会时不时跳出来坑你一下(或者你得把他们学了)
如果你要写宏,这就更微妙了,漏掉什么都会导致bug(这也算原因2)
2:复杂度导致的各种工具的开发难度&运行效率
复杂度并不是只坑用户,更多的是坑语言开发者。
你可能会对我说,‘关我什么事啊?我用的爽不就对吗?’不过的确很关你事。
编译器/解释器越复杂,就越可能有bug,你就越会被编译器坑,原来用来优化算法(编译器运行时间,编译出来的程序的运行效率)的时间也会用在填坑上,导致编译时间更长,运行效率更低,编译器越不稳定。
除此以外,除了运行你的程序,还有很多可以对你程序做的东西,上面说的宏正是如此。除此以外还有类型推导(system F以上,undecidable),formalization of semantic(haskell的Core Language有formalization,complete language没有,见A History of Haskell)。越是强大的语言,开发这些的难度也就越大,程序员的工具也就越小。
3:程序语言设计界自身的分裂
我们甚至不需要说编程界对编程语言认识的分裂(这大家都应该知道得很清楚),专门研究程序语言的人也没有太多的共识。
比如说,很多人(
CanProgrammingBeLiberated(PL图灵奖得主),
WhyFunctionalProgrammingMatters)认为函数式编程是未来,(PL图灵奖得主)Dijkstra很不滋瓷(
jiahao/backus-dijkstra-letters-1979)
甚至更夸张一些,连什么是函数式编程,到现在一样没共识(
知乎专栏)
然后一样有图灵奖得主alan kay背书的smalltalk,Dijkstra更不支持。“Object-oriented programming is an exceptionally bad idea which could only have originated in California.” – Edsger Dijkstra.
或者换一个人,William Cook(6k引用)Robert Harper(15k引用)一样为滋不滋瓷OOP甚至在邮件里对骂
http:// wcook.blogspot.com/2012 /03/emails-with-bob-harper.html有甚至,我们一样不知道什么算OOP什么不算。。。
然后,连Statically Typed Functional Programming都能战个痛:
Robert Harper 不支持Haskell 的理由是?或者退一步,不说这些,我们说语法吧,我们连语法重不重要都不清楚:
Notation As a Tool of Thought(自图灵奖得主)觉得很重要,然后有一大帮另一票人觉得无关紧要(
https:// fexpr.blogspot.com/2011 /06/primacy-of-syntax.html)
如果真把这些人搞一起,一天之内不分裂才奇怪
4:很多语言的确就是这样,只不过因为前4个原因,规模没有‘全球顶尖语言专家大炼钢’这么夸张。
如果说一群大佬,Algol(58 60 68)有Alan Perlis, Peter Naur, John Backus, Dijkstra, Tony Hoare, John McCarthy 6个图灵奖得主,算空前(目前来说)绝后了
如果说混语言, C++/Scala/OCaml就是例子,前者偏工业界后两者偏学术界,都有很多人在上面搞事,尽管都没达到鬼畜的‘n个图灵奖得主’的地步。。。
如果说大佬混语言,这就是SML/Haskell/Scheme等语言标准化行动,尽管统一的都是差不多的语言。。。
至于又有一群大佬,又混语言,又是混的不同语言,这些事件每一个都是小概率(原因见0123),三个乘在一起就是没发生过。