五个编程语言设计中常犯的失误

来源:北大青鸟飞迅校区|发布时间:2013-05-05 11:22:31

  近几年来,编程语言的设计正在经历着类似于“文艺复兴”的过程,这么说主要是基于下面两个事实:(1)多核技术推动着PC消费者更多的关注并行程序。(2)动态语言的性能越来越好,其性期已经可以足够用来实现互联网服务,并且它们正在走出“脚本语言”阴影。

  这篇文章试图收集最重要的编程语言的设计错误,以便让那些程序语言设计者们在设计新型的编程语言时避免。我避免了一些纠缠不清的有好有坏的问题,如:动态类型或是静态类型。我也省略了那些看起来并不严重,很容易被修改的错误。例如,加入“参量”(Parametric Type),这在Java中已经有了。Sun在发布Java 1.0版后的第八年才加入了这一功能。还有一个最近的例子是 Google Go Language Design FAQ 中说到的:: “Generics may well be added at some point. We don’t feel an urgency for them, although we understand some programmers do.”

  0. Null 指针

  几乎在所有的主流编程语言中,对一个对像的引用可能会是一个空指针,这个错误会引发运行时错误。 C.A.R. Hoare 最近声明向这一“发明”负责,尽管如此,其它许多的设计者们都应该对这样的设计受到批评。下面是 C.A.R Hoare 的“忏悔”:

  I call it my billion-dollar mistake. It was the invention of the null reference in 1965. [...] More recent programming languages like Spec# have introduced declarations for non-null references. This is the solution, which I rejected in 1965. - C.A.R. Hoare

  我把它叫做“亿万美元错误”。这个空指针的发明创造来自1965年。…… 现在的编程语言引入了“非空引用”的声明规格。这个方案被我在1965年给拒绝了。

  其它语言,如 C/C++ 更夸张,它们在运到这样的错误时,直接Crash掉,而 Java, Python 和其它语言会抛出一NullPointerException异常,但问题是,这个 RuntimeException 可能会被几乎所有的语句抛出。其实,只需要一个静态类型的语言就可以保证不会出现空指针或空引用。例如: Cyclone 是一个安全的C变种,其引入了非空指针和指针运算的限制。

  一些语言甚至让你根本不可能创建空指针,虽然这使得明确的指针不能行进行运算。Haskell 就是这样的一个语言,其提供了Maybe Monad,其强制程序员考虑“Null”的情形。

  1. 很难解析的语法

  编程语言的语法应该来自 LALR 或是更好的 LL(1)。今天的程序员需要适当的工具来支持其开发语言,也就是我们常说的IDE,编译器或是其它可以帮你解析程序语言的编程工具。这并不会出现在一个单一的前端。也许,多重编译器已经被实现出来了。这可能让我们的开始变得更容易一些。然而,我们现实中的一个反例是 C++,几乎没有哪个C++的编译器可以把C++这个语言完美地正确地解释出来,而且不同C++的编译器的行为如此的诡异。编程语法的开销是微不足道的,程序员应该在编写程序中享有更快速和高效的回报。

上一篇:国外资深人士给PHP初学者的一些经验
下一篇:软件编程初学者怎么学习java?

热门话题

招生热线: 4008-0731-86 / 0731-82186801

学校地址: 长沙市天心区团结路6号

Copyright © 2006 | 湖南大计信息科技有限公司 版权所有

湘ICP备14017520号-3

关注我们
在线咨询
嘿,我来帮您!