为啥语言在语法上不更严格? [关闭]

Posted

技术标签:

【中文标题】为啥语言在语法上不更严格? [关闭]【英文标题】:why aren't languages syntactically stricter? [closed]为什么语言在语法上不更严格? [关闭] 【发布时间】:2011-08-27 08:28:27 【问题描述】:

我会浪费时间担心风格,例如间距、行缩进等

我会浪费时间适应项目之间的不同风格。

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

【问题讨论】:

因为没有人(也许你除外)会使用这种语言。 随意编写自己的“严格”语言。几乎总是,每种语言的创建者都会做出自己的设计选择,有些严格有些宽松,有很好的理由。 不投票重新开放,但我不会相信这实际上是一个“争论性”问题,直到我看到有人(除了 OQ)真正尝试争论。 有人记得旧的 FORTRAN 编译器,行号在 1-6 列,续行标记在 7,语句本身在 8-72? (除非行号是 1-5 和 6 中的延续标记,那是很久以前的事了。)或者 COBOL 卡的 A 和 B 区域?如果您可以使用旧的 FORTRAN 编译器,您可能会开始欣赏不那么严格的格式。 【参考方案1】:

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

Nicklaus Wirth(Pascal 的设计者)提出的规则是 ; 用于分隔块内的语句。从编译器的角度来看,这是明智的,因为这是唯一需要语法元素来解决歧义的情况。另外,它通常已经用逗号完成了,所以处理它的代码就在那里。

问题在于,这是一个奇怪的规则,对于人类编码人员来说,这是一个难以理解的规则。面对变化也不稳定;如果您在块的末尾添加或删除一行,您必须更改哪一行没有分号。大多数 Pascal 用户最终在每个编码/调试周期中都有一个完整的阶段,这归结为他们的编译器向他们吐出错误,直到他们的分号正确。他们会讨厌它,进而讨厌 Pascal。

将此与 Pascal 及其后代引入的相对较新的强类型概念结合起来,您就会得到一些非常暴躁的开发人员。他们开始称 Pascal 及其同类 bondage and discipline languages,并倾向于使用更宽松的语言,如 C。这会阻碍许多更好的语言的发展,这一切都是因为有良好理论概念的人将他的语言作为 PITA 使用.

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

【讨论】:

“C 设计者当然更进一步,允许额外的分号成为合法(但被忽略)的语法元素。”这是我不遵循的一个例子。你为什么要允许;;;? @Jeremy - 可能在某处引用了 K&R 的一句话,但我怀疑这主要是对帕斯卡的(过度)反应。我曾经遇到一个 C 编码器,他认为那些实际上插入了 NOOP 机器代码语句。他会将它们作为“优化”删除。 :-)【参考方案2】:

据推测,用户定义自己的样式(无论这是否由某些编辑器规则强制执行)的选项比强制将某种样式作为其语法的一部分的语言更可取。然而,当涉及到特定规则时,有些语言会稍微严格一些。例如,Haskell 中有一个“功能”,其中给定的行必须比一些相关的前一行缩进更远才能正常工作(我忘记了这个特定语言功能的名称,但我相信有人知道)。

【讨论】:

这叫做布局,是可选的。如果您愿意,您可以恢复为 C 样式的花括号和分号,尽管人们通常使用布局。 Python 例如强制你选择一个缩进级别并坚持下去。我发现这导致 python 更具可读性!我只是希望他们已经采取了额外的步骤,并准确地确定了缩进级别。

以上是关于为啥语言在语法上不更严格? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥word里的页眉页脚设置好了,关闭页眉页脚对话框,页面上不显示页眉页脚?

数据类型的表示是不是应该由其语言规范严格指定? [关闭]

为啥 C++ 语法如此复杂? [关闭]

为啥这么多汇编语法都包含逗号? [关闭]

哪个文本编辑器支持 Wiki 代码的语法高亮显示? [关闭]

Angular/rxjs:为啥我不必再导入 toPromise 了? [关闭]