동적 컴파일
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
점증적 컴파일은 컴파일러가 런타임 시스템의 일부로 작동하는 기술이다. POP-2, POP-11, Forth, Lisp, ML 등에서 사용되며, 소스 코드를 즉시 실행 가능한 기계어 블록이나 함수로 변환한다. 대화형 개발을 위해 컴파일 속도가 빠르지만, 표준 배치 컴파일러보다 최적화 수준은 낮을 수 있다. 점증적 컴파일은 인터프리터 언어와 컴파일 언어의 장점을 결합하며, 이식성을 위해 플랫폼 독립적인 언어로 먼저 컴파일한 후 호스트 머신용 기계어로 컴파일하는 두 단계로 작동하는 것이 일반적이다. 동적 컴파일과 달리, 프로그램 실행 후 추가 최적화를 수행하지 않는다.
더 읽어볼만한 페이지
- 컴파일러 구성 - 구문 분석
구문 분석은 입력 데이터를 구조화된 형태로 변환하는 과정으로, 컴퓨터 언어에서는 소스 코드를 분석하여 추상 구문 트리를 생성하고, 자연어 처리에서는 텍스트의 문장 구조와 의미를 분석한다. - 컴파일러 구성 - 바이너리 재컴파일러
| 동적 컴파일 | |
|---|---|
| 프로그램 실행 | |
| 개념 | 프로그램이 컴퓨터에서 실행되는 과정 |
| 목표 | 컴퓨터 시스템의 효율성을 개선하기 위한 프로그램 최적화 |
| 개요 | |
| 정의 | 프로그램이 실행되기 전에 또는 실행 중에 코드를 변경하여 성능을 향상시키는 기술 |
| 유형 | 정적 동적 컴파일 런타임 동적 컴파일 프로파일 기반 동적 컴파일 |
| 동적 컴파일의 이점 | |
| 이점 | 성능 향상 메모리 사용량 감소 코드 크기 감소 전력 소비 감소 |
| 동적 컴파일의 단점 | |
| 단점 | 컴파일 시간 증가 코드 복잡성 증가 디버깅 어려움 |
| 동적 컴파일의 예 | |
| 예시 | Java 가상 머신 (JVM) .NET 공통 언어 런타임 (CLR) JavaScript 엔진 |
| 기술 | |
| 기술 | JIT (Just-In-Time) 컴파일 적응적 최적화 프로파일링 코드 캐싱 |
| 같이 보기 | |
| 관련 항목 | 프로그램 실행 컴파일러 인터프리터 가상 머신 |
2. 점증적 컴파일
점증적 컴파일은 동적 컴파일과 밀접하게 관련된 기술이다. 점증적 컴파일러는 POP-2, POP-11, Forth, 일부 Lisp 버전(예: Maclisp), ML (Poplog ML)에서 사용된다.
점증적 컴파일은 프로그래밍 언어의 컴파일러가 런타임 시스템의 일부여야 함을 요구한다. 소스 코드는 터미널, 파일, 또는 실행 중인 프로그램에 의해 구성된 데이터 구조에서 언제든지 읽어 들여져 기계어 블록 또는 함수(이전과 동일한 이름의 함수를 대체할 수 있음)로 변환되며, 이는 프로그램에서 즉시 사용할 수 있게 된다. 대화형 개발 및 테스트 과정에서 컴파일 속도가 빨라야 하므로, 컴파일된 코드는 표준 '배치 컴파일러'에 의해 생성된 코드만큼 최적화되지 않을 수 있다. 그러나 점증적으로 컴파일된 프로그램은 일반적으로 동일한 프로그램의 인터프리터 버전보다 훨씬 빠르게 실행된다. 따라서 점증적 컴파일은 인터프리터 언어와 컴파일 언어의 장점을 혼합하여 제공한다.
이식성을 돕기 위해 점증적 컴파일러는 일반적으로 두 단계로 작동한다. 즉, 먼저 일부 플랫폼 독립적인 언어로 컴파일하고, 다음으로 해당 언어에서 호스트 머신용 기계어로 컴파일한다. 이 경우 포팅은 '백 엔드' 컴파일러를 변경하는 것만으로 가능하다. 점증적 컴파일은 프로그램이 처음 실행된 후 추가 최적화를 포함하지 않는다는 점에서 동적 컴파일과 다르다.
2. 1. 개념 및 특징
점증적 컴파일러는 POP-2, POP-11, Forth, 일부 Lisp 버전(예: Maclisp) 및 ML (Poplog ML) 등에서 사용된다.점증적 컴파일은 프로그래밍 언어의 컴파일러가 런타임 시스템의 일부일 것을 요구한다. 소스 코드는 터미널, 파일, 또는 실행 중인 프로그램에 의해 구성된 데이터 구조에서 언제든지 읽어 들여져 기계어 블록 또는 함수(이전과 동일한 이름의 함수를 대체할 수 있음)로 변환될 수 있으며, 이는 프로그램에서 즉시 사용할 수 있게 된다. 대화형 개발 및 테스트 과정에서 컴파일 속도가 빨라야 하므로, 컴파일된 코드는 소스 코드를 읽어 들여 나중에 링크하고 실행할 수 있는 오브젝트 파일을 생성하는 표준 '배치 컴파일러'에 의해 생성된 코드만큼 최적화되지 않을 수 있다. 그러나 점증적으로 컴파일된 프로그램은 일반적으로 동일한 프로그램의 인터프리터 버전보다 훨씬 빠르게 실행된다. 따라서 점증적 컴파일은 인터프리터 언어와 컴파일 언어의 장점을 결합하여 제공한다. 이식성을 돕기 위해 점증적 컴파일러는 일반적으로 두 단계로 작동하는 것이 바람직하다. 즉, 먼저 일부 플랫폼 독립적인 언어로 컴파일하고, 다음으로 해당 언어에서 호스트 머신용 기계어로 컴파일한다. 이 경우 포팅은 '백 엔드' 컴파일러만 변경하면 된다. 동적 컴파일과 달리, 점증적 컴파일은 프로그램이 처음 실행된 후 추가 최적화를 포함하지 않는다.
2. 2. 작동 방식
점증적 컴파일러는 POP-2, POP-11, Forth, 일부 Lisp 버전(예: Maclisp), 그리고 적어도 한 버전의 ML (Poplog ML)에서 사용된다.점증적 컴파일은 프로그래밍 언어의 컴파일러가 런타임 시스템의 일부여야 함을 요구한다. 결과적으로 소스 코드는 터미널, 파일 또는 실행 중인 프로그램에 의해 구성된 데이터 구조에서 언제든지 읽어 들여져 기계어 블록 또는 함수(이전과 동일한 이름의 함수를 대체할 수 있음)로 변환되며, 이는 프로그램에서 즉시 사용할 수 있게 된다. 대화형 개발 및 테스트 과정에서 컴파일 속도가 빨라야 하므로, 컴파일된 코드는 소스 코드를 읽어 들여서 나중에 링크하고 실행할 수 있는 오브젝트 파일을 생성하는 표준 '배치 컴파일러'에 의해 생성된 코드만큼 최적화되지 않을 가능성이 있다. 그러나 점증적으로 컴파일된 프로그램은 일반적으로 동일한 프로그램의 인터프리터 버전보다 훨씬 빠르게 실행된다. 따라서 점증적 컴파일은 인터프리터 언어와 컴파일 언어의 장점을 혼합하여 제공한다.
이식성을 돕기 위해 점증적 컴파일러는 일반적으로 두 단계로 작동하는 것이 바람직하다. 즉, 먼저 일부 플랫폼 독립적인 중간 언어로 컴파일하고, 다음으로 해당 언어에서 호스트 머신용 기계어로 컴파일하는 것이다. 이 경우 포팅은 '백 엔드' 컴파일러를 변경하는 것만으로 가능하다. 위에서 정의한 동적 컴파일과 달리, 점증적 컴파일은 프로그램이 처음 실행된 후 추가 최적화를 포함하지 않는다.
2. 3. 활용 언어
POP-2, POP-11, Forth, 일부 Lisp 버전(예: Maclisp), 그리고 적어도 한 버전의 ML (Poplog ML)에서 점증적 컴파일이 사용된다. 점증적 컴파일은 프로그래밍 언어의 컴파일러가 런타임 시스템의 일부여야 함을 요구한다. 결과적으로 소스 코드는 터미널, 파일 또는 실행 중인 프로그램에 의해 구성된 데이터 구조에서 언제든지 읽어 들여져 기계어 블록 또는 함수(이전과 동일한 이름의 함수를 대체할 수 있음)로 변환되며, 이는 프로그램에서 즉시 사용할 수 있게 된다. 대화형 개발 및 테스트 과정에서 컴파일 속도가 빨라야 하므로, 컴파일된 코드는 소스 코드를 읽어 들여서 나중에 링크하고 실행할 수 있는 오브젝트 파일을 생성하는 표준 '배치 컴파일러'에 의해 생성된 코드만큼 최적화되지 않을 가능성이 있다. 그러나 점증적으로 컴파일된 프로그램은 일반적으로 동일한 프로그램의 인터프리터 버전보다 훨씬 빠르게 실행된다. 따라서 점증적 컴파일은 인터프리터 언어와 컴파일 언어의 장점을 혼합하여 제공한다. 이식성을 돕기 위해 점증적 컴파일러는 일반적으로 두 단계로 작동하는 것이 바람직하다. 즉, 먼저 일부 플랫폼 독립적인 언어로 컴파일하고, 다음으로 해당 언어에서 호스트 머신용 기계어로 컴파일하는 것이다. 이 경우 포팅은 '백 엔드' 컴파일러를 변경하는 것만으로 가능하다. 위에서 정의한 동적 컴파일과 달리, 점증적 컴파일은 프로그램이 처음 실행된 후 추가 최적화를 포함하지 않는다.2. 4. 동적 컴파일과의 비교
점증적 컴파일은 밀접하게 관련된 기술이다. 점증적 컴파일러는 POP-2, POP-11, Forth, 일부 Lisp 버전(예: Maclisp)과 적어도 한 버전의 ML (Poplog ML)에서 사용된다.이는 프로그래밍 언어의 컴파일러가 런타임 시스템의 일부여야 함을 요구한다. 결과적으로 소스 코드는 터미널, 파일 또는 실행 중인 프로그램에 의해 구성된 데이터 구조에서 언제든지 읽어 들여져 기계어 블록 또는 함수(이전과 동일한 이름의 함수를 대체할 수 있음)로 변환되며, 이는 프로그램에서 즉시 사용할 수 있게 된다. 대화형 개발 및 테스트 과정에서 컴파일 속도가 빨라야 하므로, 컴파일된 코드는 소스 코드를 읽어 들여서 나중에 링크하고 실행할 수 있는 오브젝트 파일을 생성하는 표준 '배치 컴파일러'에 의해 생성된 코드만큼 최적화되지 않을 가능성이 있다. 그러나 점증적으로 컴파일된 프로그램은 일반적으로 동일한 프로그램의 인터프리터 버전보다 훨씬 빠르게 실행된다. 따라서 점증적 컴파일은 인터프리터 언어와 컴파일 언어의 장점을 혼합하여 제공한다. 이식성을 돕기 위해 점증적 컴파일러는 일반적으로 두 단계로 작동하는 것이 바람직하다. 즉, 먼저 일부 플랫폼 독립적인 언어로 컴파일하고, 다음으로 해당 언어에서 호스트 머신용 기계어로 컴파일하는 것이다. 이 경우 포팅은 '백 엔드' 컴파일러를 변경하는 것만으로 가능하다. 동적 컴파일은 프로그램 실행 중에 최적화를 수행하는 반면, 점증적 컴파일은 프로그램이 처음 실행된 후 추가 최적화를 포함하지 않는다.
참조
[1]
논문
Efficient Implementation of the Smalltalk-80 System
1984-01
[2]
논문
Efficient Implementation of the Smalltalk-80 System
1984-01
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com