4

예 : 루비 (MRI를 실행 중이라면 바이트 코드로 컴파일되지 않았다는 뜻)는 메소드 나 루프 바디의 실행이 필요할 때마다 실제로 파싱됩니까? 내 말은, 루프를 실행하려면 그 몸체를 파싱해야한다는 것입니다. N 번?언어가 '해석되는'것은 무엇을 의미합니까?

나는이 모든 프로그램이 부트 스트랩에서 한 번 구문 분석되고 '강력한 형식의'명령문 트리로 변환되는 등 항상 생각했습니다. 사실이 아닌가?

답변

4

나는 지금 의미하고 소프트웨어 (루비, 파이썬, 자바) 또는 하드웨어 (C, C++) 통역 :

여부, 거의 모든 프로그래밍 언어를 해석하는 것을 말할 수 있습니다 실제 답변을 얻으려면 내부 루비 구현에 대해 알지 못하지만 반복적으로 문장을 구문 분석하지 않는 것이 좋습니다. 원래 구현에서 바이트 코드를 사용하지 않거나 (이미 마이그레이션 했습니까?), 중간 표현을 사용합니다 (C- 확장을 작성할 때이를 잘 볼 수 있습니다).

+0

"그들은 C- 확장을 쓰고 싶을 때 멋지게 볼 수있는 중간 표현을 사용합니다."- 메모리에 저장되었다고 가정 할 때이 표현은 어떻게 비슷하게 보입니까? – Bubba88

+0

C로 작성된 원래 구현의 경우 "VALUE"라는 일련의 구조체가 있습니다. 다음은 약간의 통찰력입니다 : http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html – LukeN

+0

" 원래 구현 되었습니까? (또는 이미 마이그레이션 했습니까?) "공식 루비 인터프리터는 버전 1.9부터 바이트 코드를 사용합니다. – sepp2k

4

해석이 매우 불완전한 단어입니다. 심지어 기계어 명령어도 프로세서에 의해 해석됩니다.

일반적으로 실행되기 전에 컴파일되는 언어와 컴파일 프로세스가없고 인터프리터라고하는 다른 프로그램에서 실행되는 언어가 구별됩니다. 후자의 언어 유형은 종종 interpreted languages이라고합니다.

선은 어떤 경우에는 그 명확하지 않다 :

일부 언어는 하나 컴파일 또는 해석 될 수
  • , 예를 들어, PHP.
  • 일부 해석 된 코드는 런타임시 원시 컴퓨터 명령어 (JIT compilation)로 컴파일 될 수 있습니다.
  • 일부 컴파일 된 언어는 정상 컴파일 과정을 거치지 않고 런타임에 코드를 생성하고 실행할 수있는 exec 기능을 가질 수 있습니다.