百科问答小站 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),三个乘在一起就是没发生过。




  

相关话题

  为什么不把push ebp和mov ebp, esp的操作通过硬件方式做进call指令中? 
  设计 MySQL 数据表的时候一般都有一列为自增 ID,这样设计原因是什么,有什么好处? 
  为什么C语言中计算机认为0是假的,其他数都是真的? 
  你是如何自学 Python 的? 
  在宿舍写代码总被一个室友认为在装逼,该怎么办? 
  程序员应该如何优雅地关闭电脑? 
  接私活结果最后钱要不回来该怎么办? 
  如何看待一五年级小学生称其自创编程语言,实际完成度如何? 
  为什么说「动态类型一时爽,代码重构火葬场」? 
  回调函数 callback 的实现原理是什么? 

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





© 2025-03-24 - tinynew.org. All Rights Reserved.
© 2025-03-24 - tinynew.org. 保留所有权利