Noobの質問。 [〜#〜] repl [〜#〜] と インタラクティブシェル の違いを、ウィキペディアの定義を読むだけではわかりません。
Wikiは、REPLはインタラクティブ言語シェルの 特定の種類 であると述べています。それは適切なサブセットですか? Wikiの定義では、用語REPLをLISPのような言語に制限しているようですが、記載されているプロパティには、区別する機能が実際には含まれていません。
特に、IPythonをREPLと呼ぶのは正しいでしょうか?
REPL:これは、ループし、一度に1つのコマンドを受け入れて実行し、結果を出力する手順です。
ループの各反復における3つのステップは次のとおりです。
独自のプログラムに独自のread-eval-printループを記述して、ユーザーが式を入力し、任意の方法で解釈できるようにすることができます。 read-eval-printループを起動して((rep-loop)と入力する)、通常のSchemeのread-eval-printループを引き継ぎ、式を解釈します。
これは非常に単純なread-eval-printループです。
(define (rep-loop)
(display "repl>") ; print a Prompt
(write (eval (read))) ; read expr., pass to eval, write result
(rep-loop)) ; loop (tail-recursive call) to do it again
式(write(eval(read)))は、実際の呼び出しの前に各プロシージャコールの引数が計算されるため、適切なread-eval-printの順序で処理を行うことに注意してください。
インタラクティブシェル:インタラクティブシェルは、端末上のユーザー入力からコマンドを読み取ります。特に、このようなシェルは、アクティブ化時にスタートアップファイルを読み取り、プロンプトを表示し、デフォルトでジョブ制御を有効にします。ユーザーはシェルと対話できます。これが、対話型のシェル名の由来です。このbashスクリプトについて考えてみましょう。
#!/bin/bash
echo -n "Enter the value of variable 'var1': "
read var1
echo "var1 = $var1"
echo
echo -n "Enter the values of variables 'var2' and 'var3' "
echo =n "(separated by a space or tab): "
read var2 var3
echo "var2 = $var2 var3 = $var3"
# If you input only one value,
#+ the other variable(s) will remain unset (null).
exit 0
上記のスクリプトはユーザーと対話し、計算に基づいて入力を入力するようユーザーに要求します。そのため、対話型シェルのように動作します。
同様に、pythonインタープリターは、ほとんどの人が学習に使用しますpythonは、ユーザーと通信するインタラクティブなものです。
技術的には、シェルはREPLのインスタンスであると言って間違いありません。ただし、これは一般的な使用シナリオの1つであるため、プログラム定義の問題ではありません。
たとえば、BashはCで書かれていますが、Pythonで書かれているはずです。その時点で、プログラムの機能と能力について語る場合、Pythonはそうではありませんが、Bashはシェルであると言うのが正しいでしょうか?
REPLは命令と関数呼び出しの実行に関するものであり、シェルはコマンドの実行に関するものであるとも言えます。しかし、REPL(Pythonのos.system、os.popenなど)でコマンドを実行できず、組み込みの多くを使用して、Bashで関数を実行(または定義)できませんか?
前述のように、それは使用法の問題です。ファイルと既製のプログラムを両立させる場合は、それをシェルとして使用します。ライブラリまたは言語セマンティクスをテストしている場合、それはREPLです。
お役に立てば幸いです。
このStackOverflow の質問は、その質問(特に)について説明します。
インタラクティブなPythonに関しては、私は個人的に垣間見ることができます。しかし、それをREPLと呼びたい場合、誰もあなたに腹を立てるとは思いません(ソースコードファイルで機能するものは少し多すぎますが、インタラクティブシェルでは機能しないため、呼び出しに完全に満足することはできません。それはREPLです)。