먼저, Java는 완전히 정적으로 컴파일되지 않고 C ++ 방식으로 연결되지 않습니다. 바이트 코드로 컴파일 된 다음 JVM에서 해석됩니다. JVM은 기본 기계 언어로 적시에 컴파일하여 수행 할 수 있지만 반드시 수행 할 필요는 없습니다.
요점 : 상호 작용이 주요한 실질적인 차이라고 생각합니다. 모든 것이 해석되었으므로 코드의 작은 발췌를 가져와 현재 환경 상태에 대해 구문 분석하고 실행할 수 있습니다. 따라서 변수를 초기화 한 코드를 이미 실행 한 경우 해당 변수 등에 액세스 할 수 있습니다. 실제로 함수형 스타일에 적합합니다.
그러나 특히 참조 및 컨텍스트가 많은 대형 시스템을 사용하는 경우 해석 비용이 많이 듭니다. 정의에 따르면 동일한 코드를 두 번 해석하고 최적화해야 할 수 있기 때문에 낭비입니다 (대부분의 런타임에는 일부 캐싱 및 최적화 기능이 있음). 여전히 런타임 비용을 지불하고 종종 런타임 환경이 필요합니다. 또한 복잡한 절차 적 최적화는 현재 성능이 충분히 대화 형이 아니기 때문에 볼 가능성이 적습니다.
따라서 크게 변경되지 않는 대형 시스템의 경우 특정 언어의 경우 모든 것을 사전 컴파일하고 사전 링크하고 가능한 모든 최적화를 수행하는 것이 더 합리적입니다. 결과적으로 대상 머신에 최적화 된 매우 마른 런타임으로 끝납니다.
실행 파일 생성에 대해서는 IMHO와 거의 관련이 없습니다. 컴파일 된 언어로 실행 파일을 만들 수도 있습니다. 그러나 인터프리터와 런타임이 이미 실행 파일로 패키지되어 있고 사용자에게 숨겨져있는 것을 제외하고는 인터프리터 언어로 실행 파일을 작성할 수도 있습니다. 이것은 일반적으로 여전히 런타임 비용을 지불한다는 것을 의미합니다 (그러나 일부 언어의 경우 모든 것을 트리 실행 파일로 변환하는 방법이 있다고 확신합니다).
모든 언어를 대화식으로 만들 수 있다는 데 동의하지 않습니다. C와 같은 특정 언어는 컴퓨터와 전체 링크 구조에 너무 연결되어 있으므로 의미있는 본격적인 대화식 버전을 만들 수 있을지 확신 할 수 없습니다