FortranとWebAssemblyの組み合わせ
- Fortranは1957年に初めて登場した古いプログラミング言語で、C言語、Intel 4004 CPU、IBM System/360メインフレームよりも古い。
- Fortranは科学・工学アプリケーションにおける計算集約的な作業に使われてきており、数値演算ではCより効率的だと考えられることもある。
- このブログ記事では、既存のFortranコードをWebAssemblyにコンパイルしてWebブラウザで実行できるようにする方法を説明している。
問題は何か?
- FortranをWebAssemblyにコンパイルする方法はいくつかあるが、すべての機能を完全にサポートする方法はない。
- どの方法にも欠点があり、簡単なプラグアンドプレイの解決策ではない。
コンパイラの要約
- LLVMベースのFortranコンパイラにはいくつかの変化があった。
f2cユーティリティはFortran 77をCコードに変換するが、現代的なFortranコードとは互換性がない。
LFortranコンパイラは多くの機能をサポートするようになったが、それでも一部のプロジェクトでは問題が発生する可能性がある。
DragoneggはGCCのプラグインとしてLLVM IRを生成するが、古いバージョンのGCCとLLVMが必要になる。
- Classic Flangは32ビット出力をサポートしておらず、LLVM Flangも現時点ではWebAssembly出力を標準では生成しない。
LLVM FlangでWebAssemblyをビルドして使う
- LLVM Flangのソースを修正してWebAssemblyターゲットを実装する必要がある。
- LLVMのモジュール式設計を活用することで、FlangフロントエンドとWebAssemblyバックエンドを利用できる。
FortranサブルーチンをCから呼び出す
- FortranサブルーチンをCプログラムの一部としてコンパイル・リンクする方法をおさらいしている。
LLVM Flangに戻る
- LLVM Flangコンパイラを使ってFortranサブルーチンをコンパイルできるが、WebAssemblyターゲットがまだ実装されていないため、ソースコードにパッチを当てる必要がある。
FortranルーチンをJavaScriptから呼び出す
- Emscriptenを使ってFortranオブジェクトをリンクし、JavaScriptから直接呼び出せる。
Fortranランタイムライブラリ: "Hello, World!"への道のり
- Fortranで"Hello, World!"プログラムをビルドしようとしたときに発生する問題を説明している。
- LLVM FortranランタイムライブラリをWebAssembly向けにコンパイルする必要がある。
GN⁺の意見
- この記事は、Fortranのような伝統的な言語を現代のWeb技術と統合しようとする試みを示している。このようなアプローチは、既存の実績ある数値計算ライブラリをWebへ持ち込むうえで有用になりうる。
- FortranをWebAssemblyにコンパイルする過程は、既存コードベースを新しいプラットフォームへ移植する際の課題をよく示している。特にクロスコンパイルに関する問題は、他の言語やプラットフォームへの移植でも重要な検討事項となる。
- この技術は興味深いものの、実際にWeb上で高性能を要求する数値計算を行うことには、依然として実用上の限界がある。WebAssemblyはまだ従来のネイティブアプリケーション並みの性能を常に提供できるとは限らない。
- LLVM Flangの開発は非常に活発であり、こうした開発努力はFortranコミュニティに好影響をもたらすと期待される。ただし、この記事で言及されているさまざまな問題点は、なお解決すべき課題があることを示している。
- この記事は、FortranをWeb技術と統合しようとする開発者に有用な情報を提供しており、特に数値解析や科学計算分野でWebベースのツール開発を検討している人に役立つだろう。
1件のコメント
Hacker Newsの意見
ジョージがWebブラウザでRを実行するためにWebRプロジェクトに参加し、Fortranについて調べた内容
20年前にXilinxでFORTRANコンパイラの作業をしていた経験
barfという定義が含まれていたことLLVMプロジェクトの最新ソースを使ってf18をビルドすることを推奨
「最も単純な非自明の例」というアプローチによる説明の仕方への称賛
WebAssembly開発に関する知識不足への言及
JavaScriptにおける線形代数向けの「本番運用」対応のエコシステムが存在するかという質問
1981/82年に書いたFortran 78コードを保管していれば、今これを実行できるか試してみたかったという意見
LFortranへの言及がもっと多くないのは不思議だとの指摘
.NETとJavaでのFortran利用に関する情報提供
TensorFlowをブラウザ向けにコンパイルした作業経験の共有