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.