为什么有些语言不使用分号和大括号?

Inc*_*ito 3 programming-languages language-design

有趣的是,有些语言不使用分号和括号,即使它们的前辈有它们.就个人而言,由于这个原因,我在Python中编写代码会让我感到紧张.谷歌的GO语言中也缺少分号,尽管词法分析器使用规则在扫描时自动插入分号.

为什么有些语言不使用分号和大括号?

mik*_*era 23

每种编程语言都必须有一些方法来区分语句的结尾,函数调用参数列表或下一个语句的代码块.

有些语言使用; 和{}(C,Java)

有些语言依赖于已知大小的参数列表(x86汇编代码)

有些人使用括号来形成s表达式(Lisp,Clojure)

一些使用空格(Python)

有些使用特殊关键字,如begin .... end(Pascal,Delphi)

所以基本上这只是语言设计的选择.总有一些相当于; 或{},即使乍一看看起来不一样......

  • @mikera:`addup xy = x + y`定义了一个类型为`Num a => a - > a - > a`的函数.`addup x =\y - > x + y`也是如此.事实上,addup功能的用户无法确定是否已经以第一种或第二种方式定义了addup.例如,无论如何定义addup,您都可以执行`add42 = addup 42`.fxy和(fx)y总是等价的.基本上链接函数应用程序是haskell模拟多个参数的方式.Haskell不使用arity来确定表达式的结束位置,它使用indendation或分号(或`in`或其他语法结构) (2认同)

Dan*_*llo 14

您可以争辩说,当您使用分号和大括号时,仍然会使用空格和新行缩进代码 - 出于可读性原因.因此,在这个意义上,这些分隔符可以被认为是多余的.

  • 是的,如果编译器读取大括号并且人类读取缩进,那么在任何有冗余的地方,您也会有潜在的错误来源. (8认同)

Jon*_*eet 11

这些语言的设计者可能认为大括号和分号是不必要的,当线条延续可以(通常)由于语句不完整而被检测到,并且可以通过空格检测块.

就个人而言,它也让我感到紧张,但是C#中缺少检查的异常对我有一段时间的影响......我怀疑当你习惯这样的方案时,它可以提高可读性(这就是重点) .当然,这确实意味着你需要更加小心的空白.

  • @Dominic:我总是在C#和Java中使用大括号,即使是单行if语句:) (4认同)
  • @Incognito:我认为在C#中检查异常并不是很好.当我不得不在Java工作时,我无法忍受他们.我想不出我在C#代码中实际看到过的一个错误,它会被检查过的异常保存. (2认同)

小智 9

我们一直使用缩进来表示语句分组作为可读性辅助很长一段时间.当缩进和实际语句分组(由{};表示,开始/结束,等等)发生冲突时,这偶尔会导致问题; 我们读了一个含义,但代码实际上说了别的.

Python采用了简化方法.如果我们发现缩进是表达清晰度的帮助,为什么不将语言本身确定为分组.当我们编写代码时,我们向其他读者表达意图,因此查看写作大师所说的内容通常很有用:

一个句子应该包含没有不必要的单词,一个段落没有不必要的句子,因为一个绘图应该没有不必要的行和机器没有不必要的部分.~Will Strunk,Jr.,The Elements of Style,1918

那么,也许编程语言应该没有不必要的语法元素......


Tim*_*ker 8

有两个原因:有许多不同的方法可以在代码块周围添加大括号(参见缩进样式),读取/解析其他人编写的代码可能非常困难.另一方面,Python代码看起来总是相似,缩进级别为代码结构提供了非常清晰的视觉线索.作为副作用,它会强制您保持代码结构简单,因为深度嵌套会使代码消失在屏幕的右侧:)

至于分号 - 我经常被for(i=0;i<=100;i++);错误所困扰,我很高兴我不会陷入Python的陷阱......


And*_*rey 6

"复合糖导致分号癌症." Alan Perlis


Nor*_*sey 6

有些语言没有使用分号和大括号的原因吗?

一些设计师认为,诸如分号和括号之类的"句法噪音"会使读者分心.有多种方法可以消除它们:

  • Python和Haskell使用了显着的缩进.

  • Clu和Lua使用非常精心设计的语法.

  • 标准ML使用关键字来引入每个构造加上let-bindings,这消除了对大多数分号的需要,同时还提供了一种方便的方式来声明局部变量.

  • Bourne shell使用重要的换行符来消除分号

  • Scheme使用非常规则的语法,其中唯一的句法标记是括号.像Olin Shivers这样的长期计划者声称,几周后,你的大脑会调整,你不再看到括号.

事实上,有如此多的设计,有如此多的变化,这表明许多语言设计者将分号和括号视为语法噪音,如果可能的话就要消除.通过消除语法噪声,设计人员可以使程序更容易阅读和理解.并且许多程序员感觉更有效率,好像信噪比已经提高并且他们更清楚地引导他们的代码.(我不会说他们是对的,我不会说他们错了,但我会说有语言设计决定,这个很容易捍卫.)

那么语言设计师是否有使用分号和括号的原因呢?

许多现代的分号和支撑语言都是明确地设计的,或者在某些情况下不是那么明确地设计,以吸引C程序员.毕竟,如果它有分号和括号,它必须易于学习.对?


Bal*_*arq 5

使用分号和括号等分隔符只是一个品味问题.实际上,编译器可以在没有它们的情况下工作,那么,为什么要在现代编程语言中使用它们呢?正如我所说的,是一个品味的问题,并...一个长期建立的事实上的语法ressembles C.这是很难对抗战斗.

有一个字段,其中大括号和分号是有用的:代码生成.当您生成希望以某种反射行为进行编译/解释的代码时,编写大括号(例如,只有一行,单行)通常比编写编程语言所需的结构(如例如,Python.想想一个带有几个unnested循环的函数.您必须跟踪每行所需的标签数量.


sov*_*yan 5

有什么理由他们应该使用它们吗?