【问题标题】: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 编译器,您可能会开始欣赏不那么严格的格式。

标签: coding-style jslint lint pylint


【解决方案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 更具可读性!我只是希望他们已经采取了额外的步骤,并准确地确定了缩进级别。
猜你喜欢
  • 2012-03-14
  • 2017-07-31
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2012-07-25
  • 2020-12-19
相关资源
最近更新 更多