徹底解説!COBOL言語のプログラムと処理速度について | 応用ガイド

COBOL(コボル)言語のプログラムの処理速度は早いのか?

応用-プログラムと処理速度-イメージ

COBOL(コボル)言語の主な特徴

COBOLは事務処理用に開発されたプログラミング言語で、1959年に登場してから既に半世紀以上経ちますが、未だに多くのシステムで使用されています。

その理由としては、生産性の高さや計算の正確さ、そして処理速度の速さが挙げられます。

COBOLは、Cやjavaに比べてかなり制約の多い言語ですが、記述方法がある程度決められているため、可読性が高いということが挙げられます。

また、何十年も使われ続けている実績から信頼性も高く、規模の大きなシステムでも長期間安定して稼働していることも他の言語には無い大きな特徴と言えるでしょう。

後述する計算処理についても、誤差がなく高速に処理を実行することが可能です。

このような特徴から、COBOLは今でもさまざまなシステム開発の現場で使われています。

COBOL(コボル)言語の処理速度が早い理由

COBOLは事務作業の効率化を目的に開発された言語ですので、大量のデータを高速で処理することが可能です。とくに浮動小数点型まで桁数を開発者が決める事が可能で、正確に計算処理を行うことができます。

COBOLは演算処理が正確で高速であることが知られていますが、その理由の1つとして1行ずつレコードを取得する単純な順ファイルはもちろん相対ファイル・牽引ファイルなどの特殊なファイルを使用することが挙げられます。相対ファイル・牽引ファイルの特性を活かして、大量のデータのソートやマージ(整列併合)なども高速で行うことができます。

また、COBOLは10進数の演算をそのまま行えるという特徴があります。これはCOBOLのコンパイラが10進演算を直接機械語に落としこむことで可能となります。

他のプログラム言語では2進数を10進数に変換して処理を行う際、ライブラリの呼出しなどの手間が発生し、その過程で誤差が生じてしまうこともあります。

COBOLは2進化10進法と呼ばれる方法で0から9までを表す2進数を4桁で表現することにより、誤差が発生せず、正確に演算を行うことができます。

そのため、大量のデータを処理する場合は、上述した相対ファイル・牽引ファイルなどの特殊なファイルを使用して高速でデータの処理が可能であること、10進演算を使用できることから、COBOLで記述したプログラムは処理速度が早いと言われています。特に金融系のシステムではCOBOLは処理速度や計算処理の正確性から、未だに必要不可欠な言語となっています。

実際の処理速度は?

ここでは、実際にCOBOLの処理速度がどれだけ早いのか?単純な繰り返し処理を行うプログラムを作成して、Javaプログラムとの処理速度と比較してみましょう。

比較するプログラムはそれぞれ100回繰り返し処理を行い、繰り返し処理の中で値を1ずつ加算してコンソールに出力します。

処理時間の計測は処理実行前と実行後でシステム時刻をミリ秒単位(100分の1秒)で取得し、差分を比較してみます。

Javaプログラム:

  1. import java.text.SimpleDateFormat;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4.  
  5. public class Main {
  6. public static void main(String[] args) throws Exception {
  7.  
  8. int i = 0;
  9.  
  10. // 開始時刻を取得
  11. Date sDate = new Date();
  12. SimpleDateFormat format =
  13. new SimpleDateFormat("hhmmssSS");
  14. String sTime = format.format(sDate);
  15.  
  16. // 1000回に達するまでループ
  17. while (i < 1000)
  18. {
  19. i = i + 1;
  20. System.out.println(i + "回目の処理です。");
  21. }
  22.  
  23. // 終了時刻を取得
  24. Date eDate = new Date();
  25. SimpleDateFormat formatA =
  26. new SimpleDateFormat("hhmmssSS");
  27. String eTime = formatA.format(eDate);
  28.  
  29. // 処理時間
  30. int res = Integer.parseInt(eTime) - Integer.parseInt(sTime);
  31. System.out.println("処理時間(mm):" + res);
  32. }
  33. }

実行結果:

  1. 1回目の処理です。
  2. 2回目の処理です。
  3. ・・・省略・・・
  4. 997回目の処理です。
  5. 998回目の処理です。
  6. 999回目の処理です。
  7. 1000回目の処理です。
  8. 処理時間(mm):186

COBOLプログラム:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. CNT002.
  3. DATA DIVISION.
  4. WORKING-STORAGE SECTION.
  5. 01 CNT PIC 9(04) VALUE 0.
  6. 01 STIME PIC 9(08).
  7. 01 ETIME PIC 9(08).
  8. 01 RESULT PIC 9(03).
  9. PROCEDURE DIVISION.
  10.  
  11. *> 開始時刻を取得
  12. ACCEPT STIME FROM TIME
  13.  
  14. *> 1000回に達するまでループ
  15. PERFORM UNTIL CNT = 1000
  16. ADD 1 TO CNT
  17. DISPLAY CNT"回目の処理です。"
  18. END-PERFORM
  19.  
  20. *> 終了時刻を取得
  21. ACCEPT ETIME FROM TIME
  22.  
  23. *> 処理時間
  24. COMPUTE RESULT = STIME - ETIME
  25. DISPLAY "処理時間(mm):"RESULT.
  26.  
  27. STOP RUN.

実行結果:

  1. 0001回目の処理です。
  2. 0002回目の処理です。
  3. ・・・省略・・・
  4. 0997回目の処理です。
  5. 0998回目の処理です。
  6. 0999回目の処理です。
  7. 1000回目の処理です。
  8. 処理時間(mm):001

実行結果のとおりJavaプログラムの場合は処理に186ミリ秒掛かり、COBOLプログラムの場合は1ミリ秒掛かることが分かりました。

COBOLでシステムの現在時刻を取得するには、「ACCEPT [時刻を取得する項目] FROM TIME」を指定します。

時刻を取得する項目には、10進数8桁の整数で、時(0~23)・分(0~59)・秒(0~59)・mm:(0~99)となります。

Javaは現在の時刻を取得するために日付・カレンダークラスのライブラリを呼び出すため、若干の誤差はあると思われますが、それでも検証結果から圧倒的にCOBOLが早いことが分かります。

練習問題

ここでは練習問題にチャレンジしてみましょう。

問)

COBOLの処理速度が優れている理由は何か?

答え)

COBOLの演算処理は10進数演算をコンパイラが直接機械語に落とし込むため、処理速度が早いと言われています。

Javaなどの言語はライブラリ関数を呼出して2進から10進への変換が必要なため、その分処理が遅くなります。

ここではCOBOLの特徴やCOBOLの処理速度が早い理由などについて解説しました。

COBOLは事務処理を目的に開発された言語のため、大量のデータを高速に、そして正確に処理を実行するのに非常に優れた言語です。

このような特性から半世紀以上経った今でもCOBOLは現役として使われ続けていますし、今後も規模の大きな基幹系システムや金融系のシステムでは使われ続けていくことは間違いないでしょう。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門