现代编程语言的良好特性

关于现代编程语言的良好特性,我也来说说自己的一点点想法:

  1. OO范式并未过时,而是Java的OO方式太过保守和繁琐了,总想做好,也添了不少这个那个的特性,但往往没出力到点子上,甚至Gosling都说如果现在来设计Java,绝对不是现在这个样子。比如Data Class(Scala里类似的Case Class,当然更强大,特别是结合PM)、Trait,都是非常好的高效特性,但Java不支持(不过据说11里会考虑,仅仅还只是可能)。虽说Python到了刚发布的3.7版本才加入Data Class,但之前早就已经有了不错的namedtuple替代方案。
  2. 有关OO的继承特性的讨论就更多了,Favor Composition Over Inheritance。
  3. 函数第一性是必须的,这样才有之后的Closure、Lambda。再看看Java,为了支持Lambda,需要整理一堆的Functional Interface出来,实在是照虎画皮不伦不类,失去了Lambda一次性应用的乐趣与便捷。
  4. 并发特性。其实不管是CSP还是Actor,我的感觉是只要有并发支持就行,都是成熟并发模型。而性能问题实在是扯不清,个人偏好也各不同。但并发原子特性轻量化应该是趋势。CSP模型没啥毛病,这是在Unix环境里得到充分证明的好模式。关于性能,绝大多数场景都是能够hold得住的,不只是编程语言的事情,况且没人能指望一门编程语言就能够应对所有业务场景。
  5. 类型推断。这是必须,在「Programming in Scala」一书中开篇对“类型推断”的阐述,能够让人对“类型推断之于静态语言的意义”有清晰认识,也正是这席精辟描述,让我当年喜欢上了Scala。可以说,类型推断在静态语言中的作用非凡,类型系统设计优劣,至少从面上影响了开发效率——冗余不是静态语言的原罪,而是看是否在类型系统设计上下了大力气。Java新版本也不得不开始考虑更多的类型推导设计了。
  6. 简单。也许这世上就是有一小撮人对语言结构很注重细节,比如我自己。但绝大多数人还是没这么投入的,其关心的是“能够很快地上手去解决问题”,所以简单性至关重要。这里Go就是一个很好的例子,其在工程化特性方面的执着,给其带来了显著收益。从这点上来看,Scala的特性又实在是多了一些。
  7. 小结一下,OO结合FP是趋势,去OO重量化特性而添加轻量化特性是趋势,更好的类型推导(系统)是趋势,简单化是趋势。近期的一个编程语言大好发展时期是2010的前后五年,这是要有互联网、移动互联网快速发展背景来支撑的。而且这段时间不仅仅是编程语言在快速发展,框架乃至更博大更宏大的技术模式都在变化。以后会不会再出现快速攻城掠寨的编程语言?我觉得难度不小,看领域业务发展能否带来机遇。所以,TypeScript、Dart、Go、Kotlin、Swift等可能就是最近一班车的乘客,其他更小众的一些编程语言,可能就要骑着车奋力直追了。

相关推荐