COBOL
此條目可參照外語維基百科相應條目來擴充。 |
COBOL(/ˈkoʊbɒl/),其名稱來自於英語Common Business Oriented Language的縮寫,可譯為通用商業語言或面向常規業務型語言/常規商業信息處理語言[10],它屬於編譯語言,是最早的高階程式語言之一,也是最早實施標準化的計算機語言之一。COBOL主要應用於商業數據處理領域,此間大量的數據通常以文件的形式存儲在磁盤上,它提供強大的文件處理功能,對各種類型的數據進行收集、存儲、傳送、分類、排序、計算及打印報表、輸出圖像。
編程範型 | 過程式, 指令式, 面向對象 |
---|---|
設計者 | Howard Bromberg, Norman Discount, Vernon Reeves, 珍·薩姆梅特, William Selden, Gertrude Tierney |
實作者 | 美國數據系統語言協會,美國國家標準協會,國際標準化組織 |
面市時間 | 1959年 |
當前版本 |
|
型態系統 | 弱型別,靜態 |
文件擴展名 | .cbl , .cob , .cpy |
主要實作產品 | |
GnuCOBOL, 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[2], Veryant isCOBOL, Wang VS COBOL, WATBOL | |
啟發語言 | |
起初:AIMACO、COMTRAN、FACT、FLOW-MATIC
COBOL 2002[a]:C++、Eiffel、Smalltalk | |
影響語言 | |
CobolScript[6]、EGL[7]、PL/I[8]、PL/B[9] | |
歷史
1959年5月,美國國防部委託葛麗絲·霍普博士領導一個委員會,制定了COBOL語言的標準[11]。珍·薩姆梅特和其他5位程序員,在紐約曼哈頓的雪梨荷蘭酒店封閉兩週,開發完成了COBOL的大部分設計[12]。COBOL最早是以葛麗絲·霍普開發的FLOW-MATIC語言為範本。
COBOL於1961年由美國數據系統語言協會公布。正式發布於1960年4月,稱為COBOL-60,現在最新的版本是COBOL-2023。1963年,美國國家標準學會進行了標準化,但是ANSI標準很少被遵循,故而COBOL程序只是部分可移植的。
遺留
經過多年來的不斷修改、豐富完善和標準化,COBOL已發展為多種版本的龐大語言。COBOL在財會工作、統計報表、計劃編制、情報檢索、人事管理等數據管理及商業數據處理領域,都曾有着廣泛的應用。COBOL多年來被視為過時的語言,但是目前仍有使用COBOL的金融業核心系統在運行中,除了舊有系統太龐大修改不易外,COBOL平台的穩定性也是它生命一直超過預期延續的重要原因。
在2019新型冠狀病毒疫情影響下,美國政府因為需處理大量失業救助,使得COBOL編寫的老舊系統頻繁出現故障,需要同樣上年紀、甚至已退休的老年COBOL程序員來協助維護,所以COBOL的創始團隊在網上公開教程和學習資源,讓年輕程序員學習COBOL來協助這些程序員維護系統,同時也緊急招募COBOL程序員來協助維護。[13]
特點
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來提交,並很有可能使用打孔卡閱讀器和80列打孔卡。下面列出的具有空DATA DIVISION
的代碼,曾使用GNU/Linux和運行MVS 3.8J的System/370 Hercules模擬器測試過。這段寫於2015年的JCL,是從Hercules教程和Jay Moseley保管的樣例派生而來[14]。為了保持那個時代的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.
- ^ Technical Standard, COBOL Language (PDF). X/Open Company Ltd., U.K. December 1991. ISBN 1-872630-09-X.
- ^ Saade, Henry; Wallace, Ann. COBOL '97: A Status Report. Dr. Dobb's Journal. October 1995 [21 April 2014]. (原始內容存檔於22 April 2014).
- ^ 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++.
- ^ Arranga, Edmund C.; Coyle, Frank P. Cobol: Perception and Reality. Computer. March 1997, 30 (3): 127. ISSN 0018-9162. doi:10.1109/2.573683.
- ^ 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.
- ^ Ho, Wing Hong. Introduction to EGL (PDF). IBM Software Group. 7 May 2007 [12 January 2019]. (原始內容 (PDF)存檔於13 January 2019).
- ^ 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.
- ^ What is PL/B - The Programming Language for Business?. sysmaker.com. Infopro, Inc. [22 April 2022].
... conversion to an alternate, extended COBOL or to ANSI COBOL is very difficult, if at all possible
- ^ 國家教育研究院 學術名詞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).