COBOL

COBOL（/ˈkoʊbɒl/），其名稱來自於英語Common Business Oriented Language的縮寫，可譯為通用商業語言或面向常規業務型語言/常規商業信息處理語言，它屬於編譯語言，是最早的高階程式語言之一，也是最早實施標準化的計算機語言之一。COBOL主要应用于商业数据处理领域，此間大量的數據通常以文件的形式存儲在磁盤上，它提供強大的文件處理功能，对各种类型的数据进行收集、存儲、傳送、分類、排序、計算及打印報表、輸出圖像。 1959年5月，美國國防部委託葛麗絲·霍普博士領導一個委員會，制定了COBOL語言的標準。珍·薩姆梅特（英语：Jean E. Sammet）和其他5位程序員，在紐約曼哈頓的雪梨荷兰酒店（英语：The Sherry-Netherland）封閉兩週，開發完成了COBOL的大部分設計。COBOL最早是以葛麗絲·霍普開發的FLOW-MATIC（英语：FLOW-MATIC）語言為範本。 COBOL於1961年由美國數據系統語言協會（英语：CODASYL）公布。正式發布於1960年4月，稱為COBOL－60，現在最新的版本是COBOL－2023。1963年，美國國家標準學會进行了标准化，但是ANSI标准很少被遵循，故而COBOL程序只是部分可移植的。 经过多年来的不断修改、丰富完善和标准化，COBOL已发展为多种版本的庞大语言。COBOL在财会工作、统计报表、计划编制、情报检索、人事管理等数据管理及商业数据处理领域，都曾有着广泛的应用。COBOL多年來被視為過時的語言，但是目前仍有使用COBOL的金融業核心系統在运行中，除了舊有系統太龐大修改不易外，COBOL平台的穩定性也是它生命一直超過預期延續的重要原因。 在2019新型冠狀病毒疫情影响下，美国政府因為需處理大量失業救助，使得COBOL编写的老旧系统頻繁出现故障，需要同样上年纪、甚至已退休的老年COBOL程序员来協助维护，所以COBOL的创始团队在网上公开教程和学习资源，让年轻程序员学习COBOL来协助这些程序员维护系統，同时也紧急招募COBOL程序员来协助维护。 COBOL是一種面向數據處理的、面向文件的、面向過程（POL）的高級編程語言，是一種功能很強而又極為冗長的語言。COBOL语法与英文很接近，即使是不懂编程的人也能看懂代码。仅提供了加、减、乘、除及乘方这五种简单的算术运算，因而不适于进行科学计算。COBOL适合于具有循环处理周期的环境（例如打印工资支票）以及数据操纵量相当大的环境。 COBOL程序由4部（DIVISION）组成：IDENTIFICATION DIVISION.（标识部）、ENVIRONMENT DIVISION.（环境部）、DATA DIVISION.（数据部）、 PROCEDURE DIVISION.（过程部），而每个部又由若干节（SECTION）组成。 「PROGRAM-ID」（程序識別ID）、「AUTHOR」（作者名）、「DATE-WRITTEN」（編寫日期），這些並不直接影響程序的執行，而是程序的註釋 信息。程序註釋可以採用任何語言書寫，COBOL編譯器可以接受。 用于记载程序可以被运行的计算机环境。“ENVIRONMENT DIVISION.”部包括“CONFIGURATION SECTION”环境节和“INPUT-OUTPUT SECTION”输入输出节。 用于定义和声明程序所要使用的变量及其他数据。程序要使用的全部变量和数据必须在这里定义。“DATA DIVISION.”部主要包含“FILE SECTION.”和“WORKING-STORAGE SECTION.”节。 如果程序要通过参数接收数据，那么使用“LINKAGE SECTION”来声明。 COBOL程序的数据，主要有以下3种： 变量（Variables） 常量（Literals） 表意常量（FigurativeConstants）：使用有特定意思的多个词组合成一个常量的代名词。好处是便于编码人员识别。比如：HIGH-VALUES、LOW-VALUES等可以表达一定意思的名称作为常量代名词。 COBOL的基本变量类型，有以下三种： 数值型（Numeric） 英文字符型（AlphaNumeric） 英文字符串型（Alphabetic） 用于容纳程序的实际处理代码。需要传入参数时，采用“PROCEDURE DIVISION USING引数名[，参数名...]”的方式。 因為前3個DIVISION都是註釋，卻又必須，只到第4個DIVISION「PROCEDURE DIVISION」才真正涉及程序代碼，這樣的繁瑣規定使得COBOL被批評為太過冗長。但是，基於這樣的4個DIVISION的明確記述等的嚴格形式，COBOL也被公認是可讀性強的語言。另外，COBOL的保留字數量龐大，字數過長的保留字太多是COBOL的特徵之一。 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保管的样例派生而来。为了保持那个时代的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的单一一行输出。 https://www.iso.org/standard/74527.html. 國家教育研究院 學術名詞COBOL. [2017-06-08]. （原始内容存档于2017-08-05）.  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.  又走了一位大牛！COBOL 語言的聯合設計者離世. [2017-06-08]. （原始内容存档于2017-06-21）.  大型主機疫情期用量飆高，美數個州急徵COBOL人才. iThome. [2020-04-15]. （原始内容存档于2020-04-17） （中文（繁體））.  Moseley, Jay. COBOL Compiler from MVT. 17 January 2015 [19 July 2015]. （原始内容存档于2015-07-22）.