COBOL
- REDIRECT Template:Expand language
Template:NoteTA 脚本错误:没有“Infobox”这个模块。脚本错误:没有“Check for unknown parameters”这个模块。
脚本错误:没有“Lang”这个模块。(脚本错误:没有“IPAc-en”这个模块。),其名稱來自於英語Common Business Oriented Language的縮寫,可譯為通用商業語言或面向常規業務型語言/常規商業信息處理語言[1],它屬於編譯語言,是最早的高階程式語言之一,也是最早實施標準化的計算機語言之一。COBOL主要应用于商业数据处理领域,此間大量的資料通常以檔案的形式儲存在磁碟上,它提供強大的檔案處理功能,对各种类型的数据进行收集、存儲、傳送、分類、排序、計算及打印報表、輸出圖像。
历史[编辑]
1959年5月,美國國防部委託葛麗絲·霍普博士領導一個委員會,制定了COBOL語言的標準[2]。Template:維基數據鏈接和其他5位程序員,在紐約曼哈頓的Template:維基數據鏈接封閉兩週,開發完成了COBOL的大部分設計[3]。COBOL最早是以葛麗絲·霍普開發的Template:綠鏈語言為範本。
COBOL於1961年由Template:維基數據鏈接公布。正式發布於1960年4月,稱為COBOL-60,現在最新的版本是COBOL-2023。1963年,美國國家標準學會进行了标准化,但是ANSI标准很少被遵循,故而COBOL程序只是部分可移植的。
遗留[编辑]
经过多年来的不断修改、丰富完善和标准化,COBOL已发展为多种版本的庞大语言。COBOL在财会工作、统计报表、计划编制、情报检索、人事管理等数据管理及商业数据处理领域,都曾有着广泛的应用。COBOL多年來被視為過時的語言,但是目前仍有使用COBOL的金融業核心系統在运行中,除了舊有系統太龐大修改不易外,COBOL平台的穩定性也是它生命一直超過預期延續的重要原因。
在2019新型冠狀病毒疫情影响下,美国政府因為需處理大量失業救助,使得COBOL编写的老旧系统頻繁出现故障,需要同样上年纪、甚至已退休的老年COBOL程序员来協助维护,所以COBOL的创始团队在网上公开教程和学习资源,让年轻程序员学习COBOL来协助这些程序员维护系統,同时也紧急招募COBOL程序员来协助维护。[4]
特点[编辑]
COBOL是一種面向数据处理的、面向文件的、面向过程(脚本错误:没有“ilh”这个模块。)的高級編程語言,是一種功能很強而又極為冗長的語言。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程序可以通过Template:Le来提交,并很有可能使用打孔卡阅读器和80列打孔卡。下面列出的具有空DATA DIVISION的代码,曾使用GNU/Linux和运行Template:Le 3.8J的Template:Le Hercules模拟器测试过。这段写于2015年的JCL,是从Hercules教程和Jay Moseley保管的样例派生而来[5]。为了保持那个时代的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的单一一行输出。
注释[编辑]
参考文献[编辑]
脚本错误:没有“Navbox”这个模块。
脚本错误:没有“Authority control”这个模块。脚本错误:没有“Check for unknown parameters”这个模块。