编程语言中分号“;”的简明历史

简介:   花下猫语:在准备“Python为什么”系列的下一个话题的时候,我偶然查到这篇文章,介绍了分号“;”在编程语言中的历史。分号在 Python 中也有使用,但很少见,是为什么呢?下一篇原创文章将会回答这个问题,而今天的分享,是一个知识铺垫。Enjoy!  在本文中,我将简要介绍在计算机编程语言中使用分号(许多计算机科学入门学生的祸根)的历史。我们将看到分号有两种用途:作为语句分隔符和作为语句终止符,并且我们将了解在过去60多年的编程语言历史中分号的使用发生了怎样的变化。

  花下猫语:在准备“Python为什么”系列的下一个话题的时候,我偶然查到这篇文章,介绍了分号“;”在编程语言中的历史。分号在 Python 中也有使用,但很少见,是为什么呢?下一篇原创文章将会回答这个问题,而今天的分享,是一个知识铺垫。Enjoy!

  在本文中,我将简要介绍在计算机编程语言中使用分号(许多计算机科学入门学生的祸根)的历史。我们将看到分号有两种用途:作为语句分隔符和作为语句终止符,并且我们将了解在过去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 ;

  显然,即使我们根本不应该使用分号,也没有就如何最好地使用分号达成共识。我的猜测是,随着编译器和解释器技术的改进,对语句结束符(如分号)这样的语法糖的需求将会减少——尽管分号作为语句分隔符的效果很好。

目录
相关文章
|
机器人 开发工具 Web App开发
干货满满!解密阿里云RPA (机器人流程自动化)的产品架构和商业化发展
阿里云RPA,作为阿里云自研8年的技术,在资本的热捧下,逐渐从幕后来到台前,成为企业服务市场的黑马。本文将从产品上全面剖析,阿里云RPA这款产品的现阶段情况,同时简单谈谈阿里云RPA的商业化进展。
7917 0
干货满满!解密阿里云RPA (机器人流程自动化)的产品架构和商业化发展
|
2月前
|
Ubuntu Linux 数据安全/隐私保护
Ubuntu 安装教程(U 盘安装 Ubuntu 详细教程)
完成上述步骤后,Ubuntu将开始安装在你的电脑上。安装完成后,重启电脑,并按提示移除U盘。电脑将自动从硬盘启动进入新装的Ubuntu系统。现在你可以开始探索Ubuntu带来的全新体验了!
|
7月前
|
人工智能 并行计算 语音技术
Open-LLM-VTuber:宅男福音!开源AI老婆离线版上线,实时语音+Live2D互动还会脸红心跳
Open-LLM-VTuber 是一个开源的跨平台语音交互 AI 伴侣项目,支持实时语音对话、视觉感知和生动的 Live2D 动态形象,完全离线运行,保护用户隐私。
592 10
Open-LLM-VTuber:宅男福音!开源AI老婆离线版上线,实时语音+Live2D互动还会脸红心跳
|
11月前
|
机器学习/深度学习 人工智能 芯片
【AI系统】谷歌 TPU v4 与光路交换
TPU v4 是谷歌在 TPU v3 发布四年后推出的最新一代 AI 加速器,采用了 7nm 工艺,MXU 数量翻倍,内存容量和带宽显著提升。TPU v4 引入了 Sparse Core 以优化稀疏计算,首次采用了 3D Torus 互联方式,通过 Palomar 光路开关芯片减少系统延迟和功耗。TPU v4 Pod 实现了 1.126 Exaflops 的 BF16 峰值算力,展现了谷歌在大规模并行计算领域的突破。然而,TPU v4 也面临着系统成熟度低、拓扑僵硬和负载均衡问题等挑战。
537 0
|
存储 监控 安全
端口安全:交换机上的网络守护者
【8月更文挑战第27天】
323 1
|
数据采集 XML 数据可视化
如何用Beautiful Soup解析HTML内容
如何用Beautiful Soup解析HTML内容
206 1
【python】计算偏度和峰度
使用python代码计算数据的偏度和峰度
【python】计算偏度和峰度
|
SQL 存储 大数据
关于数据仓库的Hive的Hive架构的MetaStore元数据服务
随着大数据技术的不断发展,数据仓库成为了企业中不可或缺的一部分。而Hive作为一种开源的数据仓库系统,因其易于使用和高效处理等特点,成为了许多企业的首选。然而,对于普通用户来说,直接使用Hive的命令行工具进行操作并不方便。因此,开发者社区中涌现出了大量的Hive GUI工具,其中最为流行的就是Web GUI工具。
483 2
|
Java 关系型数据库 MySQL
10. 成功解决:io.netty.channel.ChannelPipelineException: ***Handler is not a @Sharable handler, so can&#39;t be added or removed multiple times.
使用 SpringBoot 集成 Netty 时,报如下错误:io.netty.channel.ChannelPipelineException: ***Handler is not a @Sharable handler, so can&#39;t be added or removed multiple times.
925 0