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

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设