（/ˈkoʊbɒl/），其名稱來自於**通用商業語言**（英語：，又譯為**面向常規業務型語言**/**常規商業信息處理語言**）的縮寫，是最早的高階程式語言、最早實施標準化的計算機語言之一。屬於編譯語言。

历史
--

1959年5月，美國國防部委託葛麗絲·霍普博士領導一個委員會，制定了COBOL語言的標準，並於1961年由美國數據系統語言協會（英语：）公布。正式發布於1960年4月，稱為Cobol－60，現在最新的版本是Cobol－2002。COBOL最早是以葛麗絲·霍普開發的FLOW-MATIC（英语：）語言為範本。值得注意的是，葛麗絲·霍普並不是發明COBOL的六人組成員之一。1959 年，在紐約曼哈頓的雪梨荷兰酒店（英语：），珍·薩姆梅特（英语：）和其他5位程序員閉關兩週，幾乎是無晝夜地開發，完成了 COBOL 的大部分設計。

1963年，美國國家標準學會进行了标准化，但是ANSI标准很少被遵循；因此，COBOL程序只是部分可移植的。

重要性
---

经过40多年的不断修改、丰富完善和标准化，COBOL已发展为多种版本的庞大语言，在财会工作、统计报表、计划编制、情报检索、人事管理等数据管理及商业数据处理领域，都有着广泛的应用。

COBOL主要是应用于金融和会计行业等非常重要的商业数据处理领域，即使 COBOL 多年來被視為過時的語言，但是目前大多數的金融業核心系統仍多半使用COBOL，除了舊有系統太龐大修改不易外，COBOL 平台的穩定性也是它生命一直超過預期延續的重要原因。

在2019新型冠狀病毒疫情影响下，美国政府因為需處理大量失業給付，使得COBOL编写的老旧系统頻繁出现故障，需要同样上年纪、甚至已退休的老年COBOL程序员来協助维护，所以COBOL的创始团队在网上公开教程和学习资源，让年轻程序员学习COBOL来协助这些程序员维护系統，同时也紧急招募COBOL程序员来协助维护。

特点
--

COBOL是一種面向數據處理的、面向文件的、面向過程（POL）的高級編程語言，是一種功能很強而又極為冗長的語言。

COBOL适合于具有循环处理周期的环境（例如打印工资支票）以及数据操纵量相当大的环境。COBOL主要应用于商业数据处理领域，对各种类型的数据进行收集、存儲、傳送、分類、排序、計算及打印報表、輸出圖像是它的強項。

COBOL语法与英文很接近，即使是不懂编程的人也能看懂代码。

強大的文件處理功能，大量的數據通常以文件的形式存儲在磁盤上。

仅提供了加、减、乘、除及乘方这五种简单的算术运算，因而不适于进行科学计算。

未来的COBOL将支持XML等Web时代的新技术。

程序结构
----

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保管的样例派生而来。为了保持那个时代的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. ↑  .
2. ↑ .  [2017-06-08]. （原始内容存档于2017-08-05）.
3. ↑ . IEEE Annals of the History of Computing. 1985, **7** (4): 316–325. S2CID 35625728. doi:10.1109/MAHC.1985.10047.
4. ↑ .  [2017-06-08]. （原始内容存档于2017-06-21）.
5. ↑ . iThome.  [2020-04-15]. （原始内容存档于2020-04-17） （中文（繁體））.
6. ↑  Moseley, Jay.. 17 January 2015  [19 July 2015]. （原始内容存档于2015-07-22）.



|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
程序设计语言 |
| --- |
|  |
| 范型 | 

|  |  |
| --- | --- |
| 过程式 | 
* FORTRAN
* COBOL
* JOVIAL
* ALGOL 60
* JOSS（英语：）
* BASIC
	+ QB64（英语：）
* PL/I
* MUMPS（英语：）
* ALGOL 68
* Forth
* Pascal
	+ Turbo Pascal
* C
* Modula-2
* Ada 83
* occam
* Oberon
* Go
* Zig

 |
|  |
| 面向对象 | 
* Simula 67
* Smalltalk
* Objective-C
* Eiffel
* Object Pascal
	+ Delphi
* Self
* Visual Basic
	+ Gambas
* Ada 95
* Java
* C#
	+ Vala
* Fantom（英语：）
* Crystal（英语：）

 |
|  |
| 多范型 | 
* C++
* Modula-3
* Dylan
* Python
* Lua
* JavaScript
* Ruby
* D
* Factor
* Scala
* F#
	+ F\*
* Haxe
* Dafny（英语：）
* Nim
* Rust
* Dart
* Julia
* Swift
* Bosque（英语：）

 |
|  |
| 函数式 | 

|  |
| --- |
| 
* LISP
	+ Scheme
	+ Common Lisp
	+ Clojure
* Logo
* APL/J
* ML
	+ Standard ML
	+ OCaml
* Erlang
	+ Elixir
* Haskell
	+ Curry
* SAC
* Agda
* Idris
* Pure（英语：）
* jq（英语：）
* Cuneiform

 |

 |
|  |
| 逻辑式 | 
* Prolog
* Datalog
* Mercury
* AnsProlog

 |

 |
|  |
| 脚本语言 | 

|  |  |
| --- | --- |
| 动态语言 | 
* SNOBOL
* Icon
* REXX
* Perl
	+ Raku
* Tcl/Tk
* CLOS
* newLISP
* Python
* Lua
* Ruby
* PHP
	+ Hack
* CFML（英语：）
* REBOL
	+ Red（英语：）
* Julia

 |
|  |
| Shell语言 | 
* Unix shell
	+ sh/ash
	+ csh/tcsh
	+ ksh
	+ bash
	+ zsh
	+ rc（英语：）
	+ fish
* sed
* AWK
* PowerShell

 |
|  |
| ECMA-262 | 
* ECMAScript
	+ JavaScript
* TypeScript
* CoffeeScript/LiveScript（英语：）
* Elm
* PureScript
* Reason

 |

 |
|  |
| 特定平台 | 

|  |  |
| --- | --- |
| .NET | 
* C#
* C++/CLI
* F#
* PowerShell
* VB.NET
* Small Basic

 |
|  |
| JVM | 
* Java
	+ AspectJ（英语：）
* Scala
* Clojure
* Groovy
* Kotlin

 |

 |
|  |
| 特定领域 | 

|  |  |
| --- | --- |
| 科学计算 | 
* Speakeasy（英语：）
* IDL
	+ GDL
* Maxima
* Maple
* MATLAB
	+ Octave
	+ Scilab
* Wolfram
* R
* Yorick（英语：）
* SageMath
* Julia

 |
|  |
| GPU计算 | 
* Cg/HLSL
* GLSL
* Brook（英语：）
* OpenCL
	+ SYCL
* CUDA/PTX（英语：）
* Futhark
* SPIR-V（英语：）

 |
|  |
| 数据查询 | 
* SQL
	+ PL/SQL
	+ T-SQL
	+ SQL/PSM（英语：）
* xBase（英语：）
* XPath
* XQuery（英语：）
* GraphQL

 |
|  |
| 可视化 | 
* Simulink
* LabVIEW
* Orange（英语：）
* KNIME（英语：）
* Scratch
	+ Snap!
* Power Fx

 |
|  |
| 传媒设计 | 
* SuperCollider
* Pure Data
* Processing
* ChucK

 |

 |
|  |
|   | 

|  |  |
| --- | --- |
| 其它 | 
* 汇编语言
* APT（英语：）
* GPSS（英语：）
* dc
* make
* PostScript
* XSLT
* LLVM IR
* WebAssembly

 |

 |
|  |
| 
* 分类 目录
* 列表级条目 列表
* 历史
* 比较（英语：）
* 时间线（英语：）

 |

 |

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| : 各地 編輯維基數據鏈接 | 
* 法国
* BnF data
* 德国
* 以色列
* 美国

 |

 |