SlimePL/I — PL/I → Java bit-exact 変換
保険・銀行・航空のメインフレーム PL/I 資産を、決定論的に Java へ。
IBM Enterprise PL/I / Open PL/I (Workday・Micro Focus) / Iron Spring / GnuPLi で稼働する 世界数千万 LOC の PL/I 資産 を、 bit-exact + 監査チェーン + 改ざん検出 付きで Java へ移植。 COBOL / MUMPS と同じ S2-S5 / S7-S9 共通基盤、S1 (PL/I FST) と S6 (Java emitter) のみ言語固有。
- 5 方言を自動検出 (IBM Classic / IBM Enterprise / Open PL/I / Iron Spring / GnuPLi)
- S9 bench で 全 5 軸 100% (60/60) + S6 byte-exact regression 60/60 PASS(2026-05-08 実測)
- 業務 PL/I の必須機能を完備 — 配列 / 2D 配列 / 構造体 / 配列構造体 / 内部 PROC + RETURNS + 再帰 / SELECT/WHEN / DO WHILE/BY / 25+ BUILTIN
- stdin GET LIST + ON ENDFILE 例外処理 + ファイル I/O (DCL FILE INPUT/OUTPUT TITLE / OPEN / CLOSE / READ FILE INTO / WRITE FILE FROM) 完動
金融・航空業界が要求する bit-exact + 改ざん即検出 を実装。
「変換が情報を捨てていない」ことを監査人が事後再現できる、
業界初の PL/I 向け決定論的トランスパイラ (弊社調べ) です。
主要計測値 (2026-05-08 実測)
60 / 60
javac compile + run
全 60 sample で生成 Java が clean compile + 期待通り実行
全 60 sample で生成 Java が clean compile + 期待通り実行
60 / 60
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
5 方言
自動検出
IBM Classic / Enterprise / Open PL/I / Iron Spring / GnuPLi
IBM Classic / Enterprise / Open PL/I / Iron Spring / GnuPLi
12 段階
Phase 1-12 機能実装
基本構文 → Rosetta 風 algorithm → stdin/ファイル I/O 完備
基本構文 → Rosetta 風 algorithm → stdin/ファイル I/O 完備
25+ 種
サポート BUILTIN
SUBSTR / LENGTH / INDEX / TRIM / UPPER / SQRT / EXP / DATE / TIME ほか
SUBSTR / LENGTH / INDEX / TRIM / UPPER / SQRT / EXP / DATE / TIME ほか
市場文脈 — 世界に眠る PL/I 資産
| 保険業界 | 米大手生損保・再保険、SAS / IBM Enterprise PL/I の業務ロジック層に依然として PL/I コード稼働中。COBOL より構造化志向で計算系・統計系に多用。 |
|---|---|
| 銀行・金融 | 欧米主要銀行のリスク計算・トランザクション基盤、特に欧州 (HSBC / Barclays / Deutsche Bank 等の一部) で PL/I の長期運用継続。 |
| 航空・予約 | SABRE / Amadeus 等の予約系基幹は 1970-80 年代の PL/I 由来コードを抱える。リアルタイム性と複雑な構造体処理が PL/I の得意領域。 |
| 政府・公的 | 米国 IRS、英国 NHS の一部、その他公的機関の長期保守システム。 |
| 市場規模 | 世界推定 数千万 LOC、保守コスト年間数十億ドル規模。競合 (TSRI JANUS / Astadia / SoftwareMining) は per-LOC 課金で数千万円〜億円スケール。SlimePL/I は WASM converter ツール課金のみ、出力 Java は永久無償デプロイ可。 |
5 方言の自動検出
S1 PL/I FST が方言別 fingerprint で識別、後続パイプラインに dialect meta を伝搬:
| IBM Classic | PROCEDURE OPTIONS (MAIN) / PROC OPTIONS 形式 |
|---|---|
| IBM Enterprise PL/I | REENTRANT / REORDER 属性、現代の z/OS PL/I で主流 |
| Open PL/I | Workday (旧 Liant) / Micro Focus、OPENPLI マーカー |
| Iron Spring | Linux 上の独立 PL/I 処理系、IRONSPRING マーカー |
| GnuPLi | GNU フリー実装、/* GNUPLI */ マーカー |
サポート機能一覧 (Phase 1-12)
| 制御構造 | IF/THEN/ELSE / SELECT/WHEN/OTHERWISE / DO TO BY (正負両方) / DO WHILE / nested 構造 |
|---|---|
| 型 | FIXED / FIXED DECIMAL(p,q) → BigDecimal / FLOAT → double / CHAR(n) → String |
| データ構造 | 1D 配列 / 2D 配列 / 構造体 (DCL 1 ... 2 ...) / 配列構造体 (DCL 1 ITEM(N), 2 ...) |
| PROC | 内部 PROC / CALL / RETURN / RETURNS (FIXED/FLOAT/CHAR) / 再帰 / 引数型推論 / main scope DCL の class-level static promotion (内部 PROC 共有) |
| BUILTIN (25+) | SUBSTR / LENGTH / INDEX / TRIM / UPPER / LOWER / ABS / MAX / MIN / MOD / REPEAT / VERIFY / TRANSLATE / ROUND / FLOOR / CEIL / SQRT / EXP / LOG / SIN / COS / TAN / ATAN / DATE / TIME |
| 演算子 | 算術 / 比較 / 論理 & | / 連結 || / 文字列比較を Java の .equals() に自動変換 (literal / 変数双方) |
| 入出力 | PUT LIST / PUT SKIP LIST / GET LIST (stdin) / ON ENDFILE (try/catch wrap) / ファイル I/O (DCL FILE INPUT/OUTPUT TITLE / OPEN / CLOSE / READ FILE INTO / WRITE FILE FROM) |
変換例 — 業務 batch プログラム
典型的な「ファイル読込 → 加工 → ファイル書出」パターンが、PL/I そのままで Java として実走します:
/* PL/I source — file copy with ON ENDFILE */
FC: PROCEDURE OPTIONS (MAIN);
DCL IN FILE INPUT TITLE('/tmp/pli_in.txt');
DCL OUT FILE OUTPUT TITLE('/tmp/pli_copy.txt');
DCL LINE CHAR(200);
DCL DONE FIXED;
DCL N FIXED;
OPEN FILE(IN);
OPEN FILE(OUT);
ON ENDFILE(IN) DONE = 1;
DONE = 0; N = 0;
DO WHILE (DONE = 0);
READ FILE(IN) INTO (LINE);
IF DONE = 0 THEN
DO;
WRITE FILE(OUT) FROM (LINE);
N = N + 1;
END;
END;
CLOSE FILE(IN);
CLOSE FILE(OUT);
PUT LIST ('copied', N, 'lines');
END FC;
// Generated Java (deterministic, byte-exact)
public class M_58_file_copy {
public static void main(String[] args) {
SlimePLI.PLIFile IN = SlimePLI.openInput("/tmp/pli_in.txt");
SlimePLI.PLIFile OUT = SlimePLI.openOutput("/tmp/pli_copy.txt");
String LINE = "";
int DONE = 0, N = 0;
while (DONE == 0) {
try {
LINE = SlimePLI.readFile(IN);
} catch (SlimePLI.PLIEof __eof) {
DONE = 1;
}
if (DONE == 0) {
SlimePLI.writeFile(OUT, LINE);
N = N + 1;
}
}
SlimePLI.closeFile(IN);
SlimePLI.closeFile(OUT);
SlimePLI.putList("copied", N, "lines");
}
}
実証された algorithm 一覧 (Phase 1-12)
- ソートBubble sort / Quicksort (再帰、内部 PROC が main の配列を共有)
- 数論Sieve of Eratosthenes (素数列挙) / 素数判定 / Euclidean GCD (再帰) / 階乗 / Fibonacci 反復
- 文字列word counter / 文字列 reverse / Palindrome 判定 / Caesar cipher / 文字頻度 / CSV parser
- 古典Towers of Hanoi (再帰) / 99 bottles / FizzBuzz / Collatz 3n+1 sequence
- 数値計算Leibniz 級数 π 推定 (1000 terms) / 配列 sum/avg/min/max / 行列 trace / running max
- 業務payroll (構造体配列 + RETURNS 関数 + 残業計算) / grade book (5 段 IF/ELSE chain) / file copy / file grep / file uppercase
監査適合性 (金融・航空)
- Bit-exact同一入力 → 同一 sha256。配列・構造体・再帰呼出すべて含めて完全決定論。
- Byte-exact regression
make testで actual/.java と expected/.java を diff、 60/60 PASS(2026-05-08 baseline)。将来の emitter 変更で意図しない出力差分が即検出される regression gate。 - Audit chainRAM 内 SHA-256 monotonic chain。append-only、過去削除しない。SlimeNENC 共通基盤 (S7) に直接接続。
- Tamper detection変換結果の record blob を 1 byte flip で書き換えたとき、verify_chain() が必ず DETECTED。
- 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 (PL/I 章を準備中)
- 出願明細特願 2026-046620 v15b の 請求項 11 (レガシー方言の最小文脈制約)、請求項 14d (COBOL / MUMPS / PL/I 等の処理系間変換) で PL/I を明示射程化
- 兄弟製品SlimeCOBOL / SlimeMUMPS / SlimeJCL と同じ S2-S5/S7-S9 共通基盤
- ベンチマークS9 bench harness (5 軸 correctness)、`s6_java_emit_pl1/Makefile` の `make test` で byte-exact regression 60/60
PL/I PoC・資料請求 SlimeNENC ファミリーへ戻る SlimeCOBOL を見る SlimeMUMPS を見る
