编程中花括号的简史( 二 )


转到BCPL块结构语言的语法的下一个变化是1967年由剑桥大学的马丁·理查兹(Martin Richards)开发的BCPL语言 。 在1960年至1967年Algol最初开发期间 , 编译器和系统开发人员一直在寻找使用机器语言和汇编语言以外的语言开发系统应用程序(如操作系统)的方法 。 我之所以强调BCPL , 是因为C是通过Ken Thompson开发的一种名为B的中间语言 , 作为BCPL的完善和改进而开发的 。
Richards将BCPL开发为一种系统开发语言 , 它与汇编语言一样高效 , 但具有更高级别的语法 , 从而使编码更简单、更高效 。 这意味着高级语言(如Algol)的许多特性需要以更有效的方式包含在BCPL等语言中 。
【编程中花括号的简史】实现这一效率的方法之一是将一个代码块的指定从单词(begin 和 end)简化为符号 。 对于复合语句和代码块 , Richards选择了符号 $( 代表开头和 )$ 代表结尾 , 这些符号称为节括号 。
在BCPL中 , 如果 $( 和 )$ 与一个结构体一起使用 , 比如 if 语句或循环 , 那么它们就是在限定一个复合语句 , 如果 $( 包括一些声明 , 那么它们就是在给一个块划定界限 。
例如 , 下面是BCPL中带有复合语句的 if 语句的写法:
IF A < B$( LET T = AA := B; B := T$)这是BCPL块的示例:
GET "LIBHDR"LET START() BE$( LET A, B, C, SUM = 1, 2, 3, 0SUM := A + B + CWRITES("Sum is ")WRITEN(SUM)$)在这里 , 开始部分方括号是开始一个块 , 因为声明紧跟着方括号 。
$( 和 $) 在C中成为 { 和 }大约在1968年或1969年 , 贝尔实验室的肯-汤普森和丹尼斯-里奇开始尝试使用系统编程语言开发操作系统 。 汤普森其实一开始就尝试使用Fortran进行探索 , 但当他意识到这不可能时 , 很快就放弃了 。 他决定要对BCPL进行修改 , 使其成为一种更符合自己喜好的系统编程语言 , 于是开发了B 。
B虽然更接近汤普森和里奇想要的系统开发语言 , 但仍然不能完全满足他们的需求 , 所以里奇开始为新的B开发另一种语言NB 。 NB的生命力并不长 , 最终被一种全新的语言所取代 , 他们自然而然地称之为C 。 如果你对C语言是如何从BCPL、B和NB发展而来的感兴趣 , 我鼓励你阅读丹尼斯-里奇的《C语言的历史》 。
编程中花括号的简史文章插图
汤普森在B中固定并延续到NB然后在C中固定的许多事物之一就是缩写运算符 , 这些都是为了让扩展后的语言适应当时计算机的内存限制所必需的 。 例如 , 汤普森创造了复合赋值运算符( += 为例)以及增量(++)和减量(-)运算符 , 作为提高语言效率的方法 。 此举是为了提高效率 , 导致BCPL的其他运算符被简化——例如 , $( 和 $) 被 { 和 } 取代 。
我们今天的情况在许多编程语言中 , 花括号已经被用作块的主要符号 , 特别是那些最接近C风格的语言 , 包括c++、Java、c#和JavaScript 。
更有趣的是 , 新的语言已经采用了大括号的使用 , 包括Go和Rust 。 事实上 , Go要求对每个条件或循环构造都使用花括号 , 这是遵循编程专家的观点 , 即即使语言不需要花括号 , 程序员也应该对每个可以使用花括号的构造使用花括号 。
感谢您阅读本文 , 请给我发送电子邮件以提出评论和建议 。
最近整理了一份优质视频教程资源 , 想要的可以关注我然后私信“666”即可免费领取哦!如果文章对你有所启发和帮助 , 可以点个关注、收藏、转发 , 也可以留言讨论 , 这是对作者的最大鼓励 。