SlimeCL — AS/400 制御言語(CL)の近代化
CL は IBM i(AS/400)現場を束ねる「糊」です。SlimeCL はそれを可搬な bash や単一バイナリの Rust に変換し、オーケストレーション層の挙動を保ったまま汎用ハードウェア上で動かします。
制御言語(CL)は、変数・ファイルの宣言、RPG / COBOL プログラムの呼び出し、ジョブ投入、メッセージ監視、バッチ全体の流れの制御を担います。 IBM i 資産の近代化ではアプリ本体には手が入っても、現場を一枚で支えている CL は誰も触りたがらない部分です。 SlimeCL は CL を忠実に読み取り、レビュー可能なコードへ再表現します。ジョブ/プロセス層を 「移行」ではなく「継続」で前へ進めます。
レガシー資産(古い言語のプログラム)を、意味を変えずに現代へ運ぶ製品です。ふつうの書き直しは気づかぬうちに中身がズレて事故になりますが、意味を解釈せず「骨組み(構造)」だけをそのまま写すので計算の中身が元と変わりません。動くことを"証明"してから渡すので移行の不安が消えます。写せる所だけ正直に写し、できない所は隠さず分けます。
手で書き直すと、数値計算や例外の細かな違い(境界条件)で挙動がズレ、その確認(新旧比較テスト)に膨大な人件費がかかります。言語特有のトラップまで忠実に写し、差分テストで「ズレゼロ」を実証、独立した参照実装で裏付け。成果物は人手の UAT でなく機械検証可能な「振る舞い不変の証明書」。誇張せず、対応できない部分は隠しません。
ソースを Slot IR(言語非依存の構造中間表現)へ射影し、構造を保存したままターゲットへ転写。静的に決まる核は bit-exact に、動的・状態依存は隔離帯へ正直に分離(isolate, don't confabulate)。差分ファジング + 適用可能箇所での形式手法で裏付け、第三者が手元で再現できる決定論的検証を提供します。
意味論でなく一意な構造として射影(π)。primitives はビットベクタ理論で厳密化し全入力で形式検証、合成・ループ等は Csmith 流差分ファジングで担保する二層保証。再現しない計算は意味同値+収束+残差の③層へ。「形のある所は bytes で、形のない所は意味で。どちらの面でも嘘をつかない」 ― SlimeNENC の机。
📋 「このレベルで AI に質問」= 選んだ解像度に合った指示つきで、このページの解説をコピーします。お手元の AI(Claude · GPT · Gemini · Grok 等)に貼れば、その目線でさらに深掘りできます。
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 製品 全製品
