문제

왜 python 컴파일하는 소스 코드 해석하기 전에?

왜 해석 소스에서 직접?

도움이 되었습니까?

해결책

통역사는 거의 코드를 해석하지 않습니다 곧장, 라인 별 - 너무 비효율적입니다. 거의 모든 통역사는 쉽게 실행할 수있는 중간 표현을 사용합니다. 또한이 중간 코드에서 작은 최적화를 수행 할 수 있습니다.

Python은 다음 에이 코드가 실행될 때 큰 이점이있는이 코드를 저장합니다. Python은 더 이상 코드를 구문 분석 할 필요가 없습니다. 구문 분석은 컴파일 프로세스에서 가장 느린 부분입니다. 따라서 바이트 코드 표현은 실행 오버 헤드를 상당히 줄입니다.

다른 팁

a로 컴파일 할 수 있기 때문입니다 .pyc 한 번 그리고 그것을 여러 번 해석하십시오.

따라서 스크립트를 여러 번 실행하는 경우 소스 코드를 한 번 구문 분석하는 오버 헤드 만 있습니다.

바이트 코드에서 직접 해석하는 것이 더 빠르기 때문입니다. 그것은 렉싱을 할 필요가 없다.

소스 코드를 다시 한 번만 수행하는 대신 소스 코드를 반복하고 구문 분석 import), 분명히 어리 석고 무의미한 노력 낭비 일 것입니다.

하지만 거기에 작은 효율성 측면 그것은(당신이 저장할 수 있습니다 바이트코드 디스크에 있는 메모리에서),그것의 대부분 엔지니어링:그것은 당신이 별도 분석에서 포함되어야 합니다.Parsers 주 불쾌한 생물의 가장자리-케이스 및 데을 준수하는 비전과 같은 규칙을 사용하여 다만 적당한 양을 예측하고 해결 shift-을 줄이 문제입니다.반대로 해석하는 것은 정말 간단합니다:그냥 큰 스위치를 사용하여 문의 바이트 코드의 opcode.

좋은 부작용이지만 그 이유는 성능이라는 것을 의심합니다. 일부 고급 어셈블리 언어로 구축 된 VM이 일부 소스 코드 문자열에서 텍스트를 찾고 바꾸는 것보다 실용적이라고 생각하는 것은 당연하다고 말합니다.

편집하다:

좋아, 분명히, 설명 할 합리적인 의견을 남기지 않고 내 게시물에 -1 투표를 한 사람은 가상 머신 (런타임 환경)에 대해 거의 알지 못합니다.

http://channel9.msdn.com/shows/geydeep/expert-to-expert-erik-meijer-and-bak-inside-v8-a-javascript-virtual-machine/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top