BCPL语言 :这可是B语言啊,汤姆森大佬趁老婆回老家用来开发第一个unix操作系统的语言(大佬基于BCPL开发的bon语言,C语言前身)

本文主要是介绍BCPL语言 :这可是B语言啊,汤姆森大佬趁老婆回老家用来开发第一个unix操作系统的语言(大佬基于BCPL开发的bon语言,C语言前身),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BCPL(“基本组合编程语言”)是一种过程式、命令式和结构化的编程语言。BCPL最初旨在为其他语言编写编译器,现在已不再常用。然而,它的影响仍然存在,因为BCPL的一个剥离和语法改变的版本,称为B,是C编程语言的基础。BCPL引入了许多现代编程语言的几个特性,包括使用花括号来分隔代码块。[3]BCPL最早是由剑桥大学的Martin Richards在1967年实现的。[1]

BCPL被设计成可以为它编写小而简单的编译器;据说有些编译器可以在16kb内运行。此外,最初的编译器本身是用BCPL编写的,很容易移植。因此,BCPL是引导系统的一种流行选择。编译器可移植性的一个主要原因在于它的结构。它被分成两部分:前端解析源代码并生成O-code(一种中间语言)。后端接收o码并将其转换为目标机器的机器码。只有1 / 5的编译器代码需要重写以支持新机器,这项任务通常需要2到5个人月。这种方法后来成为常见的实践(例如Pascal、Java)。

这种语言的不同之处在于它只有一种数据类型:一个字,一个固定的位数,通常被选择来与体系结构的机器字对齐,并且有足够的容量来表示任何有效的存储地址。对于当时的许多机器来说,这种数据类型是一个16位字。当BCPL用于最小可寻址项不是字而是字节的机器上,或者用于字长较大的机器(如32位或64位)时,这种选择后来被证明是一个严重的问题。[引文需要]

任何值的解释都是由用于处理这些值的运算符决定的。(例如,+将两个值相加,将它们视为整数;! 间接通过值,有效地将其视为指针。)为了使其工作,实现没有提供类型检查。

BCPL的字定向和面向字节的硬件之间的不匹配可以通过几种方式解决。一个是通过提供标准库例程来将字打包和解包为字节串。后来,添加了两个语言特性:位域选择操作符和中缀字节间接操作符(用%表示)。[引文需要]

BCPL以一种独特的方式处理跨越不同编译单元的绑定。没有用户可声明的全局变量;相反,有一个全局向量,类似于Fortran中的“空白公共”。不同编译单元之间共享的所有数据包括标量和指向存储在全局向量中预先安排位置的向量的指针。因此,头文件(在编译过程中使用“GET”指令包含的文件)成为在编译单元之间同步全局数据的主要手段,其中包含“global”指令,该指令表示符号名称列表,每个符号名称都与一个数字配对,该数字将名称与全局向量中相应的数字寻址单词相关联。除了变量之外,全局向量还包含外部过程的绑定。这使得编译单元的动态加载非常容易实现。BCPL没有依赖底层实现的链接加载器,而是有效地让程序员控制链接过程。[引文需要]

全局向量还使替换或增加标准库例程变得非常简单。程序可以保存指向原始例程的全局向量指针,并将其替换为指向替代版本的指针。替代方案可能会调用原始程序作为其处理的一部分。这可以用作快速的特别调试辅助工具。[引文需要]

BCPL是第一个大括号编程语言,大括号在语法变化中幸存下来,并已成为一种常用的方法

BCPL最早是由剑桥大学的Martin Richards在1967年实现的。[1]BCPL是对其前身剑桥编程语言(后来更名为组合编程语言(CPL))的困难的回应,该语言是在20世纪60年代初设计的。Richards通过“去除整个语言中那些使编译变得困难的特性”创建了BCPL。1967年春天,理查兹在麻省理工学院访问MAC项目时,为兼容分时系统下的IBM 7094编写了第一个编译器实现。这种语言最初是在1969年春季联合计算机会议上发表的一篇论文中描述的。[引文需要]

据传,BCPL最初代表“Bootstrap Cambridge Programming Language”,但自从BCPL的开发停止以来,CPL从未被创建过,这个缩写后来被重新解释为BCPL书。[需要澄清][需要引证]

BCPL是最初“Hello, World!”程序编写的语言。[5]第一个MUD也是用BCPL编写的(MUD1)。

有几个操作系统是部分或全部用BCPL编写的(例如,TRIPOS和AmigaDOS的早期版本)。BCPL也是施乐帕洛阿尔托研究中心(Xerox PARC Alto)项目——第一台现代个人电脑——使用的最初语言;在其他项目中,Bravo文档准备系统是用BCPL编写的。

一个早期的编译器,在1969年启动,从Richards的Atlas 2编译器的o码纸带开始,目标是ICT 1900系列。这两台机器具有不同的字长(48位对24位)、不同的字符编码和不同的打包字符串表示,并且成功的引导增加了对该方法实用性的信心。

到1970年末,Honeywell 635和Honeywell 645、IBM 360、PDP-10、TX-2、CDC 6400、UNIVAC 1108、PDP-9、KDF 9和Atlas 2的实现已经存在。1974年,在BBN上实现了一种不使用中间o码的BCPL方言。最初的实现是一个托管在BBN的TENEX pdp -10上的交叉编译器,直接针对BBN在ARPANET中使用的第二代imp实现中使用的pdp -11。

在20世纪80年代中期,还有一个版本是由理查兹计算机产品公司为BBC Micro生产的,这家公司是由马丁理查兹的兄弟约翰理查兹创办的。[6]BBC的《末日审判》节目就使用了这种语言。为Amstrad CPC和Amstrad PCW计算机的BCPL版本也在1986年由英国软件公司阿诺有限公司发布。MacBCPL是1985年由英国肯辛顿的Topexpress Ltd为苹果麦金塔电脑发布的。

BCPL的设计和理念都强烈地影响了B,而B又反过来影响了c。[7]当时的程序员争论的是,C的最终继承者应该被称为“D”,即字母表中的下一个字母,还是“P”,即母语言名称中的下一个字母。最被接受为C语言继承者的语言是c++ (c++是C的自增运算符)[8],尽管同时也存在一种D编程语言。

1979年,至少有25种体系结构存在BCPL的实现;随着C语言在非unix系统上的流行,这种语言逐渐失宠。

马丁·理查兹在他的网站上维护着一个现代版本的BCPL,最近一次更新是在2018年。它可以在各种系统上运行,包括Linux、FreeBSD和Mac OS x。最新的发行版包括图形和声音库,并且有一个全面的手册。他继续用它编程,包括他对音乐自动乐谱跟踪的研究。

BCPL常见的非正式MIME类型是text/x-bcpl。

这篇关于BCPL语言 :这可是B语言啊,汤姆森大佬趁老婆回老家用来开发第一个unix操作系统的语言(大佬基于BCPL开发的bon语言,C语言前身)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/607733

相关文章

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要