语言设计的现状

今天有成千上百种编程语言,而且新语言还在不断被发明。为什么需要这么多?有几个可能的回答:

  • Evolution
  • Special Purposes
  • Personal Preference
  • Expressive Power
  • Ease of Use for the Novice
  • Ease of Implementation
  • Standardization
  • Open Source
  • Excellent Compilers(优秀的编译器)。Fortran 的成功归功于优秀的编译器。在某种程度上这是历史问题。Fortran 已经存在了太久,公司已经花费了太多的时间和金钱使得编译器生成性能很高的代码。但是这也是语言设计的问题,在90年代之前 Fortran 没有递归和指针,这些功能会影响代码生成(起码对于不需要这些功能的程序)。同样某些语言,比如 Lisp 的成功,部分原因就是它们具有编译器以及具有帮助编程人员管理大型程序的工具。
  • Economics, Patronage, and Inertia(经济学,资助和惯性)。最后,除了技术有点之外,其他因素极大影响了成功。强大的赞助商就是一个因素。PL/I 首先归功于 IBM,Cobol 和 Ada 归功于美国国防部,C# 归功于微软。近些年,Object-C 作为 iPhone 和 iPad 的官方语言也越来越流行。生命周期的另一环在于,即使有了更好的替代品,但是已经有了太多的遗留设施,替换的成本太高,比如世界金融基础设施还有很多 Cobol 发挥着作用。

清楚的看到没有单一因素决定一门语言是不是够好。同样在学习语言的过程中,我们也要从几个角度来考虑问题。尤其是,我们应该考虑程序员和语言实现者的观点。有时候这些观点比较统一的,比如对于执行速度的追求。然而,通常情况下存在冲突和权衡,比如新功能的实现和成本之间的权衡。功能的实现提升的成本不只是使用这个功能的程序,还有不使用这种功能的程序。

在早期,实现语言者的观点是主要的。编程语言演变为告诉计算机怎么做的一种手段。对于开发者,语言更像是表达算法的一种手段。就像自然语言约束了观点的表达与论述,编程语言也约束了容易和不容易表达的内容,同时也对程序员的想法具有深远微妙的影响。Donald Knuth 将编程视作一种告诉其他人计算机如何工作的艺术。这个定义也许是最好的,它承认概念的清晰和实现效率都是基本问题。本书试图抓住折中的精神,考虑每个主题的概念和实现两方面内容。