发布日期:2024 年 4 月 19 日
撰稿人:Chrystal R. China、Michael Goodwin

什么是 COBOL

面向商业的通用语言 (COBOL) 是一种高级、类似英语的编译型编程语言,专为业务数据处理需求而开发。

COBOL 在设计时就考虑到了要确保最佳的多功能性;它的详细性使程序员能够使用一种可读、易于维护的编程语言,并可以在大型计算机和操作系统上运行。事实上,它是美国国家标准学会 (ANSI) 和国际标准化组织 (ISO) 最早标准化的编程语言之一。

尽管 COBOL 被认为是遗留系统,但许多政府和私营部门组织继续使用它来运行财务、管理和业务应用程序。事实上,COBOL 的命令式、过程式和(在较新的迭代中)面向对象的配置是 40% 以上在线银行系统的基础。1

它还支持 80% 的面对面信用卡交易,处理 95% 的 ATM 交易,并为每天产生超过 30 亿美元商业价值的系统提供支持。1由于其卓越的稳定性和处理能力,它在帮助企业维护现有架构中的应用程序和程序方面继续发挥不可或缺的作用。

COBOL 的历史

COBOL 由一个名为 Conference on Data Systems Languages (CODASYL) 的政府和商业组织联盟开发,该联盟成立于 1959 年。COBOL 部分源自计算机科学先驱 Grace Hopper 博士创建的语言 FLOW-MATIC,也属于美国国防部一项倡议的一部分,该倡议旨在促成一种可以跨操作系统(Linux®、Windows、Unix、z/OS 等)和硬件环境运行的编程语言。

COBOL 编程语言的第一个版本于 1960 年发布。尽管 COBOL 编程最初旨在作为权宜之计,但 DoD 很快意识到它的用处,并要求计算机制造商提供此语言。

COBOL 最终于 1968 年实现标准化,成为一种计算机语言。此后,COBOL 程序员进行了多次修订和现代化改造,包括 COBOL-61、COBOL-68、COBOL-74 和 COBOL-85。最新的迭代 COBOL 2002 试图通过为该语言引入面向对象的功能和其他高级编程范式,从而使 COBOL 应用程序与现代软件开发实践更加兼容。

COBOL 结构

COBOL 程序具有分层结构,包括部、节、段、句子、动词和字符串。COBOL 系统(由四个部组成)的分部性质使得 COBOL 程序中的关注点可以清晰分离。

COBOL 各部如下:

标识部

标识部是 COBOL 程序的第一个部,也是强制性的部。它为程序分配一个名称,并提供其他标识信息,例如作者、编写日期以及程序用途的简要描述。

COBOL 程序需要 PROGRAM-ID 段落才能在标识分区内运行。例如:

```

IDENTIFICATION DIVISION.

PROGRAM-ID. YourProgramName

AUTHOR. Your name

DATE-WRITTEN. YYYYMMDD

COMMENT. “程序的简短描述”

环境部

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

不出所料,配置节提供了有关系统配置的信息,其中包括它正在使用的计算机与编译器功能。然而,由于编译器工具的进步,配置节在现代 COBOL 系统中已略显过时;因为现代 COBOL 系统通常可推断并自动适应其环境。

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

数据部

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

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

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

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

最后,链接部分将定义从一个程序传递到另一个程序的数据项。

流程分区

流程分区包含程序的可执行代码,该代码被划分为段落和部分,这些段落和部分将代码结构化为代码块,以提高可读性,更易于维护。

其他组件

COBOL 系统的每个部分均可包含节和段落,它们类似于人类语言中的小节和段落。节是每个部分内的已命名逻辑细分,其中包含一个或多个段落;它们被用作可在程序中调用的模块化代码单元。

段落是句子的集合,是 COBOL 程序中最小可执行单元,服务于特定功能,并由唯一名称标识。段落中的每个 COBOL 语句或句子都以 COBOL 动词(如 MOVE、DISPLAY 和 ADD)开头,指示代码的运行方式。

COBOL 语言最基本、最不可分割的单位是字符。字符串是形成 COBOL 字、文字或注释条目的字符或连续字符序列,由分隔符分隔。

COBOL 语法

COBOL 类似英语的语法可实现自我记录且几乎可自行说明,同时它还强调详细性和可读性。此功能使其有别于其他更简洁的语言,如 FORTRAN。此外,它还支持多种数据类型(例如,数字、字母数字和编辑数据),但依赖于几个额外的语法组件来执行程序。

句子和语句

句子是由一个或多个以句点结尾的语句组成的 COBOL 代码行。而语句则是协调文件处理和数据处理过程的单独指令(通过使用 ADD、START、DISPLAY 和 WRITE 等动词)。

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

子句

子句是语句的组成部分,可以修改或限定语句的执行方式。例如像 “PIC 9(3)” 这样的图片子句就定义了最多可容纳三位数字的数值变量。

控制结构

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

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

子程序

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

创建 COBOL 程序

使用 COBOL 构建程序的过程因组织情况而异。这往往涉及几个关键步骤。

  • 编写程序。例如,如果一个软件工程师想编写基本的“Hello, world!”程序,他们便会这样编写:

    ```

    IDENTIFICATION DIVISION.PROGRAM-ID. hello-world. PROCEDURE DIVISION. DISPLAY "Hello, world!"

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

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

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

  • 调试程序(如有必要)。如果程序中存在任何错误或缺陷,程序员需要识别并进行修复(这个过程称为调试)。依靠调试工具和技术可以简化这个过程。
COBOL 编程的优点

尽管更多现代语言(如 Python、Java、JavaScript)不断涌现,但 COBOL 语言曾经是商业应用计算机编程中最广泛的语言。即使是现在,COBOL 开发仍然是全球技术基础设施实用且重要的组成部分,特别是对于银行机构、保险公司和政府机构而言。

尽管 COBOL 程序员相对匮乏1,但 COBOL 程序设计仍能为选择使用 COBOL 程序设计的组织带来无数好处,是其雄风犹在的明证:

稳定性

COBOL 以其在任务关键型应用程序中的稳定、可靠的性能而闻名。使用 COBOL 编写的系统往往具有较长的正常运行时间,并且很少出现故障,这对于金融机构和政府服务的不间断运营至关重要。

可扩展性

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

数据处理和文件处理

COBOL 提供卓越的文件处理功能。它可以处理复杂的大规模事务数据,并支持多种文件访问方法,包括顺序、索引和相对数据文件处理。COBOL 在流程自动化方面的稳健性使其成为批处理作业的理想选择,例如处理金融交易、管理数据库和生成报告。

互操作性

由于引入了面向对象的 COBOL 和新编程语言的接口,现在的 COBOL 系统可以与其他语言和技术(如 HTML、JSON、XML 和 生成式 AI2)进行互操作。面向对象还有助于 COBOL 应用程序与虚拟服务和云服务(如 Amazon Web Services (AWS)、Microsoft Azure 和 IBM Cloud)、SQL Database 和其他现代 DevOps 基础架构的集成。

相关解决方案
IBM® watsonx Code Assistant for Z

IBM® watsonx Code Assistant for Z 是一款生成式 AI 辅助产品,旨在以比当今替代品更低的成本和风险加速大型机应用程序现代化。该产品提供了端到端应用程序开发人员生命周期,包括应用程序发现和分析、自动代码重构以及 COBOL 到 Java 的转换。

深入了解 IBM watsonx Code Assistant for Z

IBM watsonx Code Assistant

IBM® watsonx Code Assistant 利用生成式 AI 来加快开发,同时保持信任、安全性、合规性的核心原则。开发人员和 IT 运营商可以加快应用程序现代化工作并实现自动化,以快速扩展 IT 环境。

深入了解 watsonx Code Assistant

IBM COBOL Compiler Family

IBM® COBOL 编译器支持 IBM® z/OSIBM® AIXLinux® 操作系统。您将获得提高程序开发效率和使用现有应用程序的工具。您可以针对当今快速变化的市场对应用程序开发流程进行战略性定位。

深入了解 IBM Cobol Compiler Family
采取后续步骤

准备好在生成式 AI 的支持下加速大型机应用程序现代化了吗?请预约现场演示或与我们的产品专家交谈,了解 watsonx Code Assistant for Z 可为您提供哪些帮助。

深入了解 IBM watsonx Code Assistant for Z 预约实时演示
脚注

1 世界依赖于不再有人了解的 60 年前的代码(链接位于 ibm.com 站外),PC Mag,2023 年 12 月 1 日

2 生成式 AI 在代码生成中的应用(链接位于 ibm.com 站外),Inc42 Media,2024 年 3 月 24 日