世界潮流,浩浩荡荡,顺之则昌,逆之则亡。2023 年的前幾個月在 LLM 的加持下仿佛 "天上一天,地下一年" 。然而這種飛速的發展不由得令人無限焦慮,於是我決定寫一系列文章來緩解自己的焦慮,讓自己回到三十年前,去感受 "慢生活" 的悠閒。
才不是因為總有人找我用奇奇怪怪的語言寫奇奇怪怪的東西呢。
COBOL 是什麼#
COBOL 的全稱是 Common Business Oriented Language 即常規商業信息處理語言,COBOL 往往用於金融行業和會計行業等商業數據的處理。從今天(2023 年)來看,COBOL 語言或許已經走在消亡的道路上,但仍舊有許多的金融核心系統仍在使用 COBOL。這裡面主要有兩個原因,一個是 COBOL 本身穩定性較強,另一個便是更改舊有系統的代價太高(也就是說,在很多場景下使用其他語言重構這些系統並不划算)。
這個系列文章的 COBOL 部分將簡要的介紹 COBOL 的基礎,做一個簡易的 COBOL 教程。(當然,我並不贊成花過多的時間研究 COBOL,畢竟這門語言的最終歸宿是成為賽博化石。)
邁出第一步#
提到 COBOL 就不得不提到 IBM 和大型機。COBOL 語言是在大型機上運行的,但是如果我們沒有大型機就無法運行 COBOL 嗎?實際上並不,我們現在有各種方法可以模擬大型機,讓我們的程序在個人電腦運行。如果你真的打算嘗試一下 COBOL,可以參考下下面的教程配置:
- https://www.geeksforgeeks.org/how-to-install-cobol-on-macos/
- https://ibm.github.io/zopeneditor-about/Docs/interact_zos_zowe_explorer.html#setting-up-and-using-profiles-in-zowe-explorer
- https://www.youtube.com/watch?v=RdMAEdGvtLA&t=478s
Hello COBOL#
每一個編程語言都要有 hello world,那麼 COBOL 當讓也不例外。但是由於 COBOL 的特殊性,我們要先了解下對於一個完整的 COBOL 程序的結構是如何的。
這幅圖從上到下是包含關係,也就是說:
- program 由多個 DIVISION 組成
- DIVISION 由多個 SECTIONS 組成
- ......
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLO.
000300 ENVIRONMENT DIVISION.
000400 DATA DIVISION.
000500 PROCEDURE DIVISION.
000600 DISPLAY 'HELLO WORLD'
000700 STOP RUN.
從這段簡短的程序我們便可以感受到,COBOL 的語法和如今我們接觸的程序不太一樣,反而具有很強的彙編既視感。從這門語言的誕生時間來看,這並不讓人意外。我們接下來要分解下這段程序的結構。我們首先看單獨的行:
COBOL 程序的格式要求比較嚴格,對於每行可以分解成五個部分:
- 1 ~ 6 列 是序列區,用於標識行數序號
- 第 7 列 是標誌區,如果該位置為 * 則表示這行是註釋,- 表示延續,/ 表示換頁
- 8 ~ 11 列 所有 COBOL 部,節,段和一些特殊條目必須從 A 區開始。
- 12 ~ 72 列 所有 COBOL 語句必須從區域 B 開始。
- 73 ~ 80 列 可以根據程序員的需要使用,在這裡添加修改碼等標識。
IDENTIFICATION DIVISION. 声明标识部
ENVIRONMENT DIVISION. 声明环境部
DATA DIVISION. 声明数据部
PROCEDURE DIVISION. 声明过程部
一個 COBOL 程序必須要有标识部,但可以没有环境部和数据部。
我們來分析程序中除了部段声明的部分。
其中 PROGRAM-ID xxxxx. 表明該程序的 ID(可以理解成為程序的標識符)。
DISPLAY 如同 python 的 print,將後續的內容打印出來。
STOP RUN. 表示程序的結束。
對於 hello world 程序,我們可能還無法將之與前文的 COBOL 程序結構對應起來。這是因為該 COBOL 程序不需要讀寫文件,甚至不需要存儲任何中間變量,故很多聲明被省略了。我們將在下次的文章中完整的介紹一個程序。