程序语言中分号的起源和优点

本文译自:The origin and virtues of semicolons in programming languages | nicole@web

在为我的编程语言 Lilac 编写语法时,我正在探索语句终止符的不同选择。 . 很有吸引力,或者 ! 。最终,我可能会做出 "无聊 "的选择,即使用 ; 或大量空白。

但我不禁要问:为什么这么多语言的语句终止符都使用分号?我找到了一些关于为什么要使用语句结束符的好文章,但很少有人讨论分号相对于其他选择的具体优点。

为了弄清分号在编程语言中的起源,我查阅了历史资料。早期的编程语言非常少,因此向前追溯并查看所有早期语言相对容易。这样,我们就能找到第一种将分号作为语句分隔符的语言:ALGOL 58

在 ALGOL 之前,语言通常使用空白来标记语句,每条语句都在自己的行上。ALGOL 引入了语句分隔符,使程序员可以更灵活地将多条语句放在一行,或将一条语句分散到多行。遗憾的是,当我们深入探究为什么要使用分号时,答案并不多!最初的相关论文只是描述了分号是语句分隔符,却没有说明为什么要使用分号。

那我们该怎么办呢?那就是去猜测!

猜测

有几个原因可以解释我们为什么会使用分号,或者它为什么会出现在我们语言中的某个地方。这些都是猜测,但这些猜测是正确的。

可用。早期计算机的字符集非常有限,而分号通常是可用的。一些早期的输入设备是由雷明顿键盘改装而成的,这些设备(根据我能找到的图片)确实包含分号和冒号。这是有道理的,因为如果要输入英文文本,可能偶尔会遇到分号!这不是最常用的标点符号,但很有用。既然它存在,就一定会出现在语言的某个地方,因为我们可选择的字符很少。

方便。在现代键盘上,分号位于主行,不需要换挡,我想这也是分号一直被广泛使用的部分原因。 在主行的位置使其非常容易输入,因此与 ! 这样需要敲两下并伸展一下的分号相比,您只需用右手小指就能输入 ; 。说到这,分号是主要的,而更常用的冒号需要移位,这不是很奇怪吗?

其用法与英语相似。在英语中,分号的作用之一是划分独立分句;这些分句是句子中可以独立存在但又密切相关的部分。这与语句分隔符的作用非常相似。更相似的是 . ,因为每个语句都可以被看作是一个句子,但这也给了我们另一个喜欢用分号的理由。

不太可能发生冲突。如果使用句号,即不起眼的 . ,一不小心就会在解析时遇到困难。正如我的朋友最近对我说的那样,句号是一个价值很高的符号,你必须明智地选择它的用途。在现代语言中,我们用它来访问字段和方法,定义浮点字面量,以及使用范围运算符和展开运算符。相比之下,分号......除了偶尔用于注释的开头,其他地方都没有。

这些都是选择分号作为语句分隔符的令人信服的理由!你能选择什么来代替呢?在所有候选项中, !@#$%^&*,./;:|-_ ,我想不出一个明显更好的选择!如果你能解决解析问题,我个人可能更倾向于 . ;如果你想要一种令人兴奋的语言, ! 可能会非常有趣,但谦逊的 ; 似乎是一个可靠的好决定,而不仅仅是为了连续性。

至于我在我的编程语言Lilac中做什么?我还不完全确定!分号是安全的选择,但其他选择(或根本没有分号)也有美学上的吸引力。我很想听听在你的构想中,你会如何选择!