부분 평가 는 인터프리터 및 컴파일러와 관련된 개념적 프레임 워크입니다.
해석 된 코드와 컴파일 된 코드의 성능에 대한 일반적인 진술을 할 수 있습니까?
프로그래밍 언어는 사양입니다 ( R5RS 또는 n1570 과 같은 일부 보고서에 작성 ). 그것들은 소프트웨어 가 아니기 때문에 성능 을 말하는 것도 의미가 없습니다 . 그러나 일부 프로그래밍 언어에는 인터프리터 및 컴파일러를 포함하여 여러 가지 구현이있을 수 있습니다 .
C와 같이 전통적으로 컴파일 된 언어 (즉, 구현 이 종종 컴파일러 인 언어 )에서도 일부 부분은 종종 해석됩니다. 예를 들어, 형식 제어 스트링 의 printf (C 표준에서 정의 된)는 자주 (의해 "해석" C 표준 라이브러리 가지고 printf
기능 하지만, 일부 가변 인수 기술을 사용하여) 컴파일러 (포함 GCC를 ) -in 수 한정된 특정한 경우-최적화하고 하위 수준 호출로 "컴파일"합니다.
또한 "통역사"내에서도 일부 구현은 JIT 컴파일 기술을 사용 하므로 런타임시 기계 코드를 생성합니다 . 좋은 예는 luajit 입니다. 다른 구현 (예 : Python, Ocaml, Java, Parrot, Lua)은 소스 코드를 바이트 코드로 변환 한 다음 해석됩니다.
SBCL 은 모든 REPL 상호 작용 (및 기타 호출 eval
)을 기계 코드로 동적으로 변환하는 Common Lisp "컴파일러" 입니다. 그래서 당신은 그것이 통역 인이라고 생각합니다. 브라우저 (예 : v8 ) 에서 대부분의 JavaScript 구현은 JIT 컴파일 기술을 사용합니다.
다시 말해, 인터프리터와 컴파일러의 차이는 매우 모호하며 (실제로 둘 다에 연속체가 있음) 실제로 대부분의 프로그래밍 언어 구현 에는 종종 인터프리터와 컴파일러 (최소 바이트 코드까지)가 있습니다.
구현은 대부분의 "컴파일러"또는 "인터프리터"와 유사한 기술을 사용하여 독립적으로 빠르거나 느릴 수 있습니다.
일부 언어 특성은 해석 방식을 선호합니다 ( 전체 프로그램 분석을 통해서만 효율적으로 컴파일 할 수 있음 ).
들어 일부 문제의 유형, 일부 소프트웨어를 설계 메타 프로그래밍 접근하는 것은 가치가 중요한 속도 업을 제공합니다. 특정 입력이 주어지면 프로그램 이 처리하기 위해 특수 코드를 동적으로 생성 한다고 상상할 수 있습니다. C 또는 C ++ 에서도 가능합니다 (일부 JIT 라이브러리를 사용하거나 C 코드를 생성하여 동적으로로드되는 플러그인으로 컴파일).
참조 이 관련 파이썬에 대한 질문을하고, 그