REPL과 대화식 쉘의 차이점


37

멍청한 질문. 위키 백과에 대한 정의를 읽는 것만으로 는 REPL대화 형 쉘 의 차이점을 알 수 없습니다 .

위키는 REPL이 특정 종류 의 대화식 언어 쉘 이라는 점에 주목합니다 . 그래도 적절한 하위 집합입니까? Wiki 정의는 용어 REPL을 Lisp와 유사한 언어로 제한하는 반면, 명시된 속성에는 실제로 구별되는 기능이 포함되어 있지 않습니다.

특히 IPython을 REPL이라고 부르는 것이 맞습니까?

답변:


24

REPL : 이것은 단지 반복해서 한 번에 하나의 명령을 받아 실행하고 결과를 인쇄하는 절차입니다.

루프를 반복 할 때마다 세 단계는 다음과 같습니다.

  1. 키보드 입력 버퍼에서 텍스트 표현식을 구성하는 문자를 읽고이를 나타내는 데이터 구조를 구성하기 위해 read 호출
  2. 평가를 평가하기 위해 eval을 호출하면, 직관적으로 eval은 "표현의 의미를 파악"하고 "표현의 의미를 표현합니다"라는 표현의 값을 반환합니다.
  3. 쓰기를 호출하여 평가 결과를 텍스트로 표시하여 사용자가 볼 수 있도록합니다.

사용자 자신의 프로그램에 대해 자체 읽기-인쇄-인쇄 루프를 작성하여 사용자가 표현식을 입력하고 원하는 방식으로 해석 할 수 있습니다. read-eval-print 루프를 시작하면 (rep-loop를 입력하여) 일반적인 Scheme 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

각 프로 시저 호출에 대한 인수는 실제 호출 전에 계산되므로 표현식 (쓰기 (eval (읽기)))은 적절한 읽기-인쇄-인쇄 순서로 작업을 수행합니다.

대화식 쉘 : 대화식 쉘은 터미널의 사용자 입력에서 명령을 읽습니다. 무엇보다도 이러한 셸은 활성화시 시작 파일을 읽고 프롬프트를 표시하며 기본적으로 작업 제어를 활성화합니다. 사용자는 셸과 상호 작용할 수 있으며, 대화 형 셸 이름이로 변경되었습니다. 이 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

이제 위의 스크립트는 사용자와 상호 작용하고 계산을 수행하는 데 따라 입력을 요청합니다. 이것이 대화 형 쉘처럼 동작하는 이유입니다.

마찬가지로, 대부분의 사람들이 파이썬을 배우기 위해 사용하는 파이썬 인터프리터는 사용자와 의사 소통하는 대화 형 인터프리터입니다.


1
@The Dark Knight : 위의 이론을 바탕으로 개발자 툴바 (크롬) 또는 파이어 버그 확장 (파이어 폭스)이 다소 REPL이라고 말할 수 있습니까?
Rajkishore

9

기술적으로 쉘은 REPL의 인스턴스라고 말하는 것이 맞습니다. 그러나 일반적인 사용 시나리오 중 하나이므로 프로그램 정의의 문제가 아닙니다.

예를 들어, Bash는 C로 작성되었지만 Python으로 작성되었을 수도 있습니다. 그 시점에서 프로그램 기능과 기능에 대해 이야기한다면 Bash는 쉘이지만 Python은 그렇지 않다고 말하는 것이 맞습니까?

쉘은 명령 실행에 관한 것이고 REPL은 명령 및 함수 호출에 관한 것입니다. 그러나 REPL (Python의 os.system, os.popen 등)에서 명령을 실행할 수 없으며 많은 내장 기능을 사용하여 Bash에서 함수를 실행 (또는 정의) 할 수 없습니까?

전술 한 바와 같이, 그것은 사용의 문제이다. 파일과 기성품 프로그램을 저글링하면 셸로 사용하는 것입니다. 라이브러리 또는 언어 의미를 테스트하는 경우 REPL입니다.

희망이 도움이됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.