4

ウィキペディアから:

REPL は一般的にインタープリターと誤って名付けられています。Common Lisp や Python など、コンパイル (バイトコード コンパイルを含む) を使用する多くのプログラミング言語には REPL があります。

この投稿への返信から

対話型インタープリターは REPL を使用します。通訳者は必須ではありません。たとえば、非対話モード (ファイルに対して) で Python を実行することができ、read-eval-print ループは使用されません。

REPL [del] は常に存在する [/del]はインタープリターに対してのみ存在するのでしょうか? ウィキペディアは、コンパイラにも REPL が存在すると言っていますか? はいの場合、それはどのようなものですか?

よろしくお願いします!

インタプリタとは、コンパイル直後に実行するものです。

4

3 に答える 3

4

よく使われる言葉を求めているのか、それとも何か他のことを求めているのかわかりません。

いずれにせよ、REPL は Read Eval Print Loop です (最初の文字を参照)。プログラムを読まない、またはプログラムを評価しない (つまり、実行したいことを「理解」して実行する) インタープリターがある場合、または結果をどこにも出力しないインタープリターがある場合、それは何の役に立つでしょうか?

何も表示されず、音声が聞こえない場合は、コンピュータの代わりにテーブルに岩を置くこともできます。

「表示されるアイコンだけを変えるだけで、本当に印刷されているの?」など、おかしな言葉遊びの反論もあるかもしれません。など:-) または「キーボードから読み取っていない場合、それは本当に読み取っていますか?」。ばかげた純粋な哲学、本当に。

実際のところ、一部のシステムでは、読み取りをキーボードから行うかファイルから行うかによって反応が異なります。それが何に使われるのかはわかりませんが、人間が実際にキーボードで入力しているときに、人間に助けを提供できると思います (つまり、コマンドの補完など)。

ファイルから読み取るときに複数の式を受け入れない人もいるでしょうか?

インタプリタに REPL が常に存在するかどうか疑問に思っていましたか?

「通訳者」の定義の問題だと思います。(実用的な意味で)「私が指示したことを実行する何か」を意味する場合は、いいえ. 聞いてくれなかったらどうやって言うの?

ウィキペディアは、コンパイラにも REPL が存在すると言っていますか? はいの場合、それはどのようなものですか?

はい、もちろん。すべての LISP システムはそのようなものです。彼らはまさにインタープリターのように感じますが、システムがあなたの言い回しを学習し、何が変更され、何が変更されないかを学習し、変更されないものを機械語にコンパイルするだけで、時間が経つにつれて魔法のように高速になります.

最近ではJavaもこれを行っています.VMセッションが長く続くほど、物事をより速くする方法を見つけ出し、何かを変更するのをやめると、最終的にプログラム全体をマシンコードで実行することになります.

インタプリタ/コンパイラの人為的な区別はすべて、偶然に、つまり当時のリソースの制約のために生じました。

于 2011-03-27T18:19:31.167 に答える
1

REPL は、Read-Eval-Print-Loop の略です。インタープリターとコンパイラーの両方を使用して、evalビットを実行できます-バックグラウンドで実行されているインタープリターのインスタンスを使用して入力を供給するか、コンパイラーを使用して段階的にコンパイルします(確かに、これにははるかに多くの作業といくつかの協力が必要ですただし、無数のインスタンスが示すように、可能です-通常はバイトコードにのみコンパイルします)。残りはほとんど I/O であり、以前に入力したすべての定義を次のコマンドで使用できるようにするための接着剤です。

于 2011-03-27T18:31:50.367 に答える
1

これは良い答えではないかもしれません。

  • IE 6.0 の JavaScript には REPL が付属していません。

  • コンパイラの REPL は、言語が 1 回で前方のみ解析できる場合、インタプリタのように見えるかもしれません。コンパイラは、コンパイルされた各ステートメントの後にブレークポイントを挿入し、ブレークポイントに到達するまで実行を行ってから、ユーザーに戻り、次の入力行を待って繰り返します。最後に、すべての入力行がコンパイルされ、同様に実行されます。

于 2011-03-27T18:18:52.400 に答える