2011-05-17 80 views
-1

我不再担心风格,例如间距,线条缩进等。为什么语言在语法上更严格?

我失去了适应项目之间不同风格的时间。

为什么语言在这方面变得灵活?为什么不只是要求非常严格的格式?

+6

因为没有人(除了你)会使用这种语言。 – 2011-05-17 15:27:49

+0

随意编写自己的“严格”的语言。几乎总是,每种语言的创造者都有他们自己的设计选择,有些严格的有些宽松,原因很好。 – RedFilter 2011-05-17 15:29:35

+0

不投票重新开放,但我不会相信这是一个真正的“争论”问题,直到我看到有人(不是OQ)实际上试图争论。 – 2011-05-17 15:50:06

回答

2

那么,一个很好的指导性例子就是看看Pascal and the ;命令分隔符发生了什么。

规则尼克劳斯维斯(帕斯卡尔的设计者)提出的是,;是用来区分块内的语句。从编译器的角度来看,这是明智的,因为这是严格要求解析歧义性的句法元素的唯一情况。另外,它通常已经用逗号完成了,所以处理它的代码就在那里。

问题是这是一个奇怪的规则,对于人类编码者来说,这是一个艰难的规则。面对变化也不稳定;如果在块的末尾添加或删除一行,则必须更改哪一行不是分号。大多数Pascal用户在每个编码/调试周期都结束了整个阶段,这些阶段归结为他们的编译器随地吐痰错误,直到他们得到正确的分号为止。他们会讨厌这个问题,并且最终他们讨厌Pascal。

将此与Pascal及其后代引入的相对较强的打字概念相结合,并且您有一些非常胡思乱想的开发人员。他们开始打电话给Pascal及其同行,并且倾向于像C这样的更宽容的语言。这会阻碍许多更好的语言的发展,所有这些都是因为具有良好理论概念的人使他的语言成为了PITA使用的语言。

对于后来设计的语言,Nicklaus Wirth吸取了教训,并将分号定义为命令终止符,而不是分隔符。当然,C设计人员更进一步,并允许额外的分号成为合法(但被忽略)的语法元素。

+1

“C语言的设计者当然更进一步,让额外的分号成为合法(但是被忽略)的语法元素。” 这是我不遵循的一个例子。你为什么要允许;;;? – noop 2011-05-17 16:07:25

+1

@Jeremy - K&R在某处可能有一段引用,但我怀疑这对Pascal来说大部分是(过度)反应。我曾遇到过一位认为那些实际上插入了“NOOP”机器代码语句的C编码人员。他会把它们作为“优化”去除。 :-) – 2011-05-17 16:19:16

0

推测用户定义他们自己的风格(这是否由某些编辑器规则强制执行)的选项优于强制某种风格作为其语法一部分的语言。然而,有些语言在涉及特定规则时稍微严格一些。例如,Haskell中有一个'特性',其中一个给定的行必须比前面的一行缩进得更远才能正常工作(我忘记了这个特定语言特性的名称,但我确信有人知道)。

+0

它被称为布局,它是可选的。如果你喜欢,你可以回到C风格的花括号和分号,尽管人们通常使用布局。 – hammar 2011-05-17 15:41:50

+0

Python例如强制您选择一个缩进级别并坚持下去。我发现python的结果更具可读性!我只是希望他们已经完成了额外的步骤,并确定了缩进级别。 – noop 2011-05-17 16:09:21