COBOL

維基百科,自由的百科全書
(重新導向自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)