1

SML でのコンパイル時と実行時の違いは何ですか?

SML コードを書いた後、Enter キーを押します。しかし、私は理解していません。実際にコンパイルしているのか、それとも実行しているのか? 例えば

- fun len [] = 0 | len (x::xs) = 1 + len xs;      /* hit enter*/
val len = fn : 'a list -> int

Enterキーを押すval len = fn : 'a list -> intと、結果が得られます。これは実行時の結果ですか、それともコンパイル時の結果ですか?

舞台裏で何が起こっているのか本当に理解できません。

4

3 に答える 3

1

まず、コードを実行する前にコンパイルする必要があることを覚えておいてください。そのため、コンパイルと実行という 2 つのプロセスが発生するはずです。したがって、コンパイル時間はコードのコンパイルにかかる時間であり、実行時間は実行にかかる実際の時間です。

ご理解いただければ幸いです

于 2013-05-14T23:44:09.940 に答える
0

ML のほとんどの実装は、読み取り-評価-印刷ループの一部として「インクリメンタル コンパイラ」を備えています。したがって、新しい最上位宣言を入力すると、最初にコンパイルされ (静的な型チェックとコード生成を含む)、結果のネイティブ コードが実行されます。

そのように実行時にコンパイルできるシステムは、C や C++ の方法でバッチ モード コンパイルに慣れている人には奇妙に見えるかもしれません。Java でさえ、その点で必要以上に静的ですが、Scala の read-eval-print ループは、ML だけでなく実行できることを示しています。これはインタープリターのように見えるかもしれませんが、実際には実行時にコードを生成するコンパイラーであることに注意してください。

一般的な考え方は古い LISP の時代から来ていますが、LISP には最初はコンパイラがなく、コンパイルせずに解釈されることがよくありました。

于 2013-10-08T20:00:27.623 に答える