COBOLを始めてみよう

2010年代もあと1ヶ月以内に終わるこの頃に,1990年代以前のイメージがある(個人の感想です)言語をやってみませんか。銀行などの基幹システムにも使われていると評判の,あのCOBOLです。

調べてみると,COBOLは1959年に開発されていました。想像よりもかなり古かった……。今年で60周年の言語なんですね。

こんな感じで書き慣れない導入部分を書いてると無駄に疲れるので,とりあえず実際にCOBOLを動かしましょう。

COBOLを動かす

とりあえず環境を構築しましょう。Homebrewにはgnu-cobolというパッケージがあったのですが,自分の環境(macOS Catalina)ではうまく動きませんでした。
どうやらWindows向けには別の実装もあるようなのですが,macOSにはなかったので,Dockerで動かしました。

Docker Hubで cobolなどで調べて,いろいろやってたら Dockerイメージを見つけました。そして,そのイメージ名でググったら プログラムちょい替え(4)COBOLを40年ぶりにうごかしてみた:dockerでcobolという記事が見つかりました。

はい,見事に先にやってる人いましたね。ただ,もうここまで記事を書いてるので,そのまま続けます。このDockerイメージを使わせてもらっていろいろコードを動かしましょう。

Dockerで動かしてみる

実際にコード動かしてみたいですが,そもそも動かすコードがなければ試せないので,自分が書いたコードのレポジトリをcloneしてください。

git clone https://github.com/stmkza/cobol-test.git && cd cobol-test

次に,Dockerコンテナを起動させます。

docker run -it --rm -v `pwd`:/home/cobol kaizenjapan/cobol /bin/bash

コンテナの中に入ったら,以下のコマンドを実行してください。

cd /home/cobol
cobc -x hello-world.cbl && ./hello-world

Hello, world. と表示されたと思います。 hello-world のところを fizzbuzz に変えて,FizzBuzzも試してみてください。

COBOLのすごいところ

ここまでを読んだだけだと,COBOLがただの普通の言語であるかのように見えると思います。

えっ,文法がおかしいって? 検閲により削除 とか 検閲により削除 が普通の言語として見なされてるくらいだから,COBOLも文句なしに普通の文法ですよね。

ただ,COBOLの真にすごいところは,固定小数点10進演算ができるところなんです。他の言語だとライブラリを使わないとできないことが標準でできます。decimal型などがある言語を使ってる人にとってはそこまで利点を感じないかも知れませんが,そういうのがない言語だとライブラリを使う必要があります。言語によっては標準の演算子で計算ができません。
しかも,どこかで普通の数字として計算してしまって,誤差が出るかも知れない,結構気を遣います。

それでは実際にその威力を試してみましょう。

compute.cblでは,0.0000110000回足しています。普通に計算すると答えは0.1ですよね。COBOLでも答えは0.1になります。

123456*8901234567890123456789012345678901234567890
       IDENTIFICATION DIVISION.
       PROGRAM-ID. COMPUTE-TEST.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM  PIC 9(1)V9(5) VALUE 0.

       PROCEDURE DIVISION.
           PERFORM 10000 TIMES
               ADD 0.00001 TO NUM
           END-PERFORM.
           DISPLAY NUM
           STOP RUN.

      * Result: 0.10000

ここで普通じゃん って思った人,同じ処理をPHPでやってみましょう。残念ながらDockerイメージにはPHPが入っていないので,適当な環境でcompute.phpを実行してみてください。

<?php
$num = 0;

for($i=0; $i<10000; $i++) {
    $num += 0.00001;
}

echo $num . "\n";

// Result: 0.099999999999994

どうでしたか?自分の環境では0.099999999999994になりました。お金の計算などをするときにこのような誤差が出てしまっては大問題です。

他にもCOBOLの利点はたくさんあると思うのですが,自分がさらっと触ってみた範囲内では,これが一番の驚きでした。

みなさんもCOBOLを使ってみてはいかがでしょうか。

stmkza verified_user stmkzaです. なんかPROGLOVEの運営らしいです. よろしくお願いします.
コメント

コメントはありません

コメントを投稿する

コメントは内容を確認してから公開されます。公開されるまでお待ちください。