COBOL

维基百科,自由的百科全书
(差异) ←上一修订 | 最后版本 (差异) | 下一修订→ (差异)
跳转到导航 跳转到搜索
COBOL
File:COBOL Report Apr60.djvu
COBOL 60报告(1960年4月)
编程范型过程式, 指令式, 面向对象
设计者Howard Bromberg,
Norman Discount,
Vernon Reeves,
Lua错误:attempt to index field 'wikibase' (a nil value)。,
William Selden,
Gertrude Tierney
实现者Lua错误:attempt to index field 'wikibase' (a nil value)。美国国家标准协会国际标准化组织
发行时间1959年,​67年前​(1959
当前版本
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    类型系统弱类型静态
    文件扩展名.cbl, .cob, .cpy
    网站{{URL|example.com|可选的显示文本}}Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    主要实现产品
    GnuCOBOL, IBM COBOL英语IBM COBOL, Micro Focus Visual COBOL
    派生副语言
    COBOL/2, DEC COBOL-10, DEC PDP-11 COBOL, DEC PDP-11 COBOL-85, DEC VAX COBOL, DOSVS COBOL, Envyr ICOBOL, 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 (VME), Micro Focus ACUCOBOL-GT, Micro Focus COBOL-IT, Micro Focus RM/COBOL, Micro Focus Visual COBOL, Microsoft COBOL, Raincode COBOL, Realia COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, Tandem (NonStop) COBOL, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, X/Open COBOL[1], Veryant isCOBOL, Wang VS COBOL, WATBOL英语WATBOL
    受影响于
    起初:AIMACO英语AIMACOCOMTRAN英语COMTRANFACT英语FACT computer languageFLOW-MATIC
    COBOL 2002[a]C++EiffelSmalltalk
    影响语言
    CobolScript英语CobolScript[5]EGL英语EGL (programming language)[6]PL/I[7]PL/B英语Programming Language for Business[8]

    COBOL/ˈkbɒl/),其名称来自于英语Common Business Oriented Language的缩写,可译为通用商业语言面向常规业务型语言/常规商业信息处理语言[9],它属于编译语言,是最早的高级编程语言之一,也是最早实施标准化计算机语言之一。COBOL主要应用于商业数据处理领域,此间大量的数据通常以文件的形式存储在磁盘上,它提供强大的文件处理功能,对各种类型的数据进行收集、存储、发送、分类、排序、计算及打印报表、输出图像。

    历史[编辑]

    1959年5月,美国国防部委托葛丽丝·霍普博士领导一个委员会,制定了COBOL语言的标准[10]Lua错误:attempt to index field 'wikibase' (a nil value)。和其他5位程序员,在纽约曼哈顿的Lua错误:attempt to index field 'wikibase' (a nil value)。封闭两周,开发完成了COBOL的大部分设计[11]。COBOL最早是以葛丽丝·霍普开发的FLOW-MATIC语言为范本。

    COBOL于1961年由Lua错误:attempt to index field 'wikibase' (a nil value)。公布。正式发布于1960年4月,称为COBOL-60,现在最新的版本是COBOL-2023。1963年,美国国家标准学会进行了标准化,但是ANSI标准很少被遵循,故而COBOL程序只是部分可移植的。

    遗留[编辑]

    经过多年来的不断修改、丰富完善和标准化,COBOL已发展为多种版本的庞大语言。COBOL在财会工作、统计报表、计划编制、情报检索、人事管理等数据管理及商业数据处理领域,都曾有着广泛的应用。COBOL多年来被视为过时的语言,但是目前仍有使用COBOL的金融业核心系统在运行中,除了旧有系统太庞大修改不易外,COBOL平台的稳定性也是它生命一直超过预期延续的重要原因。

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

    特点[编辑]

    COBOL是一种面向数据处理的、面向文件的、面向过程POL)的高级编程语言,是一种功能很强而又极为冗长的语言。COBOL语法与英文很接近,即使是不懂编程的人也能看懂代码。仅提供了加、减、乘、除及乘方这五种简单的算术运算,因而不适于进行科学计算。COBOL适合于具有循环处理周期的环境(例如打印工资支票)以及数据操纵量相当大的环境。

    程序结构[编辑]

    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英语Job Control Language来提交,并很有可能使用打孔卡阅读器和80列打孔卡。下面列出的具有空DATA DIVISION的代码,曾使用GNU/Linux和运行MVS英语MVS 3.8J的System/370英语IBM System/370 Hercules模拟器测试过。这段写于2015年的JCL,是从Hercules教程和Jay Moseley保管的样例派生而来[13]。为了保持那个时代的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. ^ Specifically influenced COBOL 2002's object-oriented features.[2][3] [4]

    参考文献[编辑]

    1. ^ Technical Standard, COBOL Language (PDF). X/Open Company Ltd., U.K. December 1991 [2024-10-19]. ISBN 1-872630-09-X. (原始内容存档 (PDF)于2024-12-19). 
    2. ^ Saade, Henry; Wallace, Ann. COBOL '97: A Status Report. Dr. Dobb's Journal. October 1995 [21 April 2014]. (原始内容存档于22 April 2014). 
    3. ^ Arranga, Edmund C.; Coyle, Frank P. Object-Oriented COBOL. Cambridge University Press. February 1998: 15. ISBN 978-0132611404. Object-Oriented COBOL's style reflects the influence of Smalltalk and C++. 
    4. ^ Arranga, Edmund C.; Coyle, Frank P. Cobol: Perception and Reality. Computer. March 1997, 30 (3): 127. ISSN 0018-9162. doi:10.1109/2.573683. 
    5. ^ Imajo, Tetsuji; et al. COBOL Script: a business-oriented scripting language. Enterprise Distributed Object Computing Conference. Makuhari, Japan: IEEE. September 2000. ISBN 0769508650. doi:10.1109/EDOC.2000.882363. (原始内容存档于2022-11-07) 使用|archiveurl=需要含有|url= (帮助). 
    6. ^ Ho, Wing Hong. Introduction to EGL (PDF). IBM Software Group. 7 May 2007 [12 January 2019]. (原始内容 (PDF)存档于13 January 2019). 
    7. ^ Radin, George. Wexelblat, Richard L. , 编. The early history and characteristics of PL/I. History of Programming Languages. Academic Press: 572. 19781981. ISBN 0127450408. doi:10.1145/800025.1198410. 
    8. ^ What is PL/B - The Programming Language for Business?. sysmaker.com. Infopro, Inc. [22 April 2022]. (原始内容存档于2022-12-16). ... conversion to an alternate, extended COBOL or to ANSI COBOL is very difficult, if at all possible 
    9. ^ 國家教育研究院 學術名詞COBOL. [2017-06-08]. (原始内容存档于2017-08-05). 
    10. ^ Early Meetings of the Conference on Data Systems Languages. IEEE Annals of the History of Computing. 1985, 7 (4): 316–325. S2CID 35625728. doi:10.1109/MAHC.1985.10047. 
    11. ^ 又走了一位大牛!COBOL 語言的聯合設計者離世. [2017-06-08]. (原始内容存档于2017-06-21). 
    12. ^ 大型主機疫情期用量飆高,美數個州急徵COBOL人才. iThome. [2020-04-15]. (原始内容存档于2020-04-17) (中文(繁体)). 
    13. ^ Moseley, Jay. COBOL Compiler from MVT. 17 January 2015 [19 July 2015]. (原始内容存档于2015-07-22). 

    Module:Authority_control第183行Lua错误:attempt to index field 'wikibase' (a nil value)