SlimeCL — AS/400 制御言語(CL)の近代化
CL は IBM i(AS/400)現場を束ねる「糊」です。SlimeCL はそれを可搬な bash や単一バイナリの Rust に変換し、オーケストレーション層の挙動を保ったまま汎用ハードウェア上で動かします。
制御言語(CL)は、変数・ファイルの宣言、RPG / COBOL プログラムの呼び出し、ジョブ投入、メッセージ監視、バッチ全体の流れの制御を担います。 IBM i 資産の近代化ではアプリ本体には手が入っても、現場を一枚で支えている CL は誰も触りたがらない部分です。 SlimeCL は CL を忠実に読み取り、レビュー可能なコードへ再表現します。ジョブ/プロセス層を 「移行」ではなく「継続」で前へ進めます。
RCVF のレコード I/O、MONMSG のメッセージ監視)は現状プレースホルダで、コマンド網羅は corpus ごとに拡張中です。
磨かれた約束ではなく、実際の状態を公開します。
現在地
全て実装済み(Phase 0)
(dispatcher 方式、Java は将来の選択肢)
レキサ + IR + emit(コンパイル&実行含む)
variant 自動判別
静的実行ファイル(ランタイム不要)
監査可能・再現可能
CL1 → CL2 → CL6 パイプライン
SlimeCL は、JAVATEL のトランスパイラ製品群で実証済みの段構成(レキサ → 言語非依存の Slot IR → ターゲットエミッタ)を踏襲します:
+・- 継続 / ラベル / KWD(値) / OPM・ILE 判別pc 状態機械で2 ターゲット、ひとつの忠実なモデル
CL は GOTO を持つラベル付き文の言語です。bash にも安全な Rust にも GOTO はありません。
SlimeCL はそれを近似せず、小さなプログラムカウンタ(pc)状態機械で 厳密に再現します。各ラベルが分岐アーム、GOTO が次ラベルを設定、フォールスルーは明示。制御フローを推測せず保存します。
| ターゲット | 得られるもの |
|---|---|
| bash | CL のコマンド連携的な性質に最も 1:1。読める・レビューできる・今すぐ任意の Linux で動く。CHGVAR → 代入 / $(( )) 算術、IF COND(…) → [ … ] テスト、SNDPGMMSG → printf。 |
| Rust | 単一の静的バイナリ、ランタイム不要 — ハード非依存を最も強く打ち出せる。DCL から型推論:*DEC → i64/f64、*CHAR → String、*LGL → bool。 |
エンドツーエンド 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(…)、ELSE、DO/ENDDOブロック、GOTO+ ラベル - ロジック / 呼出
CHGVARの代入・式、CALL PGM(…) PARM(…)、RETURN - メッセージ(解析)
MONMSG、SNDPGMMSG— IR に取り込み済み、実行時モデル化はロードマップ - 字句の忠実性
/* */コメント、+/-行継続、引用符リテラル、&変数、*特殊値
ロードマップ
- 現在(Phase 0)CL1 レキサ + CL2 Slot IR + CL6 bash/Rust emit。自己完結プログラムは変換してそのまま動く
- 次CL2 の式解析(小数算術・文字列比較)、コマンド網羅拡張(
SBMJOB、OVRDBF、RTV*、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 製品 全製品
