コンパイラとインタプリタ
コンパイラ(compiler)と
インタプリタ(interpreter)は、
F#で書いたプログラムを実行するために必要なものです。
MicrosoftのF#の処理系はコンパイラとインタプリタを両方持っていますが
通常は、どちらか片方を使います。
ちょっとした作業やコードの確認にはインタプリタ
ある程度ちゃんとしたプログラムには
コンパイラを使うことが多いように思います。
インタプリタは、一つコードを打てば、
すぐに結果が返ってくるといった感じに対話的に使えるので
初めての方はインタプリタから慣れると
F#を理解しやすいのではないかと思います。
まず、これらの定義を
英語版のwikipediaのページから引用すると
- コンパイラ
- コンパイラとは、あるプログラミング言語で書かれたソースコードを
別のコンピュータの言語(多くはオブジェクトコードと呼ばれるバイナリの形式)に
変換するコンピュータプログラムのこと
- インタプリタ
- インタプリタとは、通常、あるプログラミング言語で書かれた
プログラムを実行する(命令を動かす)コンピュータプログラムのことを意味し、
次のような種類がある
1.ソースコードを直接実行する
2.ソースコードを効率的な中間言語の形式に変換し、すぐに実行すること
3.インタプリタシステムの一部として用意されている、事前にコンパイラによって作成された
すぐに実行可能なコードを実行すること
となっています。
どこが違うのかというと
コンパイラは元のプログラムを変換するだけなのに対し、
インタプリタはプログラムをすぐ実行する点が異なります。
F#では以前は
コンパイラ:fsc.exe
インタプリタ:fsi.exe
という名前の実行ファイルになっていましたが、
現在はインタプリタはdotnet fsiコマンドで実行し、コンパイラはdotnet buildコマンドでf#プロジェクトとして実行する形に変わっています。
コンパイラを使うと、F#のソースコードをwindowsで実行出来る実行ファイルに変換してくれます。
この中身は、
MSIL(Microsoft Intermediate Language)という中間言語になっていて
CPUが直接実行出来る形式ではないものの
共通言語ランタイム(
CLR:Common Language Runtime)というものを通じて
CPUが直接実行出来る形式に変換され、実行されるという動作をします。
このあたりの詳細は
MSDN:マネージ実行プロセスに記述があります。
この仕組みはF#だけではなく、
C#やVB.netなどの.Net Framework上で利用出来る言語共通になっています。