mushroompot

mushroompot

全栈,全干,全菜。 be a fullstack man, just for fun!
twitter

回到三十年前(一)COBOL

世界潮流,浩浩荡荡,顺之则昌,逆之则亡。2023 年的前幾個月在 LLM 的加持下仿佛 "天上一天,地下一年" 。然而這種飛速的發展不由得令人無限焦慮,於是我決定寫一系列文章來緩解自己的焦慮,讓自己回到三十年前,去感受 "慢生活" 的悠閒。

才不是因為總有人找我用奇奇怪怪的語言寫奇奇怪怪的東西呢。

COBOL 是什麼#

COBOL 的全稱是 Common Business Oriented Language 即常規商業信息處理語言,COBOL 往往用於金融行業和會計行業等商業數據的處理。從今天(2023 年)來看,COBOL 語言或許已經走在消亡的道路上,但仍舊有許多的金融核心系統仍在使用 COBOL。這裡面主要有兩個原因,一個是 COBOL 本身穩定性較強,另一個便是更改舊有系統的代價太高(也就是說,在很多場景下使用其他語言重構這些系統並不划算)。
這個系列文章的 COBOL 部分將簡要的介紹 COBOL 的基礎,做一個簡易的 COBOL 教程。(當然,我並不贊成花過多的時間研究 COBOL,畢竟這門語言的最終歸宿是成為賽博化石。)

邁出第一步#

提到 COBOL 就不得不提到 IBM 和大型機。COBOL 語言是在大型機上運行的,但是如果我們沒有大型機就無法運行 COBOL 嗎?實際上並不,我們現在有各種方法可以模擬大型機,讓我們的程序在個人電腦運行。如果你真的打算嘗試一下 COBOL,可以參考下下面的教程配置:

Hello COBOL#

每一個編程語言都要有 hello world,那麼 COBOL 當讓也不例外。但是由於 COBOL 的特殊性,我們要先了解下對於一個完整的 COBOL 程序的結構是如何的。

2.jpg

這幅圖從上到下是包含關係,也就是說:

  • 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 的語法和如今我們接觸的程序不太一樣,反而具有很強的彙編既視感。從這門語言的誕生時間來看,這並不讓人意外。我們接下來要分解下這段程序的結構。我們首先看單獨的行:
1. jpg
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 程序不需要讀寫文件,甚至不需要存儲任何中間變量,故很多聲明被省略了。我們將在下次的文章中完整的介紹一個程序。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。