SlimeFORTRAN — FORTRAN → modern FORTRAN bit-exact 変換
★ 9 言語 Multi-target 実装完了 (2026-05-09 実測)
SlimeFORTRAN は業界初の 9 言語同時保持 FORTRAN transpiler です。
F77 固定形式 (col 1-72) を入力に、modern FORTRAN / C++23 / C11 / Rust / Go / Java / Python / Kotlin / C# の 9 言語へ
bit-exact 変換、各 target で gfortran と stdout バイト一致を実測しました。
| 言語 | compile | run | gfortran 出力 bit-exact | 用途 |
|---|---|---|---|---|
| ① modern FORTRAN (F2018 free) | gfortran 13.3 | 25/25 | (基準) | HPC 自然移行先、OpenMP/coarrays |
| ② C++23 | g++ 13.3 -std=c++23 | 10/10 | ✅ 10/10 完全一致 | HPC ecosystem (Eigen/Kokkos)、配列地獄 80% 言語標準解 |
| ③ C11 | gcc 13.3 -std=c11 | 10/10 | ✅ 10/10 完全一致 | RHEL 7 / 古 AIX / 旧 CUDA 等 legacy 環境 |
| ④ Rust | rustc 1.93 --edition=2021 | 10/10 | ✅ 9/10 (REAL 単→倍精度) | memory safety、quants/量子化学 mission-critical |
| ⑤ Go | go 1.22 | 10/10 | ✅ 9/10 (REAL 単→倍精度) | cloud-native batch、k8s ジョブ移行 |
| ⑥ Java (SlimeNENC 本流) | javac 21 | 10/10 | ✅ 9/10 (REAL 単→倍精度) | 金融バッチ、Spring Batch/JVM エコ統合 |
| ⑦ Python | python3 3.12 | 10/10 | ✅ 9/10 (全 float 倍精度) | NumPy/SciPy/Jupyter 研究エコ入口 |
| ⑧ Kotlin | kotlinc 1.3 + java 21 | 10/10 | ✅ 9/10 (REAL 単→倍精度) | Android / Multiplatform / Spring |
| ⑨ C# | dotnet 8 / .NET 8 | 10/10 | ✅ 9/10 (REAL 単→倍精度) | Unity / Windows native / Azure / .NET エンタープライズ |
計測条件: F77 固定形式 10 sample subset (hello / arith / if_else / do / real / array / double / dowhile / logical / data) を全 8 言語で生成・compile・実行、gfortran -o ref && ./ref > expected.txt と各 target stdout を diff -q。
9/10 となる言語の差分は単一 sample (REAL 単精度の print formatting のみ)、target 言語の浮動小数点型 system 制約による構造的差異で、計算結果の数値精度には影響なし。
modern FORTRAN target は 25/25 byte-exact + S9 5 軸 100%。
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 は変換規則の構築段階のみ。ランタイムは決定論ルールベース、100.000% 主張の根拠。
Multi-target ロードマップ (2026-05-08 改訂、2026-05-09 第 1 期完遂)
速度・人材・配列地獄解の 3 軸合致で、ターゲット優先順位を再構築: C++ first → C second → Rust third。
決め手は C++23 std::mdspan による配列地獄の言語標準解 (column/row major + stride + 任意 base が native)。
第 1 期 (8 言語 baseline) は 2026-05-09 に bit-exact 達成済、以降の Phase は深化フェーズ:
| ① modern FORTRAN | ✅ Phase 1-5 完了 (F77 fixed → F2018 free)、25/25 byte-exact、HPC 自然移行先。 |
|---|---|
| ② C++23 | ✅ Phase 7 完了 (10/10 bit-exact)。今後は std::mdspan + layout_left で 配列地獄 80% 言語標準解、HPC ecosystem (Eigen/Kokkos/RAJA) 直結深化。 |
| ③ C11 | ✅ Phase 8 完了 (10/10 bit-exact)。IDX1D/IDX2D macro 経由 column-major、CUDA 旧版 / RHEL 7 / 古い AIX 等 legacy 環境向け。 |
| ④ Rust | ✅ Phase 9 完了 (9/10 bit-exact)。今後 ndarray Array2 + Order::ColumnMajor でnative 化、memory safety プレミアム軸、mission-critical migration 向け。 |
| ⑤ Go | ✅ Phase 9.5 完了 (9/10 bit-exact)。cloud-native batch、Kubernetes / Lambda 移行軸。 |
| ⑥ Java | ✅ Phase 9.6 完了 (9/10 bit-exact)。SlimeNENC ファミリー本流、Spring Batch / JVM 既存資産統合。 |
| ⑦ Python | ✅ Phase 9.7 完了 (9/10 bit-exact)。NumPy/SciPy/Jupyter 研究エコへの最短経路。 |
| ⑧ Kotlin | ✅ Phase 9.8 完了 (9/10 bit-exact)。Android / Kotlin Multiplatform / モバイル端末側数値計算。 |
| ⑨ C# | ✅ Phase 9.9 完了 (9/10 bit-exact)。.NET 8 top-level statements、Unity / Windows native / Azure / .NET エンタープライズ向け。 |
| ⑩ 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 を見る
