RPG

567. ILE-RPGとは

IBM はRPG II, RPG III に続いて2000年ごろにILE-RPGを
リリースしたがこれは単にRPG III のリリース・アップではない。

[オブジェクト指向]

オブジェクト指向とは信頼できる品質保証された
(複数個の)オブジェクトを再利用して新しいオブジェクトとして
作成または動作させることである。
RPG で作成されたモジュールとC言語で作成されたサービス・プログラムを
混在させてひとつのプログラムに作り上げることができる。
例えばバグがなく十分テスト済みのC言語のソービス・プロク゜ラム(*SRVPGM)を
RPGでバインドして新しいプログラムとすることができる。

このように品質保証されたオブジェクトの再利用によって
・開発工数の激減
・ソフトウェア品質の向上
・ソフトウェア管理体制
・複数の言語による統一

などを目指すことができるようになった。


①メイン・ルーチンがある

IBM iの開発者にとってメイン・ルーチンがあるのは当たり前ではないかと
 思うかも知れないが最近のオープン系の開発言語では
 メイン・ルーチンは無くイベント駆動型のプログラムとなっている。
RPGを紹介しているYouTube動画もあるがきまってRPGにメイン・ルーチンがあることが
特徴であるとは取り上げていない。
それは動画の制作者がRPGしか知らないからである。
RPGしか知らない製作者がRPGを知らない読者にRPGいくら説得しても
理解できないのは当たり前である。
 
 
このことが他言語から来た開発者がRPGをわかりにくいと評価している点である。
 しかし他言語でイベント駆動型の言語にはメイン・ルーチンが本当に無いかと
言うとそうではない。言語の開発会社によってメイン・ルーチンが隠蔽されて
いるだけの話である。
 元々どの言語にもメイン・ルーチンは存在していたのだが
Microsoftがメイン・ルーチンを隠蔽してイベント駆動の
プログラム体系をVisualXX として作り上げただけのことである。
 Java, C++,VC++, VisualBasic などにはメイン・ルーチンは無いが
C言語、Pythonなどにはメイン・ルーチンは存在するし必要である。
イベント駆動型はボタンを押したとか人的操作によるイベントが
発生したときにそれに呼応する関数を記述する方法である。
 従ってフロー的なことはプログラマーはあまり考えないので
開発はやさしくはなるが論理思考のプログラマーは
 育たない。
 またPHPやJSP& Servletのようにインターフェースとプログラムが
同時に混在しているような言語も一見やさしいのだが
企業法人が使うような業務処理は複雑になってしまって
 実用レベルの開発はできない。
おまけにオープン系のデータ・ベースはSQLベースがほとんどであって
複数のユーザーが同時に使うなどとは考えられて設計されていない。
実稼働を始めるとあちこちの部門から電話が殺到することになる。
PHP や JSPは学習用の言語と心得るべきである。
PHPだけの開発経験ではあまり役には立たないだろう。


②オブジェクト指向

これはWindowsと比較するとよく理解できる。

 

システム プログラム サービス・プログラム
IBM i *PGM *SRVPGM
Windows .exe .dll

サービス・プログラム(*SRVPGM)はそれ自体では
起動して動作できないがプログラム(*PGM)から
呼び出されてバインドして使用されるオブジェクトである。
これはWindowsの場合の .exeと .dll と同じ関係にある。
*PGM や *SRVPGM の開発言語は何でもよい。
異なった言語のプログラムも自由に結合して使うことができる。
既に正しく動作することが確認できている品質保証された
オブジェクトどうしを組み合わせて新しいオブジェクトとして
動作させることが短期間で高品質なプログラムの開発につながるという
考え方がオブジェクト指向の目的である。
YouTubeなどで何度も書くのが面倒だからと解説している動画は
筋違いで的外れな説明であり動画制作者がオブジェクト指向を理解していない。
再利用可能なオブジェクトで構成することをオブジェクト指向と呼ぶ。


③IBM i5/OS もオブジェクト指向

 実はILE-RPGの命令もサービス・プログラムの関数としてEXPORTされている。
 すなわちILE-RPG自身もオブジェクト指向として構成されている。
したがって別の開発言語からILE-RPGを構成しているサービス・プログラムを
参照するようにすればILE-RPGと同じ動作を別の言語でも再現することが
できる。
このRPGを構成しているサービス・プログラムを別の言語でもバインドしてやれば
RPGと同等のオブジェクトを作ることができる。
Pythonでこれを応用したものがPython.400のAS400エンジンである。
AS400エンジンをバインドしたPythonプログラムはRPGと同じ動作原理で
動くのでRPGと同じ品質とパフォーマンスを期待することができる。

 
 
 余談であるがかつて流行した4GLの開発ツールがあったが
あの4GLの命令は実はコマンドでできている。
従ってコマンド実行のプログラムをすべて同じ活動家グループとして
作成してやれば4GLで書いたソースはコンパイルも必要なく
 素早いパファーマンスで動作するはずであるが
オーストラリアの開発元はまだそこまでILEのアーキテキチャーを
理解してしなかったので恐ろしく莫大なRPGソースに展開してパフォーマンスの悪い
プログラムを生成している。
海外のこのような生成ツールは何でも力づくで強引にやってしまうようで
 スマートさやエレガンスに欠けている。
また自分だけのプラットフォームを作成しようとしたりして
 ユーザビリティを全く考えていない重いだけの製品であることが多い。


④フリー・フォーマット

ILE-RPG の進化の結果としてフリー・フォーマットがサポートされるようになった。
それまでのRPGは固定フォーマットでありインデントされないのも
大きな特徴のひとつであった。
そこでフリー・フォーマットや組込み関数も導入された。
このように進化しただけあって良くできた言語であって
直観的なコーディングが可能であるのでストレスなく書きやすくなっている。
ただしフリー・フォーマット(=FFRPG)化するのも演算部分だけであり
ファイル仕様書や入力仕様書までフリー・フォーマットするメリットはない。
演算仕様書をフリー・フォーマットで記述すると構造化プログラミングが
可能になるので見た目にも第三者にもわかりやすく読みやすい記述となる。
このように開発言語が進化するという例は他の言語ではあまり例を見ない。
Javaではバグは残ったままである。


⑤ 動いてしまう

今までRPGで開発していた人が
オープン系のJava, VC++, VB++ などを使って開発を始めると
動作させてもたちまちアベンドの繰り返しとなって
ほとんど前に進まないだろう。
それで「誰だ、オープンがいいと言ったのは?!」
ということになる。
今まで当たり前と思っていたことはWindowsの世界ではたちまち
動かなくなってしまう。
例えばRPGプログラムを起動した途端、文字フィールドはブランクで
数字フィールドは自動的にゼロ埋めされており
ソーン10進数やPACK10進数もそれなりの正しいゼロとして
開始する。
なんだそんなことは当たり前ではないかと思われるかも
しれないがWindowsではこうはいかない。
自分でゼロ・リセットしておかないと数字には0xcxcx,…. が
埋められておりたちまちエラーとなってブログラムは停止してしまう。
他も同様で動作させるたびにあちこちでエラーが
発生してなかなか前には進まない。
数字の右寄せひとつとっても苦労することになる。
このようにRPGだけの長年の経験者がオープン系の言語で開発すると
たちまちトラブルだらけになることは間違いない。
5年も10年もオープン系に移行しようとして失敗している例は
あちこちにある。
しかしRPGはSFLのセットなど少々まちがっていてもそれなりに
動作してしまうのである。
コンパイルさえ通ればそこそこに動いてしまう。
こんな簡単に動作する開発言語は他にはない。
これによって社内でバグばかり出しているユーザーもいた。
エラーも出ずが動作してしまうのでエンド・ユーザーにリリースすると
今度は別の不具合が出るのは当然である。
このように少し間違っていても動作してしまうのがIBM iであって
ある意味いいのかもしれないが怖い面もある。
しかしこのレベルでソフトウェア製品としてリリースしている
ソフトウェア会社もある。
筆者は一度だけむちゃくちゃなRPGソースを見たことがあるが
それでも動いているとのことであった。
( ただしこの担当者は地方に左遷されてしまった。あまりにもトラブルが
多かったからだ。しかしブログラムは動くこと動いていた)


…以上のようにILE-RPGの特徴は

・メイン・ルーチンがある

・オブジェクト指向

・フリー・フォーマット

・ミスしても動いてしまう

ということである。
オープン系の言語に比べて高い品質でやさしく記述できることは
間違いない。
特にILE-RPGの演算仕様書だけでも少しずつフリー・フォーマットに
することをお勧めする。