SlimeFORTRAN — FORTRAN → modern FORTRAN bit-exact 変換
NASA・気象庁・JAEA・大学研究室で稼働する FORTRAN 77 資産を、決定論的に modern FORTRAN へ。
HPC 数値計算コードの世代交代 を、人手レビュー前提のリファクタではなく、 bit-exact + 監査チェーン + 改ざん検出 で実行。 SlimeCOBOL / SlimeMUMPS / SlimePL/I / SlimeRPG と同じ S2-S5 / S7-S9 共通基盤、 S1 (FORTRAN FST) と S6 (modern FORTRAN emitter) のみ言語固有。
- F77 固定形式 (col 1-72) / F90 固定 / F90 自由形式 / IBM VS / DEC/VAX 5 方言 fingerprint 検出
- S9 bench で 全 5 軸 100% (25/25) + S6 byte-exact regression 25/25 PASS + gfortran compile 25/25 PASS(2026-05-08 実測)
- HPC F77 の核機能を完備 — SUBROUTINE/typed FUNCTION/RETURN/CALL/COMMON ブロック/SAVE/EXTERNAL/関数引数渡し/PARAMETER
- 本格ファイル I/O 完備 —
OPEN(UNIT=N, FILE=..., STATUS=...)+WRITE / REWIND / READ / CLOSE+WRITE(unit, label)形式 + numbered FORMAT 文 (`100 FORMAT('X=', I5, F8.2)`) - F66/F77 obsolescent 構文も完全互換 — 算術 IF (
IF (X) 10, 20, 30)、計算 GOTO (GOTO (10,20,30) X)、labeled CONTINUE → 構造化do/end do自動変換、IMPLICIT NONE自動付与
HPC 業界が要求する bit-exact + 改ざん即検出 + gfortran で 100% 通る出力 を実装。
「変換が情報を捨てていない」ことを監査人が事後再現できる、
業界初の FORTRAN 77 → modern FORTRAN 決定論的トランスパイラ (弊社調べ) です。
主要計測値 (2026-05-08 実測)
全 25 sample で生成 F2018 が clean compile + 期待通り実行
expected/.f90 と actual/.f90 が完全一致
dialect / token / gfortran / mutation / determinism すべて全件 PASS
基本構文 → SUBROUTINE/FUNCTION → CHARACTER/DO WHILE/2D 配列 → COMMON/SAVE/EXTERNAL → ファイル I/O / 算術 IF / 計算 GOTO
F77 fixed / F90 fixed / F90 free / IBM VS / DEC VAX
DO/CONTINUE → do/end do、 IMPLICIT NONE 自動、 識別子 lower-case、 .GT./.LT./.AND. → .gt./.lt./.and.
市場文脈 — 世界に眠る FORTRAN 資産
| 気象・地球物理 | ECMWF / 気象庁 / NOAA / NCAR の数値予報モデル (IFS / GFS / WRF)、地震・津波シミュレーション。コア部は 1980-90 年代 F77 で書かれ、保守継続中。 |
|---|---|
| 原子力・核物理 | JAEA / Sandia / Argonne の輸送計算 / 中性子拡散 / モンテカルロ。Fortran 77 + extension が 30 年以上の検証履歴を持つ。 |
| 計算化学・量子 | Gaussian / GAMESS / NWChem / VASP の原子・分子コード。Fortran 77/90 mix、HPC クラスタで OpenMP/MPI 並列。 |
| 気候・海洋 | POP / CCSM / MOM / NEMO 海洋大循環モデル、CESM 気候モデル。研究機関で長期気候予測に使用。 |
| 市場規模 | 世界推定 数十億 LOC、HPC TOP500 上位サイトの 60% 以上で稼働。競合 (NAG Fortran Modernization Tool / Plusoft / open-source fixed2free) は per-LOC 課金 数百万〜数千万 USD またはセマンティクス保証なし。SlimeFORTRAN は WASM converter ツール課金のみ、出力 modern FORTRAN は永久無償デプロイ可。 |
サポート機能一覧 (Phase 1-5)
| 制御構造 | IF/THEN/ELSE/ELSEIF/ENDIF / DO label V=a,b[,step] + label CONTINUE → 構造化 do/end do / DO WHILE (cond) / 算術 IF (IF (X) 10, 20, 30) / 計算 GOTO (GOTO (10,20,30), X) / GOTO label / STOP / RETURN |
|---|---|
| 型 | INTEGER / REAL / DOUBLE PRECISION / CHARACTER*N → character(len=N) / LOGICAL + .TRUE. / .FALSE. |
| データ構造 | 1D 配列 (INTEGER A(5) / DIMENSION A(5)) / 2D 配列 (INTEGER M(2,3)) / DATA 文初期化 (DATA A /1, 2, 3/) / PARAMETER 定数 |
| プロシージャ | SUBROUTINE NAME(params) + CALL NAME(args) / typed FUNCTION (INTEGER FUNCTION SQR(X)) / RETURN / 関数引数渡し (EXTERNAL F + F(X)) / INTRINSIC ABS, SQRT |
| 変数共有 | COMMON ブロック (COMMON /SHARED/ X, Y) / SAVE 属性 (CALL 間状態保持) |
| 演算子 | 算術 (`+ - * / **`) / 関係 (.EQ. .NE. .LT. .GT. .LE. .GE. → .eq. .ne. .lt. .gt. .le. .ge.) / 論理 (.AND. .OR. .NOT.) / 文字列連結 (//) / 識別子・キーワードを lower-case 自動正規化 |
| I/O | PRINT *, / WRITE(*,*) / 装置番号付き WRITE(unit, label) + READ(unit, label) / numbered FORMAT 文 (100 FORMAT('X=', I5)) / OPEN(UNIT=N, FILE='...', STATUS=...) + REWIND + CLOSE |
| 自動正規化 | IMPLICIT NONE 自動付与 (PROGRAM/SUBROUTINE/FUNCTION 直後) / 固定形式 col 1-72 切詰 + 6 列継続認識 / 識別子 lower-case 化 / 文字列内 case 保持 |
変換例 — 関数引数渡し (EXTERNAL + 高階関数)
典型的な HPC コードイディオムが、 F77 ソースのまま modern FORTRAN として実走します:
PROGRAM ETEST
EXTERNAL DBL
INTEGER DBL, APPLY, X
X = APPLY(DBL, 5)
PRINT *, 'RESULT=', X
END
INTEGER FUNCTION APPLY(F, X)
INTEGER F, X
EXTERNAL F
APPLY = F(X)
RETURN
END
INTEGER FUNCTION DBL(N)
INTEGER N
DBL = N * 2
RETURN
END
! Generated F2018 (deterministic, byte-exact) program etest implicit none external dbl integer :: dbl, apply, x x = apply (dbl, 5) print * , 'RESULT=', x end program integer function apply(f,x) implicit none integer :: f, x external f apply = f (x) return end function integer function dbl(n) implicit none integer :: n dbl = n * 2 return end function
実証された algorithm 一覧 (Phase 1-5)
- 基本構文Hello World / 算術 (INTEGER 7×6=42) / IF/ELSE 数値判定 / DO ループ累積 (1+2+3+4+5=15) / REAL + SQRT (3-4-5 三角形 hypot=5)
- 配列・型1D 配列 sum-of-squares (1+4+9+16+25=55) / DOUBLE PRECISION 除算 (1.0D0/3.0D0=0.333..) / 2D 配列 (M(I,J)=I*10+J、M(2,3)=23) / DATA 文初期化 (10+20+30=60) / PARAMETER 定数 (PI×R²=12.566)
- プロシージャSUBROUTINE PRSUM (Σ i=1..N=10) / typed FUNCTION SQR (7²=49) / 関数引数渡し APPLY(DBL, 5)=10 / SAVE 属性 (3 回 CALL で COUNT=1,2,3)
- 文字列・論理CHARACTER*20 + 連結
//(`Hello, World`) / DO WHILE 累積 / LOGICAL +.AND. .NOT.範囲判定 (`in range`) - F66/F77 obsolescent算術 IF 3-way 分岐 (X=-5 → `neg`) / 計算 GOTO 3-way (X=2 → `two`) / GOTO + labeled statement / DIMENSION 別行宣言
- 変数共有 + I/OCOMMON ブロック (X+Y=30) / numbered FORMAT (`X= 42 Y= 3.14`) / OPEN/WRITE/REWIND/READ/CLOSE round-trip (SUM=600) / INTRINSIC ABS+SQRT
監査適合性 (HPC 検証履歴・気象・原子力)
- Bit-exact同一 F77 ソース → 同一 F2018 sha256。配列・SUBROUTINE・COMMON ブロック・関数引数渡しすべて含めて完全決定論。
- Byte-exact regression
make testで actual/.f90 と expected/.f90 を diff、 25/25 PASS(2026-05-08 baseline)。将来の emitter 変更で意図しない出力差分が即検出される regression gate。 - gfortran compile 100%生成 F2018 を
gfortran 13.3で 25/25 PASS。 構造化変換後も runtime 結果が F77 元コードと bit-identical。 - Audit chainSlimeNENC 共通基盤 (S7) と統合可能、 SHA-256 monotonic chain。気象・原子力の検証履歴 30 年保存要件に対応。
- Hallucination 検出trigram + bigram 言語モデル。Axis 2 で全 mutation を 100% reject。
- Build-time LLMLLM は変換規則の構築段階のみ。ランタイムは決定論ルールベース、99.9995% 主張の根拠。
Multi-target ロードマップ (2026-05-08 改訂)
速度・人材・配列地獄解の 3 軸合致で、ターゲット優先順位を再構築: C++ first → C second → Rust third。
決め手は C++23 std::mdspan による配列地獄の言語標準解 (column/row major + stride + 任意 base が native)。
| ① modern FORTRAN | ✅ Phase 1-5 で実装済 (F77 fixed → F2018 free)、25/25 byte-exact、HPC 自然移行先。 |
|---|---|
| ② C++23 (Phase 7、3-4 ヶ月) | 主投資ターゲット。std::mdspan + layout_left で 配列地獄 80% 言語標準解、HPC ecosystem (Eigen/Kokkos/RAJA) 直結。Mode A (column-major maintain) で gfortran 実行と sha256 一致目標。 |
| ③ C (Phase 8、1-2 ヶ月) | C++ Phase 7 の出力から mdspan を #define IDX2D macro へ降格、CUDA 旧版 / RHEL 7 / 古い AIX 等 legacy 環境向け。工数小 (C++ emitter から trivial 派生)。 |
| ④ Rust (Phase 9、3-4 ヶ月) | ndarray Array2 + Order::ColumnMajor、memory safety プレミアム軸、mission-critical migration (金融 quants、量子化学) 向け。 |
| ⑤ CUDA (Phase 10、将来) | C++ Phase 7 の subset、GPU offloading、NAS Parallel Benchmarks 1 本変換 |
「配列地獄」と SlimeFORTRAN の per-array mode 選択
FORTRAN と C/C++/Rust は配列に関する仮定が 6 軸で異なります (index base / memory layout / lower bound / slice 表現 / whole-array ops / shape-knowing)。
単純な A(I,J) の変換ですら、6 軸全てを同時解決しないと動作不変が崩れます。
SlimeFORTRAN は配列ごとに 4 つの変換モードを Slot IR で選択し、用途別に最適化します:
| Mode | 内容 | bit-exact | 用途 |
|---|---|---|---|
| A: Column-major maintain | FORTRAN の column-major + index base を C++/C/Rust 側で維持 (mdspan layout_left / IDX2D macro / Order::ColumnMajor) | ✅ 完全保証 (memory order 一致 → round-off も一致) | 数値計算カーネル、BLAS、CFD、信号処理 (主用途) |
| B: Row-major transpose | 転置して target 慣行に合わせる | ❌ 不保証 (cache locality / SIMD reduction 順変化) | GUI / I/O / 文字列処理メイン (副用途) |
| C: Strided descriptor | mdspan layout_stride で任意 lower bound / stride / layout を runtime 指定 | ✅ 関数 inline 時 (オーバヘッド微) | assumed-shape A(:,:) 引数、generic library |
| D: ISO_C_BINDING + 元 FORTRAN 残存 | 計算本体は元 FORTRAN を gfortran で .o 化、薄ラッパで C++/Rust から呼出 | ✅ 完全 (元コード実行) | 段階移行、UI 部分のみ書換え |
変換時に どの array に どの target で どの mode を使ったか は audit chain に記録、監査人が事後再現可能です。
変換例 (Mode A、C++23)
! FORTRAN (column-major、1-indexed) REAL :: A(M, N) A(I, J) = 3.14 // C++23 (Mode A、bit-exact、std::mdspan) #include <mdspan> std::vector<double> data(M*N); auto A = std::mdspan<double, std::dextents<size_t,2>, std::layout_left>(data.data(), M, N); A[i-1, j-1] = 3.14; // FORTRAN A(I,J) と sha256 一致
License モデル
License モデル
| 課金対象 | WASM/WASI converter ツール (開発者側) |
|---|---|
| 非課金 | 変換結果の modern FORTRAN ソース (顧客資産、永久無償デプロイ) |
| 方式 | Ed25519 署名 144B license + 3-hop air-gap activation (HPC・原子力 audit 対応) |
| 並列化 (PSDP) | 本製品には含まれません。SlimeNENC 配下の独立 SKU として PSDP を別途。 |
関連資料
- 技術解説SlimeNENC Technical Overview (FORTRAN 章を準備中)
- 出願明細特願 2026-046620 v15b の 請求項 11 / 14d で COBOL / MUMPS / PL/I / RPG / FORTRAN 等のレガシー方言処理を明示射程化
- 兄弟製品SlimeCOBOL / SlimeMUMPS / SlimePL/I / SlimeRPG / SlimeJCL と同じ S2-S5/S7-S9 共通基盤
- ベンチマークS9 bench harness (5 軸 correctness)、`s6_modern_emit_fortran/Makefile` の `make test` で byte-exact regression 25/25、`make compile-test` で gfortran compile 25/25
FORTRAN PoC・資料請求 SlimeNENC ファミリーへ戻る SlimeRPG を見る SlimePL/I を見る
