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

相关文章

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark