Windows では、GHC は gcc および g++ とともに配布されます (例: ghc-7.6.3\mingw\bin
. ダウンロード ページから、Windows バイナリ ダウンロードの下に、Windows 用のビルドには「C++ ファイルのコンパイルのサポートも含まれている」ことも記載されています。
Windowsにはコンパイラが付属していないため、これらのコンパイラを配布するのは便宜上のものだと想像できます。FFI を使用するために必要だと想像することもできますが、100% 確実ではありません。たとえば、GHC は独自の gcc/g++ コンパイラを使用して .c および .cpp ファイルをコンパイルしますが、GHC は必要なコンパイラとリンカーを選択するオプションも提供します。実際、独自の gcc/g++ を指定することができ、動作するようです。事前に .c/.cpp ファイルをコンパイルし、GHC を呼び出すだけで Haskell コードをコンパイルし、すべてをリンクすることで、GHC をループからもう少し切り離すこともできます(全体的な効果はand-pgml
を使用する場合と同じですが) 。 .-pgmc
-pgml
これで動作するように見えますが、GHC が考えているものと互換性のある gcc のバージョンを指定-pgml
して、gcc のバージョンを指定するのは、純粋な運に依存しているのでしょうか? -pgmc
言い換えれば、FFI を使用する場合、GHC 呼び出しですべてをコンパイルしてリンクするだけでよいのでしょうか?