배치 컴파일러 란 무엇입니까?


28

컴파일러 과정에서 다음과 같은 인용문이 있습니다 (그래프 채색의 맥락에서).

느리기 때문에 그래프 채색은 배치 컴파일러에서 사용되는 반면 선형 스캔은 JIT 컴파일러에서 사용되는 경향이 있습니다.

온라인에서 명확한 정의를 찾을 수 없습니다. 그렇다면 컴파일러를 배치 컴파일러로 만드는 것은 무엇입니까?


그 질문은 여기서 주제가 아닙니다. softwareengineering.stackexchange.com 은 더 좋은 곳입니다
Basile Starynkevitch

답변:


42

JIT (Just-In-Time) 컴파일러는 런타임에, 즉 프로그램이 실행되는 동안 코드를 컴파일합니다. 따라서 컴파일 비용은 프로그램 실행 시간의 일부이므로 최소화해야합니다.

이것의 반대는 기본적으로 "일괄 처리 컴파일러"와 동의어 인 AOT 컴파일러입니다. 소스 코드를 머신 코드로 변환 한 다음 머신 코드 만 배포합니다. 따라서 컴파일러는 결과 프로그램의 실행 시간에 영향을 미치지 않으므로 매우 느릴 수 있습니다.

요즘 사람들이 "컴파일러"라고 말하면 일반적으로 AOT 컴파일러를 의미합니다. 실제로, "AOT 컴파일러"라는 용어는 사람들이 JIT 컴파일 언어, 특히 JavaScript를 위해 AOT 컴파일러를 만들기 시작할 때 비교적 최근에 인기를 얻기 시작했습니다. C #과 같은 많은 언어는 VM의 중간 언어로 컴파일 된 다음 런타임에 기계 코드로 JIT 컴파일됩니다. "AOT 컴파일러"라는 용어는 소스 코드가 기계 코드로 직접 컴파일 될 것이라는 의미를 가지므로 런타임에 JIT 컴파일 형식이 필요하지 않습니다.

"배치 컴파일러"는이 시점에서 약간의 구식 용어입니다. 이 용어가 널리 사용되는 배치 컴파일러와의 실제 대조는 증분 컴파일러 였습니다. 증분 컴파일은 종종 REPL이있는 Lisp와 같은 언어와 관련이 있으며 특정 함수를 컴파일하기 위해 언어 구현을 대화식으로 요청할 수 있습니다. 컴파일이 요청되지 않은 함수가 실행 된 경우 일반적으로 해석됩니다. 대조적으로 배치 컴파일러는 모든 기능을 한 번에, 즉 배치로 컴파일했습니다.


1
그리고 대화식으로 전혀 실행되지 않는 이전 컴파일러에서는 프로그램을 컴파일하기 위해 배치 대기열에 작업을 제출해야했습니다.
Neuromancer

그리고 일부 언어 구현 (GNU의 awk, cpython 등)은 전체 입력을 런타임의 첫 번째 단계로 내부 표현으로 컴파일하여 여기에 설명 된 속성 중 일부를 혼합합니다.
dmckee

1
@dmckee 대부분의 언어 구현은
아니지만

또 다른 모호성 : 배치 컴파일러라고하는 도구가 MSDOS 운영 체제에 존재했습니다. 이러한 배치 파일을 실행 파일로 컴파일했습니다.
rackandboneman

물론 항상 내부 표현이 있습니다. 그러나 때로는 Gcc, Llvm 또는 .Net과 같이 자체 언어입니다. 이는 프론트 엔드 / 중간 / 백엔드 아키텍처, 프론트 엔드가 언어 (C, C ++, Java, fortran ..)를 공통의 하위 레벨 언어로 변환 한 다음 최적화 알고리즘이 실행되고, 마지막으로, 공용 언어로 최적화 된이 코드는 백엔드에 의해 바이트 코드 또는 어셈블러, 실행 가능 또는 정적 또는 동적 라이브러리로 변환됩니다.
초에 재회

11

의미는 당신이 제공 한 견적에 내포되어 있습니다! 작업이 실시간으로 수행되지 않을 때 사용되는 컴퓨팅 용어 배치 처리 에서 비롯 되지만로드 (종종 실시간 활동의 경우)가 적을 때 운영 체제에서 나중에 실행되도록 예약되었습니다.

배치 컴파일러는 사용자가 컴파일 결과를 기다리지 않을 때 컴파일하는 컴파일러입니다. 그것은 더 현대적인 용어를 사용하여 백그라운드에서 수행되는 것입니다.

이것은 JIT (Just-In-Time)와는 반대로 처리를보다 철저하게 수행하기 위해 여분의 시간을 소비 할 필요없이 정확한 시간에 "실시간"수행됩니다.

배치 컴파일의 느린 속도는 다음과 같이 설명 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

출처 : https://xkcd.com/303/

또는 이것조차도 :

여기에 이미지 설명을 입력하십시오

출처 : http://dilbert.com/strip/2013-06-22

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