RPG(プログラミング言語)はどうして自分には読みづらいのか

現場のRPGのプログラムがどうして自分には読みづらかったのか、考えたことの棚卸し。

抽象度が低いコードも書かなくてはいけない(環境の問題)ことと、JavaPythonなら普通にある文法がない(言語自体の問題)ことの二つが原因だと考えています。

環境の問題

JavaPythonならライブラリを導入するところを、開発者が手動で実装している印象があります。
実行環境がベンダー製のOSに限られること、開発当時にインターネットがそれほど普及していなかったことから、ライブラリという考え方そのものが広まっていなかったのではないでしょうか。

具体的になかったものは、

  • 標準ライブラリがない
    カレンダー型とかtimestamp型とかそういう便利なものを見た覚えがありません(そもそもimportがないと思います)

  • 外部ライブラリがない
    例えば、データを帳票に印刷するためのスプールファイルを作るための外部ライブラリが現場になく、その部分のコードを各実装者が手動で書いていた状況を知っています。
    そのせいで、印刷に関すること(どこで改行する、何列目に印字する、etc...)と、ロジックに関すること(値がゼロなら項目を印刷しない、見出しは内容がある時だけ印字する、etc...)が混ざっていて、読み解くのに苦労しました。

ただし、共通のサブルーチン(メソッドのようなもの)はあり、処理の共通化はそこで行われていました。

言語自体の問題

文法で一番びっくりしたのは、ソースコード1行あたりの文字数が決まっていたことでした。
f:id:hiroga_cc:20170908070928p:plain

(wikipediaより)
調べたら、「自由形式」というソースの記述方法を使っていないらしいです。

他にも、こんな文法がありませんでした。

  • ループ処理の種類が少ない
    doループしか見た覚えがない。for、while、mapは見当たりませんでした。

  • 例外処理がない
    try - catch- finallyがなく、実行時エラーが起きた場合は呼び出し元にステータスコードを返却していました。

  • インデントが自由に使えない
    IF文とかFOR文の中身にインデントがかかってないのを想像してほしいのですが、かなり読みづらいです。

  • クラスがない(最新の言語仕様にはある)
    全部がJavaでいうところのプリミティブ型。timestampを呼び出して年月を取得するみたいなことはできません。 ただし、構造体はあります。dateクラスにあたるオブジェクトを構造体で表現しているのをよく見かけました。

  • SQLがない(最新の言語仕様にはある)
    データベースのデータをテーブルとして抽象化して扱わずに、その中のファイルを直接読み書きすることができます。
    高速な一方で、SQLと1対1で理解しようとすると難しかったです。

まとめ

普段使っているJavaなどと比べると、RPGのプログラムは様々な経緯から読みづらく感じることが多くありました。
ただ、そのおかげでプログラミング言語の進歩を感じることができ、個人的には読む経験ができてよかったと感じています。

(2018年7月28日 Update)