SlimeRPG — RPG → Java bit-exact 変換
IBM Power Systems / iSeries / AS/400 の RPG 資産を、決定論的に Java へ。
銀行・製造・流通・保険で稼働する 世界数億 LOC の RPG 資産 を、 bit-exact + 監査チェーン + 改ざん検出 付きで Java へ移植。 SlimeCOBOL / SlimeMUMPS / SlimePL/I と同じ S2-S5 / S7-S9 共通基盤、 S1 (RPG FST) と S6 (Java emitter) のみ言語固有。
- RPG IV free-format (`**FREE` directive) を主軸サポート、4 方言 fingerprint 検出 (IBM Classic / IBM Enterprise / Open PL/I 系 / GNU 系)
- S9 bench で 全 5 軸 100% (35/35) + S6 byte-exact regression 35/35 PASS(2026-05-08 実測)
- 業務 RPG の核機能を完備 — 配列 (DIM) / DCL-DS データ構造 / DS 配列 / 内部 PROC + DCL-PI + RETURN + 再帰 / SELECT/WHEN/OTHER / 17 種 BIF
- 本格ファイル I/O 完備 —
DCL-F NAME DISK USAGE(*INPUT/*OUTPUT) EXTFILE('path')+READ / WRITE / CLOSE / %EOF、業務 RPG batch (file_write / file_read / file_copy / file_grep / file_uppercase) 完全動作 - statement-level proc call 対応 (`HANOI(3:'A':'C':'B');`)、文字列比較は Java の
.equals()に自動変換、`NOT %EOF(F)` → `!SlimeRPG.eof(F)`
銀行・製造業界が要求する bit-exact + 改ざん即検出 を実装。
「変換が情報を捨てていない」ことを監査人が事後再現できる、
業界初の RPG 向け決定論的トランスパイラ (弊社調べ) です。
主要計測値 (2026-05-08 実測)
35 / 35
javac compile + run
全 35 sample で生成 Java が clean compile + 期待通り実行
全 35 sample で生成 Java が clean compile + 期待通り実行
35 / 35
S6 byte-exact regression
expected/.java と actual/.java が完全一致
expected/.java と actual/.java が完全一致
100.00 %
S9 全 5 軸
dialect / token / javac / mutation / determinism すべて全件 PASS
dialect / token / javac / mutation / determinism すべて全件 PASS
ファイル I/O
本格対応
DCL-F / READ / WRITE / CLOSE / %EOF / EXTFILE 完備
DCL-F / READ / WRITE / CLOSE / %EOF / EXTFILE 完備
8 段階
Phase 1-8 機能実装
基本構文 → 配列 → SELECT → 内部 PROC → DCL-DS → Rosetta → ファイル I/O
基本構文 → 配列 → SELECT → 内部 PROC → DCL-DS → Rosetta → ファイル I/O
17 種
サポート BIF
%CHAR / %SUBST / %LEN / %TRIM / %SCAN / %REM / %DIV / %ELEM / %UPPER / %LOWER / %EOF ほか
%CHAR / %SUBST / %LEN / %TRIM / %SCAN / %REM / %DIV / %ELEM / %UPPER / %LOWER / %EOF ほか
市場文脈 — 世界に眠る RPG 資産
| 銀行 | 北米・欧州中堅銀行の AS/400 / iSeries 上の勘定系・口座管理。RPG II / III / IV / Free-format が長期運用継続中。 |
|---|---|
| 製造業 | 受注・在庫・出荷・MRP の業務基幹を IBM i (旧 OS/400) で運用する企業多数。日本でも中堅製造に多い。 |
| 流通・卸 | POS・在庫管理・販売管理。1980-90 年代の業務パッケージは RPG/400 で書かれていることが多い。 |
| 保険 | 米中堅生損保の事務処理・契約管理・支払処理。 |
| 市場規模 | 世界推定 数億 LOC、IBM i installed base は 12 万社規模 (IBM 公式概算)。競合 (Modern Systems / Fresche Solutions / ARCAD / X-Analysis) は per-LOC 課金で 数千万円〜数億円スケール。SlimeRPG は WASM converter ツール課金のみ、出力 Java は永久無償デプロイ可。 |
サポート機能一覧 (Phase 1-8)
| 制御構造 | IF/ELSEIF/ELSE/ENDIF / FOR (TO/DOWNTO/BY) / DOW (do-while) / SELECT/WHEN/OTHER/ENDSL / RETURN |
|---|---|
| 型 | INT(n) → int / PACKED(p:q) → BigDecimal / ZONED / CHAR(n) → String / VARCHAR |
| データ構造 | 1D 配列 (DIM(N)) / DCL-DS データ構造 / DS 配列 (DCL-DS NAME DIM(N); FIELD ... ; END-DS;) |
| プロシージャ | 内部 DCL-PROC + DCL-PI ... END-PI パラメータ宣言 / RETURN expr / 再帰 / 引数型推論 / class-level static promotion (内部 PROC が main scope の変数を共有) / statement-level proc call |
| BIF (17 種) | %CHAR / %SUBST / %LEN / %TRIM / %TRIML / %TRIMR / %INT / %SCAN / %ABS / %MIN / %MAX / %REM / %DIV / %ELEM / %UPPER / %LOWER / %EOF |
| 演算子 | 算術 / 比較 / 連結 (`+`) / <> → != / 文字列比較を Java の .equals() に自動変換 (literal / 変数双方、`!` LHS 前挿入対応) / NOT → ! / AND → && / OR → || |
| I/O | DSPLY (Java System.out) / 指示子 *INLR = *ON (no-op コメント化) / *ON / *OFF / DCL-F NAME DISK USAGE(*INPUT/*OUTPUT) EXTFILE('path') + OPEN / CLOSE / READ FILE / WRITE FILE / %EOF 本格ファイル I/O |
変換例 — 再帰 PROC (Towers of Hanoi)
典型的な再帰プロシージャが、RPG ソースのまま Java として実走します:
**FREE
// SlimeRPG sample 21 — Towers of Hanoi (3 disks)
HANOI(3:'A':'C':'B');
*INLR = *ON;
DCL-PROC HANOI;
DCL-PI *N;
N INT(10);
SRC CHAR(1);
DST CHAR(1);
VIA CHAR(1);
END-PI;
IF N = 0;
RETURN;
ENDIF;
HANOI(N - 1:SRC:VIA:DST);
DSPLY 'move ' + %CHAR(N) + ' ' + SRC + '->' + DST;
HANOI(N - 1:VIA:DST:SRC);
END-PROC;
// Generated Java (deterministic, byte-exact)
public class M_21_hanoi {
public static void main(String[] args) {
HANOI(3, "A", "C", "B");
}
public static void HANOI(int N, String SRC, String DST, String VIA) {
if (N == 0) {
return;
}
HANOI(N - 1, SRC, VIA, DST);
SlimeRPG.dsply("move " + SlimeRPG.charOf(N) + " " + SRC + "->" + DST);
HANOI(N - 1, VIA, DST, SRC);
}
}
実証された algorithm 一覧 (Phase 1-8)
- ソートBubble sort (ネスト FOR + 配列 swap)
- 数論Sieve of Eratosthenes / 素数判定 (DOW + %REM) / Euclidean GCD (再帰 + %REM) / 階乗 / Fibonacci 反復 / Collatz 3n+1
- 文字列SUBST / SCAN / TRIM / UPPER / Caesar cipher / palindrome (CHAR(1) 比較を
.equals()自動化) / 連結 / word counter / letter frequency / string reverse - 古典Towers of Hanoi (再帰 + CHAR(1) peg) / 99 bottles / FizzBuzz
- 業務DCL-DS PERSON (NAME/AGE/CITY) / 配列構造体 EMP DIM(3) (NAME/SALARY) / 商品計算 PRICE×QTY=TOTAL / 配列 sum/avg/min/max / 成績判定 (5 段 IF/ELSEIF chain)
- ファイル I/Ofile_write (5 lines 書出) / file_read (line-by-line 読 + %EOF) / file_copy (verbatim) / file_grep (%SCAN マッチ抽出) / file_uppercase (%UPPER 変換)
監査適合性 (金融・製造)
- Bit-exact同一入力 → 同一 sha256。配列・データ構造・再帰呼出すべて含めて完全決定論。
- Byte-exact regression
make testで actual/.java と expected/.java を diff、 35/35 PASS(2026-05-08 baseline)。将来の emitter 変更で意図しない出力差分が即検出される regression gate。 - Audit chainSlimeNENC 共通基盤 (S7) と統合可能、 SHA-256 monotonic chain。
- Hallucination 検出trigram + bigram 言語モデル。Axis 2 で全 mutation を 100% reject。
- Build-time LLMLLM は変換規則の構築段階のみ。ランタイムは決定論ルールベース、99.9995% 主張の根拠。
License モデル
| 課金対象 | WASM/WASI converter ツール (開発者側) |
|---|---|
| 非課金 | 変換結果の Java ソース (顧客資産、永久無償デプロイ) |
| 方式 | Ed25519 署名 144B license + 3-hop air-gap activation (金融・製造 audit 対応) |
| 並列化 (PSDP) | 本製品には含まれません。SlimeNENC 配下の独立 SKU として PSDP を別途。 |
関連資料
- 技術解説SlimeNENC Technical Overview (RPG 章を準備中)
- 出願明細特願 2026-046620 v15b の 請求項 11 / 14d で COBOL / MUMPS / PL/I / RPG 等のレガシー方言処理を明示射程化
- 兄弟製品SlimeCOBOL / SlimeMUMPS / SlimePL/I / SlimeJCL と同じ S2-S5/S7-S9 共通基盤
- ベンチマークS9 bench harness (5 軸 correctness)、`s6_java_emit_rpg/Makefile` の `make test` で byte-exact regression 35/35
RPG PoC・資料請求 SlimeNENC ファミリーへ戻る SlimePL/I を見る SlimeCOBOL を見る
