2019-02-06

COBOLってこんな言語

日経xTECHの元記事を読んでもCOBOLの特徴があんまり伝わってこない感じだし、かといってそれをディスってもしょうがないので、書いてみた。

https://anond.hatelabo.jp/20190205192741

COBOL本質的にはDSLなんだけど、一見汎用プログラミング言語に見えてしまってRubyPythonなんかと比較するのが誤解のもとではあると思う。今の人でも知ってそうなCOBOLに似ている言語はたぶんSQLで、データを処理するための専用言語。ただ、SQLは頑張ればすごく複雑なこともできるパワフルな言語で、だからこそ現代でも生き延びているわけだけど、COBOLはわりとシンプルデータ処理を想定している感じ。

SQLだけでアプリケーションを作れないのは触ったことある人なら誰でもわかると思う。普通JavaRubyで全体の流れを記述してデータベース入出力をSQLで書く。COBOLもそんな感じで、全体の流れをJCLやShellスクリプト、あるいはJP1のような運用管理ソフトで書く。SQLの1個の処理に相当するのがCOBOLコンパイル単位で、それごとにソースファイルが分割される。ひとつソースファイルに2個以上の処理を書くこともできるけど普通はしない。ここまで理解すると古いCOBOLに1ファイル内のすべての処理に影響するグローバル変数しかないのや、今のCOBOLコンパイル単位をまたぐ真のグローバル変数がないのも、それほどクリティカルではないことがわかると思う。もし、本当に複数の処理にまたがる値が必要なら、データベースに格納してしまえばいいんだし。

で、SQLでいうところのデータベースに相当するのがCOBOLではデータファイルsedawkテキストファイルCSVファイルを行ごとに処理するのとちょっと似てるけど、COBOL場合は固定長ファイルという点が違う。改行文字は入ってなくて、たとえば150バイトごとに次のレコードみたいな形式。これの1レコードごとに何月何日何時に〇〇という商品を□□円で売ったとか書いてあるのが典型的データの内容。それを集計して今日は〇〇が何個売れて売上がどれだけあったとか、出金合計がいくらで入金合計がいくらで、みたいな財務諸表を作ったり。SQLと同じように税率なんかが書いてあるマスタデータと、日々の売り上げが書いてあるトランザクションデータがあって、突き合わせたりということもする。こういう集計処理だからUIはなくて、夜中に自動起動するようなバッチプログラムが主な使われ方。(混乱するから余談だけど、今のCOBOLSQLを使って普通RDBにもアクセスできる。ただ使い方としては、RDBファイル処理→ファイル処理→ファイル処理→ファイル処理→ファイル処理→RDBみたいに、最初最後だけみたいなのが普通

入出力がファイルから今の感覚で考えるとアクセスは遅い。でもメリットもあって、1回に1行しかメモリに乗せないからどんな巨大なデータでも時間さえかければ処理できる。それこそ国民ひとりひとりの年金データとかね。あと、途中でバグ不正データで止まってもデータを失うのは最小限で済むので復旧が比較的楽だったり。

データベースの話に戻ると、テーブル定義はどこに書いてあるかというとデータファイル側ではなくてCOBOLプログラム側、というのがSQLと一番違うところかも。つまり、このデータファイル構造はこれこれこうなっていると想定して読みます、とソースコードに自分で書く。当然実際のデータ構造がそれと違ってたらおかしくなる。

まあそんな感じで80年代くらいに会計処理をする目的だったら悪い言語ではなかったので、銀行官公庁とか、電力水道ガスといったライフラインを扱う大企業がこぞって導入して今に至る感じ。普通大企業は途中でSunかに置き換えてその後Linuxクラウドさらに置き換えたりしたけど、最初に作ったシステムが大きければ大きいほど、重要であれば重要であるほど現代的な環境に置き換えられないというのが今の課題

記事への反応 -
  • リーナスですら自身の攻撃的発言を自戒するこの時代、本邦の好戦的な技術者を見てげんなりした話。   「COBOLは難しいか、記者が試しにコードを書いてみた 」という記事が日経XTECHに...

    • 日経xTECHの元記事を読んでもCOBOLの特徴があんまり伝わってこない感じだし、かといってそれをディスってもしょうがないので、書いてみた。 https://anond.hatelabo.jp/20190205192741 COBOLは本質...

      • ObjectCOBOL は便利になったん?

      • なるほど。COBOLってやったことないけど、SQLの劣化版みたいなもんか。 COBOLのコードを自動的に他のプログラミング言語やデータ構造に置き換えるトランスパイラーを作ればいいのかもね...

      • プログラミング言語好きな人ってわりといる印象。自分と言えば言語オタではないので仕事に使えるふさわしい言語以外には全くではないがあまり興味がわかない。

      • COBOL自体は罪はない 道具に罪はない 銃も同じ 銃が人を殺すのではない、人が人を殺すのだ COBOLが人を殺すのではない、人が人を殺すのだ Rubyが人を

      • 基本情報を受ける為に学校が勧める言語がCOBOL それくらい簡単

        • 簡単なのはいいんだよ 経理のおじちゃん、おばちゃんにCSの知識なんて求める方がおかしい 「規約」がないからこうなったんだろ

      • プログラム冒頭でデータ形式を固定長で書いて処理するのがなつかしぃな 帳票から指定された項目を持ってきて処理するというのはアナログ時代から転換しやすかったのではなかろうか

      • B37でアバンド! JCL切り貼りしてリラン! これが情報処理か

      • Cobolの真髄はcorrespondingとredefine。 これとコピー句の組み合わせで誰でもかなりのスピードで同じような集計PGや帳票PGが量産できるのだ。

      • 4つのdivisionとその中にもいくつかのセクションで分かれていて(略 といういちばん大事な所が抜けてる

    • >「FizzBuzz」のような「いかに上手に処理を書くか」というような題材を持って来ると、 ちょっと違う話だけど、昔FizzBuzzが流行ったときも「いかにうまく書くか」みたいな話になって、...

    • 最近おごちゃんってどれくらいの人に知られてるんですかね? 日本Linux協会とか。

    • おごちゃんがTwitter初期からいるαついったらーなのに今も弱小企業なあたり察してあげなよ

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん