Phase 0 プロトタイプ・early access・独立プロダクト

SlimeCL — AS/400 制御言語(CL)の近代化

CL は IBM i(AS/400)現場を束ねる「糊」です。SlimeCL はそれを可搬な bash や単一バイナリの Rust に変換し、オーケストレーション層の挙動を保ったまま汎用ハードウェア上で動かします。

制御言語(CL)は、変数・ファイルの宣言、RPG / COBOL プログラムの呼び出し、ジョブ投入、メッセージ監視、バッチ全体の流れの制御を担います。 IBM i 資産の近代化ではアプリ本体には手が入っても、現場を一枚で支えている CL は誰も触りたがらない部分です。 SlimeCL は CL を忠実に読み取り、レビュー可能なコードへ再表現します。ジョブ/プロセス層を 「移行」ではなく「継続」で前へ進めます。

ステータス:これは正直な Phase 0 プロトタイプです。 レキサ → IR → エミッタの全パイプラインを実装・自己テスト済みで、エンドツーエンドの動く demo(下記)があります。 ただし まだ GA 製品ではありません:ファイル駆動の実行時意味論(RCVF のレコード I/O、MONMSG のメッセージ監視)は現状プレースホルダで、コマンド網羅は corpus ごとに拡張中です。 磨かれた約束ではなく、実際の状態を公開します。

現在地

3 段
CL1 レキサ → CL2 Slot IR → CL6 エミッタ
全て実装済み(Phase 0)
2 ターゲット
CL6 が bashRust を生成
(dispatcher 方式、Java は将来の選択肢)
15 / 15
自動テスト通過
レキサ + IR + emit(コンパイル&実行含む)
OPM + ILE
CLP(OPM)/ CLLE(ILE)
variant 自動判別
単一バイナリ
Rust ターゲットは 1 つの
静的実行ファイル(ランタイム不要)
Rust + WASM
自社スタック:外部ライブラリ非依存
監査可能・再現可能

CL1 → CL2 → CL6 パイプライン

SlimeCL は、JAVATEL のトランスパイラ製品群で実証済みの段構成(レキサ → 言語非依存の Slot IR → ターゲットエミッタ)を踏襲します:

CL レキサコメント / +- 継続 / ラベル / KWD(値) / OPM・ILE 判別
Slot IRPGM パラメータ、DCL/DCLF、ラベル区切りセグメント、入れ子 IF / DO
エミッタSlot IR → bash / Rust(dispatcher)、GOTO は pc 状態機械で

2 ターゲット、ひとつの忠実なモデル

CL は GOTO を持つラベル付き文の言語です。bash にも安全な Rust にも GOTO はありません。 SlimeCL はそれを近似せず、小さなプログラムカウンタ(pc)状態機械で 厳密に再現します。各ラベルが分岐アーム、GOTO が次ラベルを設定、フォールスルーは明示。制御フローを推測せず保存します。

ターゲット得られるもの
bashCL のコマンド連携的な性質に最も 1:1。読める・レビューできる・今すぐ任意の Linux で動く。CHGVAR → 代入 / $(( )) 算術、IF COND(…)[ … ] テスト、SNDPGMMSGprintf
Rust単一の静的バイナリ、ランタイム不要 — ハード非依存を最も強く打ち出せる。DCL から型推論:*DECi64/f64*CHARString*LGLbool

エンドツーエンド demo(実際の出力)

GOTO ループで 1..&N を合計する自己完結 CL を、bash に変換してそのまま実行:

/* COUNTDOWN - 1..&N を合計、ファイル/CALL なし */
             PGM        PARM(&N)
             DCL        VAR(&SUM) TYPE(*DEC) LEN(10 0) VALUE(0)
 LOOP:       IF         COND(&I *GT &N) THEN(GOTO CMDLBL(DONE))
             CHGVAR     VAR(&SUM) VALUE(&SUM + &I)
             GOTO       CMDLBL(LOOP)
 DONE:       SNDPGMMSG  MSG(&SUM)
             ENDPGM

# → slimecl --emit bash countdown.clp  →  Linux で実行:
#   bash countdown.sh 5    → 15
#   bash countdown.sh 100  → 5050
# Rust ターゲットは同じ結果を単一の静的バイナリで生成。

現時点で読める CL

  • プログラム構造PGM / ENDPGM、パラメータ、DCL(型付き変数)、DCLF(ファイル宣言)
  • 制御フローIF COND(…) THEN(…)ELSEDO/ENDDO ブロック、GOTO + ラベル
  • ロジック / 呼出CHGVAR の代入・式、CALL PGM(…) PARM(…)RETURN
  • メッセージ(解析)MONMSGSNDPGMMSG — IR に取り込み済み、実行時モデル化はロードマップ
  • 字句の忠実性/* */ コメント、+/- 行継続、引用符リテラル、& 変数、* 特殊値

ロードマップ

  • 現在(Phase 0)CL1 レキサ + CL2 Slot IR + CL6 bash/Rust emit。自己完結プログラムは変換してそのまま動く
  • CL2 の式解析(小数算術・文字列比較)、コマンド網羅拡張(SBMJOBOVRDBFRTV*CRT*/DLT*)
  • その後RCVF レコード I/O、MONMSG メッセージ監視・データキューの実行時モデル化 → ファイル駆動 CL もエンドツーエンドで実行可能に
  • 検証CL corpus + clean-lex ベンチ、正直な合格率の段階表示(lex / IR / emit / run)で公開 — 製品群共通の透明性方針

提供形態

ステータスPhase 0 プロトタイプ — パイプライン完成・動く demo あり、GA 前
対象AS/400 / IBM i 制御言語(OPM CLP / ILE CLLE)
ターゲットbash(現状)、Rust 単一バイナリ(現状)、Java は検討中
関わり方お手元の CL での early-access PoCお問い合わせください。価格・GA は PoC 検証後に確定します。

関連製品

early-access PoC を相談する SlimeJCL(メインフレーム JCL) LANGUAGE 製品 全製品