在本文中,我将简要介绍在计算机编程语言中应用分号(许多计算机科学入门学生的祸根)的历史。咱们将看到分号有两种用处:作为语句分隔符和作为语句终止符,并且咱们将理解在过来 60 多年的编程语言历史中分号的应用产生了怎么的变动。
为什么编程语言应用分号
分号在编程语言中用于两件事:语句分隔符和语句终止符。当一种语言应用分号作为语句分隔符时,这容许您在同一行上编写多个语句,并应用分号来标记语句的分隔,以便编译器或解释器能够找出一个语句在哪里完结而另一条语句在哪里开始。
在以分号为分隔符的语言中,分号被视为可选的,当一行代码仅蕴含一条语句时,通常不会编写分号。
作为语句结束符的分号是不可选的,用于明确地标记语句的完结,应用分号作为终止符的编程语言将在分号不在其预期地位时标记谬误。许多编程专家宣称,以分号结尾的语句能够使程序更快,因为编译器能够更无效地执行,只管我在本文开端会对此主张提出异议。
晚期的高级语言和分号的应用
当 Fortran 在 20 世纪 50 年代中期被作为一种高级编程语言引入时,编程语言的史前时代就完结了,Fortran 既不应用分号作为语句分隔符,也不应用分号作为语句终止符,Fortran 中的语句每行只能写一个,而新行是语句终止符。
在古代编程语言中首次应用分号是 ALGOL 58,然而,这个版本并没有失去很好的实现,它很快就变成了 ALGOL 60。这个晚期版本的 ALGOL 应用分号作为分隔符,只管分号常常被多余地用作语句结束符(只管这不是必须的)。分号的这种混合应用可能会导致十分凌乱的程序,分号通常放在某些行的开端,而不是其余的行开端,如我从 Steve Maurer 的网站上借来的 ALGOL 60 代码片段所示:
COMMENT advance to the next un-crossed out number. ;
COMMENT this number must be a prime ;
FOR i := i WHILE i<1000 AND candidates[i] = 0 DO
BEGIN
i := i+1;
END;
COMMENT insure against running off end of the data structure ;
IF i<1000 THEN
BEGIN
COMMENT cross out all multiples, starting with 2*p.;
j := 2;
k := j*i;
FOR k := k WHILE k < 1000 DO
BEGIN
candidates[k] := 0;
j := j + 1;
k := j*i;
END;
COMMENT advance to the next candidate ;
i := i+1;
END
END;
Algol 60 衍生出了 Algol 的其余版本……始终到 Algol 68。许多语言都是基于 Algol 的,但对当今语言影响最大的版本是 Basic 组合式编程语言(BCPL)。
BCPL 是一种编程语言,由剑桥大学的 Martin Richards 于 1967 年开发,BCPL 的设计采纳了许多起初影响 C 语言倒退的概念,稍后咱们将看到。BCPL 还应用分号作为语句分隔符,许多编写 BCPL 的程序员也应用分号来批示行的结尾,只管像 Algol 一样,这种用法是多余的,行尾字符是 BCPL 中真正的语句分隔符。
影响分号以后应用的另一种语言是 IBM 的编程语言 PL/I。PL/ I 是在 20 世纪 60 年代中期开发的,并且是过后的 c ++ 语言——因为该语言的设计者试图蕴含所有其余风行编程语言的所有个性,这样该语言就能够取代 Fortran 用于科学计算,而 COBOL 用于商业计算。
PL/ I 应用分号作为语句终止符,并且此设计决策对其余语言实现者(如 C 的开发者 Ken Thompson 和 Dennis Ritchie)有影响。
B,NB,C 和分号
大概在 1968 年左右,当贝尔实验室逐步退出 Multics 我的项目时,Ken Thompson 开始开发一种基于 BCPL 的新语言,他称之为 B 语言。您能够在 Dennis Ritchie 的无关 C 语言历史的文章中理解无关 B 的开发的更多信息。
汤普森(Thompson)将 B 设计为一种零碎编程语言,用于开发过后处于萌芽状态的 Unix 操作系统。汤普森(Thompson)在 B 编程语言的设计中对 BCPL 进行了许多更改,他所做的更改之一是使分号成为语句终止符是强制性的。正如我后面提到的,在 BCPL 中,分号作为语句结束符是可选的,但这只是因为编译器应用了聪慧的规定来容许不应用分号。汤普森心愿 B 是一种更高效的语言,因而须要应用分号作为语句结束符。
当汤普森和里奇试图用 B 构建 Unix 时,他们意识到甚至汤普森的新语言也不适宜作为零碎编程语言,因而里奇开发了一种新的 B 版本,称为 NB,以解决其中的一些问题。NB 作为一种语言并没有继续很长时间,因为两个人决定只须要废除 B 就能够了。
明天的分号状态
正如咱们所知,分号曾经成为许多语言 (C、C++、Java、C# 和 JavaScript) 中抉择的语句结束符,这里只提到一些最风行的语言。JavaScript 是一个乏味的示例,因为最新版本的 JavaScript 容许您在大多数以换行符结尾的语句的开端省略分号。
并非所有的编程语言都应用分号作为语句终止符。Python 与 Visual Basic 和 Visual Basic.NET 一样,将换行符用作语句终止符。Ruby 是另一种不应用分号的风行语言。
另一种较新的语言 Go 也不应用分号作为语句结束符——只管它的确应用它作为语句分隔符。另一方面,另一种新的零碎编程语言 Rust 应用分号作为语句结束符。
要查看哪些语言应用哪种字符或哪些字符作为语句终止符和语句分隔符,请转到此处。
; // Terminator ;
显然,即便咱们基本不应该应用分号,也没有就如何最好地应用分号达成共识。我的猜想是,随着编译器和解释器技术的改良,对语句结束符 (如分号) 这样的语法糖的需要将会缩小——只管分号作为语句分隔符的成果很好。
以上就是本次分享的所有内容,想要理解更多 python 常识欢送返回公众号:Python 编程学习圈,发送“J”即可收费获取,每日干货分享