Haskell (GHC) がプログラムをコンパイルする方法と、それらのプログラムがどのように実行されるかを理解するのに苦労しています。
- GHC は、Haskell で書かれた重要なプログラムの標準的な例です。ただし、GHC の一部、つまりランタイム環境 (C/C --) は Haskell で記述されていないようです。何故ですか?パフォーマンス上の理由? (私はこのサイトとその友達を知っていますが、あまり意味がありません.)
- ランタイム環境といえば、なぜコンパイル済み言語にランタイム環境が必要なのですか? コンパイルされたプログラムは機械語だけであってはいけませんか? 私の理解では、ランタイム環境は仮想マシンまたはバイトコード インタープリターにいくぶん似ており、何らかの形式のメタ コードを処理し、それに基づいて実際の計算を行います。では、GHC ランタイムは正確には何をするのでしょうか? そもそもなぜそれが必要なのでしょうか?
- FFI について: C 呼び出しはどのように処理されますか? 最初は、FFI を使用すると、Haskell と C が一緒にコンパイルされた単一の実行可能ファイルが生成されると考えていました。ただし、GHCプログラムがプログラムからC関数を呼び出すようなものを何度も読みました。これは、FFI が並列プログラミングで抱えている問題を理解する上で特に重要です。では、FFI 関数は通常の Haskell 関数とどう違うのでしょうか?