百科问答小站 logo
百科问答小站 font logo



有没有可能现在设计一个程序语言,它能够充分吸收现存语言的优点,同时排除那些缺点? 第1页

  

user avatar   marisa.moe 网友的相关建议: 
      

有多个原因。不过最主要的一点是,并不是因为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甚至在邮件里对骂

wcook.blogspot.com/2012

有甚至,我们一样不知道什么算OOP什么不算。。。

然后,连Statically Typed Functional Programming都能战个痛:

Robert Harper 不支持Haskell 的理由是?

或者退一步,不说这些,我们说语法吧,我们连语法重不重要都不清楚:

Notation As a Tool of Thought

(自图灵奖得主)觉得很重要,然后有一大帮另一票人觉得无关紧要(

fexpr.blogspot.com/2011

如果真把这些人搞一起,一天之内不分裂才奇怪

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),三个乘在一起就是没发生过。




  

相关话题

  GPU 与 CPU 比较,为什么说 GPU 更适合深度学习? 
  如何评价《鸟哥的Linux私房菜》说BSD和GPL很类似以及Windows不跨处理器架构等内容? 
  C/C++编程有哪些没什么用,但让人不明觉厉又不至于太奇怪的写法? 
  如何优雅地叫一个程序员给我修电脑呢? 
  .NET中如何通过Razor引擎生成这样的代码? 
  未来会不会出现这样的编程语言? 
  怎样成为全栈工程师(Full Stack Developer)? 
  现实里后端开发会涉及并发编程一类高级技巧吗? 
  为什么程序员要使用三元运算符而不是显式写出 if 语句? 
  如何评价中科院计算所发布的「木兰」编程语言体系? 

前一个讨论
c#中为什么async方法里必须还要有await?
下一个讨论
if(x>y)和if(x-y>0)有没有区别(x,y都是int)?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利