本気だったかな?Debian 11にGnuCOBOLをインストールする方法

本気だったかな?Debian 11にGnuCOBOLをインストールする方法

COBOLコード最近、25230 の誰かが、アセンブラで書かれたフォーラム ソフトウェアであるasmbbについて言及しました。

完全に停止します。

アセンブラで書かれています。フォーラムソフトウェアです。

見てください。実際かなりいいですよ。

COBOLでフォーラムソフトウェアを書こうと思った、と冗談を言ったことがあります。本気だったでしょうか?まあ…正確にはそうではありませんが、面白そうではあります。

COBOLは悪評を浴びていますが、それも当然です。冗長性が過剰で、自己のパロディと化している上に、プログラミングに対する考え方も非常に硬直的です。トップダウンで実行するように設計されており(「重力駆動設計」という言葉がぴったりです)、理論上はどんなプログラミングもできますが、真の強みはレコードの高速処理にあります。テープ1に大量のレコードがあり、それらを変換してテープ2に書き出したい場合、COBOLが最適です。

高速と表現したのは、IBMが長年にわたりメインフレームをCOBOLを念頭に置いて設計してきたからです。そして、ビッグアイアンとCOBOLの間には密接な共生関係があります。COBOLの各文は(1文に及ぶほど冗長であるにもかかわらず)平均して4つのアセンブラ命令しか生成しません。また、変数が事前に定義されているため、コードを徹底的に最適化することも容易です。COBOLはメモリがキロバイト単位で記述されていた時代に設計されており、「レコードのバッチ処理」という考え方によって、無駄がなく効率的な処理が可能になっています。

レコード指向と書いたのは、これがCOBOLの得意分野だからです。昨年発表された新しいgcobolプロジェクト(GnuCOBOLに匹敵するプロジェクト)では、次のように述べられています。

Cobol には、レコード指向の I/O 用のコンパイル言語という、他の言語が占めていないニッチな分野があります。

妙に専門的に聞こえるかもしれませんが、そうではありません。レコード指向I/Oは、ほぼすべてのアプリケーションに当てはまると言えるでしょう。しかし、C言語の登場以来、ほぼすべてのアプリケーションがI/Oを外部ライブラリに委ね、「ファイル」の定義をUnixのバイトストリーム方式に置き換えるようになりました。

CGI Webアプリケーションを書いたことがあるなら、私が何を言っているのかお分かりでしょう。COBOLは、自由形式の実行時変数をコンパイル時定数に縮小することで、多くの難解な記述を排除します。

2023 年に COBOL を学ぶことを誰かに勧めるつもりはありません。まだ何億行もの COBOL コードが使用されていますが、最近は COBOL で新しいシステムを書く人はいません。

しかし、ビンテージのシステムに興味がある場合は…

そこで、Debian 11でGNU Cobolをセットアップする方法をGoogleで検索してみましたが、見つかりませんでした。sidにはあったのですが、削除されてしまいました。サードパーティ製の.debファイルはいくつかありますが、ゼロから構築するのはかなり簡単です。

まず、いくつかの基本と依存関係をインストールします。

 apt-get -y インストール build-essential libgmp-dev libdb-dev libncurses-dev \
  libcjson-dev libxml2-dev

次に、Gnu COBOLパッケージをダウンロードして解凍します。プロジェクトのページはSourceForgeにありますが、 FTPサイトの方がより直接的です。ここでは3.1.2を使用していますが、最新バージョンについては以下をご確認ください。

 /usr/local/src を cd します
wget https://ftp.gnu.org/gnu/gnucobol/gnucobol-3.1.2.tar.gz
cd グヌコボル-3.1
./configure
作る
インストールする

これにより、通常必要なものがすべて揃います。

構成: 動的ロード: システム
設定: 国際メッセージに gettext を使用する: はい
configure: ファイルロックにfcntlを使用する: yes
configure: 数学多重精度ライブラリを使用する: gmp
configure: 画面I/Oにcursesライブラリを使用する: ncursesw
構成: INDEXED I/OにBerkeley DBを使用する: yes
configure: XML I/O に使用: libxml2
configure: JSON I/O に使用: cjson

より特殊なオプションが必要な場合や特殊なニーズがある場合は、DEPENDENCIES ファイルを読んでください。

試しにコードをいくつか書いてみます… 先頭のスペースは重要です。このプログラムはもっと短くすることもできますが、コードを短くするのはCOBOLの考え方ではありません!

識別部。
       プログラムID。ローエンドサンプル。
       著者: raindog308。

       環境課。
       構成セクション。
       ソースコンピュータ。 
       オブジェクト-コンピュータ。
       入出力セクション。
              
       データ部門。
       ファイルセクション。
   
       作業保管セクション。

       手続き部。
       0001-こんにちは。
           「LowEnd4Life!」を表示します。
           			
           止まれ、走れ。
           
           プログラムの終了 ローエンドサンプル。

LD_LIBRARY_PATH に /usr/local/lib が含まれていることを確認してください。これは、COBOL ライブラリ (.so ファイル) がデフォルトでインストールされている場所です。.bash_profile に以下の設定を追加することもできます。

エクスポート LD_LIBRARY_PATH=${LOAD_LIBRARY_PATH}:/usr/local/lib

コンパイルして実行します:

 $ cobc -x lowend.cbl
$ ./lowend
ローエンド4ライフ!
$

おすすめの記事