COBOL

/ˈkbɒl/),其名称来自于通用商业语言[2]英语:,又译为面向常规业务型语言/常规商业信息处理语言)的缩写,是最早的高端编程语言、以及是世界上最早实施标准化计算机语言之一。属于编译语言

COBOL
过程序编程, 指令式编程, 面向对象进程设计
设计者Howard Bromberg, Norman Discount, Vernon Reeves, 珍·萨姆梅特, William Selden, Gertrude Tierney
实作者美国数据系统语言协会美国国家标准协会国际标准化组织
1959年1959
当前版本
型态系统强弱类型类型系统
文档扩展名.cbl, .cob, .cpy
主要实作产品
GnuCOBOL, IBM COBOL, Micro Focus Visual COBOL
衍生副语言
ACUCOBOL-GT, COBOL-IT, COBOL/2, DEC COBOL-10, DEC VAX COBOL, DOSVS COBOL, Fujitsu COBOL, Hitachi COBOL2002, HP3000 COBOL/II, IBM COBOL SAA, IBM COBOL/400, IBM COBOL/II, IBM Enterprise COBOL, IBM ILE COBOL, IBM OS/VS COBOL, ICL COBOL, isCOBOL, Micro Focus COBOL, Microsoft COBOL, Realia COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, Tandem (NonStop) COBOL85, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, Unix COBOL X/Open, Visual COBOL, Wang VS COBOL

历史

1959年5月,美国国防部委托葛丽丝·霍普博士领导一个委员会,制定了COBOL语言的标准[3],并于1961年由美国数据系统语言协会公布。正式发布于1960年4月,称为Cobol-60,现在最新的版本是Cobol-2002。COBOL最早是以葛丽丝·霍普开发的FLOW-MATIC语言为范本。值得注意的是,葛丽丝·霍普并不是发明COBOL的六人组成员之一。1959 年,在纽约曼哈顿的雪梨荷兰酒店珍·萨姆梅特和其他5位进程员闭关两周,几乎是无昼夜地开发,完成了 COBOL 的大部分设计。[4]

1963年,美国国家标准学会进行了标准化,但是ANSI标准很少被遵循;因此,COBOL进程只是部分可移植的。

重要性

经过40多年的不断修改、丰富完善和标准化,COBOL已发展为多种版本的庞大语言,在财会工作、统计报表、计划编制、情报检索、人事管理等数据管理及商业数据处理领域,都有着广泛的应用。

COBOL主要是应用于金融和会计行业等非常重要的商业数据处理领域,即使 COBOL 多年来被视为过时的语言,但是目前大多数的金融业内核系统仍多半使用COBOL,除了旧有系统太庞大修改不易外,COBOL 平台的稳定性也是它生命一直超过预期延续的重要原因。

2019新型冠状病毒疫情影响下,美国政府因为需处理大量失业给付,使得COBOL编写的老旧系统频繁出现故障,需要同样上年纪、甚至已退休的老年COBOL进程员来协助维护,所以COBOL的创始团队在网上公开教程和学习资源,让年轻进程员学习COBOL来协助这些进程员维护系统,同时也紧急招募COBOL进程员来协助维护。[5]

特点

COBOL是一种面向数据处理的、面向文档的、面向过程POL)的高级编程语言,是一种功能很强而又极为冗长的语言。

COBOL适合于具有循环处理周期的环境(例如打印工资支票)以及数据操纵量相当大的环境。COBOL主要应用于商业数据处理领域,对各种类型的数据进行收集、存储、发送、分类、排序、计算及打印报表、输出图像是它的强项。

COBOL语法与英文很接近,即使不懂电脑的人也能看懂进程。

强大的文档处理功能,大量的数据通常以文档的形式存储在磁盘上。

仅提供了加、减、乘、除及乘方这五种简单的算术运算,因而不适于进行科学计算

未来的COBOL将支持XMLWeb时代的新技术。

进程结构

COBOL进程由4部(DIVISION)组成:IDENTIFICATION DIVISION.(标识部)、ENVIRONMENT DIVISION.(环境部)、DATA DIVISION.(数据部)、 PROCEDURE DIVISION.(过程部),而每个部又由若干节(SECTION)组成。

IDENTIFICATION DIVISION.

「PROGRAM-ID」(进程识别ID)、「AUTHOR」(作者名)、「DATE-WRITTEN」(编写日期),这些并不直接影响进程的运行,而是进程的注释 信息。进程注释可以采用任何语言书写,COBOL编译器可以接受。

ENVIRONMENT DIVISION.

用于记载进程可以被运行的计算机环境。“ENVIRONMENT DIVISION.”部包括“CONFIGURATION SECTION”环境节和“INPUT-OUTPUT SECTION”输入输出节。

DATA DIVISION.

用于定义和声明进程所要使用的变量及其他数据。进程要使用的全部变量和数据必须在这里定义。“DATA DIVISION.”部主要包含“FILE SECTION.”和“WORKING-STORAGE SECTION.”节。

如果进程要通过参数接收数据,那么使用“LINKAGE SECTION”来声明。

COBOL的数据种类

COBOL进程的数据,主要有以下3种:

  • 变量(Variables)
  • 常量(Literals)
  • 表意常量(FigurativeConstants):使用有特定意思的多个词组合成一个常量的代名词。好处是便于编码人员识别。比如:HIGH-VALUES、LOW-VALUES等可以表达一定意思的名称作为常量代名词。

COBOL变量类型

COBOL的基本变量类型,有以下三种:

  • 数值型(Numeric)
  • 英文本符型(AlphaNumeric)
  • 英文本符串型(Alphabetic)

PROCEDURE DIVISION

用于容纳进程的实际处理代码。需要传入参数时,采用“PROCEDURE DIVISION USING引数名[,参数名...]”的方式。

因为前3个DIVISION都是注释,却又必须,只到第4个DIVISION「PROCEDURE DIVISION」才真正涉及进程代码,这样的繁琐规定使得COBOL被批评为太过冗长。但是,基于这样的4个DIVISION的明确记述等的严格形式,COBOL也被公认是可读性强的语言。另外,COBOL的保留字数量庞大,字数过长的保留字太多是COBOL的特征之一。

Hello world例子代码

Hello world用COBOL写为:

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

现在著名的Hello, World!进程例子,于1978年在《C编程语言》书中最初问世的那个时代,在主机上类似的COBOL进程可以通过JCL来提交,并很有可能使用打孔卡阅读器和80列打孔卡。下面列出的具有空DATA DIVISION的代码,曾使用GNU/Linux和运行MVS 3.8J的System/370 Hercules模拟器测试过。这段写于2015年的JCL,是从Hercules教程和Jay Moseley保管的样例派生而来[6]。为了保持那个时代的COBOL进程,HELLO, WORLD用全部大写字母显示。

//COBUCLG  JOB (001),'COBOL BASE TEST',                                 00010000
//             CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1)                        00020000
//BASETEST EXEC COBUCLG                                                 00030000
//COB.SYSIN DD *                                                        00040000
 00000* VALIDATION OF BASE COBOL INSTALL                                00050000
 01000 IDENTIFICATION DIVISION.                                         00060000
 01100 PROGRAM-ID. 'HELLO'.                                             00070000
 02000 ENVIRONMENT DIVISION.                                            00080000
 02100 CONFIGURATION SECTION.                                           00090000
 02110 SOURCE-COMPUTER.  GNULINUX.                                      00100000
 02120 OBJECT-COMPUTER.  HERCULES.                                      00110000
 02200 SPECIAL-NAMES.                                                   00120000
 02210     CONSOLE IS CONSL.                                            00130000
 03000 DATA DIVISION.                                                   00140000
 04000 PROCEDURE DIVISION.                                              00150000
 04100 00-MAIN.                                                         00160000
 04110     DISPLAY 'HELLO, WORLD' UPON CONSL.                           00170000
 04900     STOP RUN.                                                    00180000
//LKED.SYSLIB DD DSNAME=SYS1.COBLIB,DISP=SHR                            00190000
//            DD DSNAME=SYS1.LINKLIB,DISP=SHR                           00200000
//GO.SYSPRINT DD SYSOUT=A                                               00210000
//                                                                      00220000

在提交了这段JCL之后,MVS控制台显示:

    19.52.48 JOB    3  $HASP100 COBUCLG  ON READER1     COBOL BASE TEST
    19.52.48 JOB    3  IEF677I WARNING MESSAGE(S) FOR JOB COBUCLG  ISSUED
    19.52.48 JOB    3  $HASP373 COBUCLG  STARTED - INIT 1 - CLASS A - SYS BSP1
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSLIB   DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEFACTRT - Stepname  Procstep  Program   Retcode
    19.52.48 JOB    3  COBUCLG    BASETEST  COB       IKFCBL00  RC= 0000
    19.52.48 JOB    3  COBUCLG    BASETEST  LKED      IEWL      RC= 0000
    19.52.48 JOB    3  +HELLO, WORLD
    19.52.48 JOB    3  COBUCLG    BASETEST  GO        PGM=*.DD  RC= 0000
    19.52.48 JOB    3  $HASP395 COBUCLG  ENDED

为了效果对上述列出的第10行加以高亮,这个高亮不是实际的控制台输出。

有关的编译器列表生成了超过四页的技术细节和作业运行信息,针对这14行COBOL的单一一行输出。

参考文献

  1. http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=51416.
  2. . [2017-06-08]. (原始内容存档于2017-08-05).
  3. . IEEE Annals of the History of Computing. 1985, 7 (4): 316–325. S2CID 35625728. doi:10.1109/MAHC.1985.10047.
  4. . [2017-06-08]. (原始内容存档于2017-06-21).
  5. . iThome. [2020-04-15]. (原始内容存档于2020-04-17) (中文(繁体)).
  6. Moseley, Jay. . 17 January 2015 [19 July 2015]. (原始内容存档于2015-07-22).

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.