1. 简单百科
  2. COBOL

COBOL

COBOL(中文名:通用商业语言),是英文Common Business-Oriented Language的缩写,原意是面向商业的通用语言,COBOL是一种面向过程的高级程序设计语言,主要用于数据处理,是国际上应用最广泛的一种高级语言,由数据系统语言会议(CODASYL)推出。

1959年12月,数据系统语言会议提出初稿,1960年4月,正式公布第一个COBOL文本,称为COBOL-60。经过进一步扩充和完善,又出现了COBOL-61和扩展COBOL-61。1965年,出现COBOL-65。1972年,国际标准化组织 (ISO)把ISO COBOL-72推荐为国际标准,并被美国、英国法国日本苏联等21个会员国所承认。1978年,ANSI COBOLX3.23-1974被国际标准化组织推荐为国际标准文本。2002年,COBOL 2002版本推出,通过引入面向对象特性和其他先进的编程范式,使COBOL应用程序与现代软件开发实践更加兼容。COBOL采用300多个英语单词作为保留字,以一种接近于英语书面语言的形式来描述数据特性和数据处理过程,因而便于理解和学习。COBOL是专门为企业管理而设计的高级语言,可用于统计报表、财务、会计、计划编制、作业调度、情报检索和人事管理等方面。

COBOL程序具有层次结构,包含部(divisions)、节(sections)、段(paragraphs)、语句(sentences)、动词(verbs)和字符串(character strings)。COBOL系统的分部特性(由四个部组成)使得COBOL程序内能够实现关注点的清晰分离。

发展历史

1956年在美国富兰克林学会召开的高级语言学术讨论会上提出FLOWMATIC语言,并在UNIVAC Ⅰ型计算机上实现。这是第一个面向数据处理的语言,它为COBOL的诞生创造了良好的条件。

1959年5月,美国国防部召开专门会议,讨论建立通用商业语言的要求和可能性,确定了这种语言的基本设计思想和应具有的特点。会后成立数据系统语言委员会(CODASYL),其中有一个短期工作委员会专门负责COBOL的开发。1959年9月,提出初稿,1960年4月,正式公布第一个COBOL文本,称为COBOL-60。经过进一步扩充和完善,又出现了COBOL-61和扩展COBOL-61。

1965年,出现COBOL-65。1968年,被美国国家标准化协会(ANSI)批准为标准文本,即ANSICOBOL X3.23-1968,简称COBOL-68。1972年,国际标准化组织 (ISO)把此文本推荐为国际标准,即ISO COBOL-72,并被美国、英国法国日本苏联等21个会员国所承认。1974年,美国国家标准化协会对COBOL-68作了修改补充,公布了新文本ANSI COBOLX3.23-1974。

1978年,ANSI COBOLX3.23-1974被国际标准化组织推荐为国际标准文本,即ISO COBOL-78。计算机制造商均以ISO COBOL-72或ISO COBOL-78作为设计软件的依据,几乎在所有的大、中、小型计算机上都配有COBOL,微型计算机则采用COBOL的一个子集。中国引进COBOL后还增加了汉字处理功能。

2002年,COBOL 2002版本推出,通过引入面向对象特性和其他先进的编程范式,使COBOL应用程序与现代软件开发实践更加兼容。

主要特点

数据处理专长

COBOL专为数据密集型领域设计,其典型应用场景涵盖企业资源管理(ERP)、供应链系统、财务报表生成及商业智能分析等领域。该语言针对数据处理特性进行了深度优化:

这种设计哲学使COBOL在需要处理海量事务数据(如每日百万级银行交易)的商业环境中表现卓越,其运算模块虽包含基础算术功能,但更强调数据流转效率而非计算复杂度。

英语语法友好性

COBOL采用类自然语言的编程范式,其语法设计遵循英语表达习惯:

典型代码示例:

这种设计使非专业程序员(如财务分析师)也能快速理解程序逻辑,符合"代码即文档"的编程理念。

跨平台兼容性

作为ANSI/ISO标准化语言(ISO/IEC 1989),COBOL具备:

这使得企业核心系统(如核心银行系统)可在不同硬件架构间平滑迁移,典型迁移项目周期较其他语言缩短30-50%。

模块化程序结构

COBOL强制实施分层架构设计,程序结构包含:

这种严格的结构化要求虽增加初期开发成本,但带来显著维护优势:

实现效率与局限

COBOL的严谨性导致:

尽管如此,其在关键业务系统的统治地位依然稳固:全球70%的ATM交易、80%的企业核心业务系统仍依赖COBOL运行,每日处理价值数万亿美元的商业交易。这种持久生命力源于其设计初衷与商业计算需求的完美契合,以及在金融、保险等强监管领域的不可替代性。

语言组成

总体结构

COBOL程序具有层次结构,包含部(divisions)、节(sections)、段(paragraphs)、语句(sentences)、动词(verbs)和字符串(character strings)。COBOL系统的分部特性(由四个部组成)使得COBOL程序内能够实现关注点的清晰分离。

主要部分

标识部

标识部是COBOL程序的第一个部,且为必选部。它为程序赋予名称,并提供其他标识信息,如作者、编写日期和程序目的的简要描述。

COBOL程序在标识部中需要一个PROGRAM - ID段才能正常运行。例如:

环境部

环境部指定程序的运行时环境,并定义其将使用的输入和输出资源。它细分为两个节。

不出所料,配置节提供系统配置信息,包括所使用的计算机和编译器特性。然而,由于编译器工具的进步,在现代COBOL系统中,配置节已有些过时,现代系统通常能够推断并自动适应其环境。

输入 - 输出节指定程序可以与之交互的文件和相关设备。它包括FILE - CONTROL段(将程序内的文件名映射到外部文件)和I - O - CONTROL段(通常包含输入 - 输出操作的优化或排序信息)。

数据部

数据部包含程序的所有变量、文件和常量定义。与环境部一样,数据部也进行细分。

文件节列出程序将从中读取或写入其中的每个文件。文件描述条目定义每个文件,并描述文件中记录的结构。

工作存储节定义在程序运行期间保持其值的变量,包括计数器、累加器、常量以及与I - O文件无关的任何其他数据存储。

在COBOL的后续版本中引入的本地存储节定义在程序或方法部署时分配、在终止时释放的变量,这使得本地存储对于递归算法和可重入程序特别有用。

最后,连接节定义从一个程序传递到另一个程序的数据项。

过程部

过程部包含程序的可执行代码,该代码被划分为段和节,将代码组织成代码块,以提高可读性和便于维护。

其他组件

COBOL系统的每个部都可以包含节和段,它们类似于人类语言中的节和段。节是每个部中具有名称的逻辑细分,包含一个或多个段;它们作为可在程序中调用或调用的模块化代码单元。

段是语句(COBOL程序中最小的可执行单元)的集合,这些语句具有特定功能,并通过唯一名称进行标识。段中的每个COBOL语句都以一个COBOL动词(如MOVE、DISPLAY和ADD)开头,该动词指示代码的运行方式。

COBOL最基本且不可分割的单位是字符。字符串是字符或连续字符序列,它们形成COBOL单词、字面量或注释项,由分隔符分隔。

语言语法

COBOL类似英语的语法具有自文档化和近乎自解释的特点,强调冗长和可读性。这一特性使其区别于像Fortran这样更简洁的语言。它还可以支持几种不同的数据类型(例如,数字、字母数字和编辑数据),但执行程序需要依赖一些额外的语法组件。

语句和声明

语句是COBOL代码行,由一个或多个以句号结尾的声明组成。声明是个别指令,通过使用动词(如ADD、START、DISPLAY和WRITE等)来协调文件处理和数据处理过程。

例如,MOVE声明将数据从系统内存的一部分传输到另一部分;COMPUTE声明执行算术运算并将结果存储为变量;READ声明从输入文件中检索记录。

从句

从句是声明的组件,可以修改或限定声明的执行方式。例如,像“PIC 9(3)”这样的图片从句定义一个可以容纳最多三位数字的数值变量。

控制结构

COBOL中的迭代和条件控制结构使系统能够控制数据流。

例如,IF ... ELSE结构在COBOL中实现条件逻辑,以便程序可以根据系统条件的评估执行不同的代码块。PERFORM语句执行指定次数的段或节,或者直到满足某个条件为止,类似于其他编程语言中的循环。

子程序

COBOL可以通过使用子程序来促进模块化编程,子程序可以从主程序或其他子程序中调用。内部子程序在与调用程序相同的源代码中定义(写在过程部中),而外部子程序则单独编译并根据需要链接。

构建流程

构建COBOL程序的过程因组织情况而异,但通常涉及几个关键步骤。

编写程序

例如,如果一名软件工程师想要编写基本的“Hello, world!”程序,他们会编写如下代码:

使用与COBOL兼容的集成开发环境(IDE)或文本编辑器可以帮助完成此过程。

编译程序

与其他高级编程语言一样,COBOL代码在执行之前必须进行编译。COBOL编译器(如GnuCOBOL、Micro Focus和IBM® COBOL编译器系列)将程序转换为机器代码,以便计算机的CPU能够理解和执行它。

执行程序

程序编译完成后,程序员可以在目标系统上执行它。假设没有错误,程序将遵循过程部中定义的数据处理逻辑来处理数据。执行过程通常包括从文件和数据库中读取数据、执行数据计算或转换,然后将结果写入文件或数据库。

调试程序

如果程序中存在任何错误或漏洞,程序员需要识别并修复它们(这一过程称为调试)。依靠调试工具和技术可以简化这一过程。

语言优势

COBOL曾经是商业应用计算机编程中使用最广泛的语言。COBOL开发仍然是全球技术基础设施中功能性和关键性的一部分,特别是对于银行机构、保险公司和政府机构而言。COBOL编程可以为选择使用它的组织(尽管相对缺乏COBOL程序员)带来诸多好处,包括:

稳定性

COBOL以其在关键任务应用中的稳定、可靠性能而闻名。用COBOL编写的系统通常具有高可用性且故障很少,这对金融机构和政府服务的持续运营至关重要。

可扩展性

开发人员可以扩展COBOL应用程序以处理不断增加的工作负载,而无需对代码库进行重大更改,这使组织能够随着业务的发展而扩展其基于COBOL的系统,而无需频繁重写或迁移到其他语言。

数据处理和文件处理

COBOL提供了出色的文件处理能力。它可以处理复杂的大规模交易数据,并支持多种文件访问方法,包括顺序、索引和相对数据文件处理。COBOL在流程自动化方面的稳健性使其非常适合批处理作业,如处理金融交易、管理数据库和生成报告。

互操作性

COBOL系统可以与其他语言和技术(如HTML、JSON、XML和生成式AI)互操作,这是由于引入了面向对象的COBOL和与新编程语言的接口。面向对象还促进了COBOL应用程序与虚拟和云服务(如亚马逊network service(AWS)、Microsoft Azure和IBM Cloud®)、SQL数据库和其他现代DevOps基础设施的集成。

语言应用

COBOL支持80%的面对面信用卡交易,处理95%的ATM交易,并为每天产生超过30亿美元交易量的系统提供支持。

相关事件

2023年中旬,IBM推出了Watsonx Code Assistant for Z工具,旨在帮助维护人员将IBM Z大型机上的COBOL程序转换为更流行的Java语言,从而加速“大型机”的退役过程。

2025年3月,IBM对旗下AI编程助手Watsonx Code Assistant for Z进行更新,新增“读代码、写注释”功能,能够通过一系列实时注释帮助维护人员理解大型机所用的COBOL,便于他们维护这些“上古代码”。IBM定于2025年6月全面推出Watsonx Code Assistant for Z工具,并预告用户届时还将能够在本地终端上部署Watsonx Code Assistant for Z环境,无需将COBOL代码现有上传到云端即可将相关语言转换为带有注释的Java代码,便于在一些不便接入网络的场合使用相关特性。

参考资料

什么是 COBOL?.ibm.2025-04-01

2020年9月17日(星期四)最新招聘信息.微信公众号.2025-04-01

可为“上古”COBOL 语言提供注释,IBM 更新 AI 编程助手 Watsonx Code Assistant for Z.IT之家.2025-04-01