동적 컴파일
Dynamic compilation| 프로그램 실행 |
|---|
| 일반개념 |
| 코드 종류 |
| 컴파일 전략 |
| 주목할 만한 런타임 |
| 주목할 만한 컴파일러 및 공구 체인 |
|
동적 컴파일은 프로그램 실행 중에 성능을 얻기 위해 일부 프로그래밍 언어 구현에 의해 사용되는 프로세스다.이 기술은 셀프(Self)에서 유래되었지만, 이 기술을 사용하는 가장 잘 알려진 언어는 자바(Java)이다.[citation needed]동적 컴파일러가 방출하는 머신 코드는 프로그램 런타임에 구성되고 최적화되기 때문에 동적 컴파일을 사용하면 코드 복제나 메타프로그래밍을 제외하고 정적으로 컴파일된 프로그램(즉, 아래에 기술된 바와 같이 소위 "배치 컴파일러"에 의해 컴파일된 프로그램)에서는 이용할 수 없는 효율성에 대한 최적화가 가능하다.
동적 컴파일을 사용하는 런타임 환경은 일반적으로 프로그램을 처음 몇 분 동안 느리게 실행한 다음, 그 후에는 컴파일과 재컴파일이 대부분 완료되고 빠르게 실행된다.이러한 초기 성능 지연으로 인해 동적 컴파일은 특정 경우에 바람직하지 않다.동적 컴파일의 대부분의 구현에서 초기 컴파일 시간에 수행될 수 있는 일부 최적화는 런타임에 추가 컴파일이 될 때까지 지연되어 불필요한 감속을 더 유발한다.적시성 편찬은 동적 편찬의 한 형태다.
증분 컴파일
밀접하게 연관된 기법은 증분 편찬이다.증분 컴파일러는 POP-2, POP-11, Forth, Lisp의 일부 버전(예: Maclisp 및 하나 이상의 ML(Poplog ML))에서 사용된다.이를 위해서는 프로그래밍 언어에 대한 컴파일러가 런타임 시스템의 일부가 되어야 한다.결과적으로, 소스 코드는 언제든지, 단말기에서, 파일로부터, 또는 실행 중인 프로그램에 의해 구축된 데이터 구조로부터, 기계 코드 블록이나 기능(동일한 이름의 이전 기능을 대체할 수 있음)으로 번역될 수 있으며, 그 다음, 프로그램에 의해 즉시 사용할 수 있다.쌍방향 개발 및 시험 중 컴파일 속도의 필요성 때문에 컴파일된 코드는 소스 코드에서 읽어 후속적으로 연결되고 실행될 수 있는 객체 파일을 생성하는 표준 'batch compiler'에 의해 생성된 코드만큼 과도하게 최적화되지 않을 가능성이 높다.그러나 증분 편성된 프로그램은 일반적으로 같은 프로그램의 해석된 버전보다 훨씬 더 빨리 실행될 것이다.따라서 증분 편찬은 해석 언어와 컴파일된 언어의 장점을 혼합하여 제공한다.이식성을 돕기 위해서는 증분 컴파일러가 두 가지 단계로, 즉 먼저 어떤 중간 플랫폼 독립 언어로 컴파일하고, 그 다음, 그것에서 호스트 머신의 기계 코드로 컴파일하는 것이 일반적으로 바람직하다.이 경우 포팅은 '백엔드' 컴파일러만 변경하면 된다.위에서 정의한 동적 컴파일과는 달리 증분 컴파일에는 프로그램을 처음 실행한 후 추가 최적화가 수반되지 않는다.
참고 항목
- Transformeta 프로세서는 x86 코드를 VLIW 코드로 동적으로 컴파일한다.
- 동적 재컴파일
- 적시 컴파일
외부 링크
- UW 동적 컴파일 프로젝트
- 동적 컴파일을 통한 건축 에뮬레이션
- SCIRUN
- 데이비드 B의 "동적 컴파일, 반사 및 사용자 정의 가능한 앱" 기사. 스코필드와 에릭 버그먼-테렐
- 대니얼 카줄리노의 "고성능 XML: 동적 XPath 표현 컴파일" 기사
- 매튜 R. 아놀드, 스티븐 핑크, 데이비드 P. 그로브, 마이클 힌드, 피터 F. 스위니, 가상 머신의 적응적 최적화에 대한 조사, IEEE의 진행, 92(2), 2005년 2월, 페이지 449-466.