COBOL

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
COBOL
編程範型過程式編程, 指令式編程, 面向對象程序設計
設計者Howard Bromberg, Norman Discount, Vernon Reeves, 珍·薩姆梅特英語Jean E. Sammet, William Selden, Gertrude Tierney
實作者美國數據系統語言協會英語CODASYL美國國家標準協會國際標準化組織
面市時間1959年,​65年前​(1959
當前版本
編輯維基數據鏈接
型態系統強弱型別類型系統
文件擴展名.cbl, .cob, .cpy
主要實作產品
GnuCOBOL, IBM COBOL英語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

COBOL/ˈkbɒl/),其名稱來自於通用商業語言[2](英語:Common Business Oriented Language,又譯為面向常規業務型語言/常規商業信息處理語言)的縮寫,是最早的高階程式語言、最早實施標準化計算機語言之一。屬於編譯語言

歷史[編輯]

1959年5月,美國國防部委託葛麗絲·霍普博士領導一個委員會,制定了COBOL語言的標準[3],並於1961年由美國數據系統語言協會英語CODASYL公布。正式發布於1960年4月,稱為Cobol-60,現在最新的版本是Cobol-2002。COBOL最早是以葛麗絲·霍普開發的FLOW-MATIC英語FLOW-MATIC語言為範本。值得注意的是,葛麗絲·霍普並不是發明COBOL的六人組成員之一。1959 年,在紐約曼哈頓的雪梨荷蘭酒店英語The Sherry-Netherland珍·薩姆梅特英語Jean E. Sammet和其他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英語Job Control Language來提交,並很有可能使用打孔卡閱讀器和80列打孔卡。下面列出的具有空DATA DIVISION的代碼,曾使用GNU/Linux和運行MVS英語MVS 3.8J的System/370英語IBM 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. ^ 國家教育研究院 學術名詞COBOL. [2017-06-08]. (原始內容存檔於2017-08-05). 
  3. ^ 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. 
  4. ^ 又走了一位大牛!COBOL 語言的聯合設計者離世. [2017-06-08]. (原始內容存檔於2017-06-21). 
  5. ^ 大型主機疫情期用量飆高,美數個州急徵COBOL人才. iThome. [2020-04-15]. (原始內容存檔於2020-04-17) (中文(繁體)). 
  6. ^ Moseley, Jay. COBOL Compiler from MVT. 17 January 2015 [19 July 2015]. (原始內容存檔於2015-07-22).