Inc*_*ito 3 programming-languages language-design
有趣的是,有些语言不使用分号和括号,即使它们的前辈有它们.就个人而言,由于这个原因,我在Python中编写代码会让我感到紧张.谷歌的GO语言中也缺少分号,尽管词法分析器使用规则在扫描时自动插入分号.
为什么有些语言不使用分号和大括号?
mik*_*era 23
每种编程语言都必须有一些方法来区分语句的结尾,函数调用参数列表或下一个语句的代码块.
有些语言使用; 和{}(C,Java)
有些语言依赖于已知大小的参数列表(x86汇编代码)
有些人使用括号来形成s表达式(Lisp,Clojure)
一些使用空格(Python)
有些使用特殊关键字,如begin .... end(Pascal,Delphi)
所以基本上这只是语言设计的选择.总有一些相当于; 或{},即使乍一看看起来不一样......
Dan*_*llo 14
您可以争辩说,当您使用分号和大括号时,仍然会使用空格和新行缩进代码 - 出于可读性原因.因此,在这个意义上,这些分隔符可以被认为是多余的.
Jon*_*eet 11
这些语言的设计者可能认为大括号和分号是不必要的,当线条延续可以(通常)由于语句不完整而被检测到,并且可以通过空格检测块.
就个人而言,它也让我感到紧张,但是C#中缺少检查的异常对我有一段时间的影响......我怀疑当你习惯这样的方案时,它可以提高可读性(这就是重点) .当然,这确实意味着你需要更加小心的空白.
小智 9
我们一直使用缩进来表示语句分组作为可读性辅助很长一段时间.当缩进和实际语句分组(由{};表示,开始/结束,等等)发生冲突时,这偶尔会导致问题; 我们读了一个含义,但代码实际上说了别的.
Python采用了简化方法.如果我们发现缩进是表达清晰度的帮助,为什么不将语言本身确定为分组.当我们编写代码时,我们向其他读者表达意图,因此查看写作大师所说的内容通常很有用:
一个句子应该包含没有不必要的单词,一个段落没有不必要的句子,因为一个绘图应该没有不必要的行和机器没有不必要的部分.~Will Strunk,Jr.,The Elements of Style,1918
那么,也许编程语言应该没有不必要的语法元素......
有些语言没有使用分号和大括号的原因吗?
一些设计师认为,诸如分号和括号之类的"句法噪音"会使读者分心.有多种方法可以消除它们:
Python和Haskell使用了显着的缩进.
Clu和Lua使用非常精心设计的语法.
标准ML使用关键字来引入每个构造加上let-bindings,这消除了对大多数分号的需要,同时还提供了一种方便的方式来声明局部变量.
Bourne shell使用重要的换行符来消除分号
Scheme使用非常规则的语法,其中唯一的句法标记是括号.像Olin Shivers这样的长期计划者声称,几周后,你的大脑会调整,你不再看到括号.
事实上,有如此多的设计,有如此多的变化,这表明许多语言设计者将分号和括号视为语法噪音,如果可能的话就要消除.通过消除语法噪声,设计人员可以使程序更容易阅读和理解.并且许多程序员感觉更有效率,好像信噪比已经提高并且他们更清楚地引导他们的代码.(我不会说他们是对的,我不会说他们错了,但我会说有语言设计决定,这个很容易捍卫.)
那么语言设计师是否有使用分号和括号的原因呢?
许多现代的分号和支撑语言都是明确地设计的,或者在某些情况下不是那么明确地设计,以吸引C程序员.毕竟,如果它有分号和括号,它必须易于学习.对?
使用分号和括号等分隔符只是一个品味问题.实际上,编译器可以在没有它们的情况下工作,那么,为什么要在现代编程语言中使用它们呢?正如我所说的,是一个品味的问题,并...一个长期建立的事实上的语法ressembles C.这是很难对抗战斗.
有一个字段,其中大括号和分号是有用的:代码生成.当您生成希望以某种反射行为进行编译/解释的代码时,编写大括号(例如,只有一行,单行)通常比编写编程语言所需的结构(如例如,Python.想想一个带有几个unnested循环的函数.您必须跟踪每行所需的标签数量.