语言设计中的折中(权衡tradeoff)

在《程序设计语言原理》(第8版)中,作者这样描述语言设计中的取舍问题。

可靠性 vs 执行代价

两个相互矛盾的标准时可靠性与执行代价。例如,Java语言的定义要求:必须对所有数组元素的引用进行检测,以保证所有下标都在合法的范围之内。这个步骤给包含大量数组元素引用的Java程序增加了很大的执行代价。C语言不要求进行下标范围的检测,所以C程序的执行速度比语义上相同的Java程序要快;当然Java程序则更为可靠。Java语言的设计人员以程序执行效率为代价换取了可靠性。

可读性 vs 可写性

直接导致设计权衡的、相互矛盾的标准的另一个例子是APL语言。APL语言具有一整套功能强大、用于数组操作数的运算符。因为这些运算符的数目很大,APL必须引入大量的新符号来表达这些运算符。另外,多个APL运算符可以同时用于同一冗长、复杂的表达式中。作为这种表达性高的一个结果是:对于那些具有多个数组运算的应用,APL语言的可写性很高。的确,只需一个十分短小紧凑的程序就能进行大量的计算。然而它的另一个后果是,APL程序的可读性极差。紧凑精炼的表达式具有一定程度上的数学形式美,然而却让非程序设计者的其它人员难于理解。著名的作家Daniel McCracken曾经写到,他花费四个小时来阅读和理解一个仅有四行的APL程序。APL语言的设计者以可读性为代价换取可写性。

可写性 vs 可靠性

可写性与可靠性之间的矛盾是语言设计的一对普遍矛盾。C++中的指针可以以各种不同的方式来操作,这导致了C++中数据寻址的高度灵活性。因为指针所具有的潜在可靠性问题,Java没有包括这样的方式。

设计一种语言时,在对语言的结构和特性进行选择的工作中,包含着一系列的妥协与权衡。

posted on 2010-09-18 13:17  胡是  阅读(599)  评论(0编辑  收藏  举报

导航