컴파일러의 이해 예제

Posted on

당신은 당신이 선호하는 프로그래밍 언어 / “것들”에서 그 예의 를 제공 할 수 있습니까? 그리고 하나 다른 사람과 구별하는 방법을 몇 가지 설명을 주십시오.. 다른 Ada 컴파일러 노력은 요크 대학과 카를스루에 대학에서 독일에서 진행되었다. 미국에서, Verdix (나중에 합리적 인수) 육군에 Verdix Ada 개발 시스템 (VADS)를 전달했다. VADS는 컴파일러를 포함한 개발 도구 집합을 제공했습니다. 유닉스/VADS는 육군 CECOM 평가에서 모토로라 68020을 대상으로 DEC 울트릭스와 태양 3/60 솔라리스와 같은 다양한 유닉스 플랫폼에서 호스팅될 수 있습니다. [36] 곧 Ada 유효성 검사 테스트를 통과한 많은 Ada 컴파일러가 있었습니다. 자유 소프트웨어 재단 GNU 프로젝트는 여러 언어와 대상을 지원하는 핵심 기능을 제공하는 GNU 컴파일러 컬렉션(GCC)을 개발했습니다. Ada 버전 GNAT는 가장 널리 사용되는 Ada 컴파일러 중 하나입니다. GNAT는 무료이지만 상업적 지원도 있습니다, 예를 들어, AdaCore는 Ada에 대한 상용 소프트웨어 솔루션을 제공하기 위해 1994 년에 설립되었습니다.

GNAT Pro에는 통합 개발 환경을 제공하는 툴 스위트가 있는 GNU GCC 기반 GNAT가 포함되어 있습니다. 위의 링크를 열면 왼쪽의 예제 코드에서 생성된 어셈블리를 볼 수 있습니다. 어셈블리 코드의 3과 4 줄은 컴파일러가 AST에서 상수와 마주했을 때 상수에 대한 코드를 생성한 방법을 보여 준다. 또한 컴파일러에는 최적화를 위해 인터프리터가 포함될 수 있습니다. 예를 들어 컴파일 중에 식을 실행할 수 있고 출력 프로그램에 삽입된 결과를 실행하면 프로그램이 실행될 때마다 다시 계산할 필요가 있으므로 최종 프로그램의 속도가 크게 빨라질 수 있습니다. 적시 컴파일 및 바이트 코드 해석에 대한 현대의 추세는 때때로 컴파일러와 인터프리터의 전통적인 분류를 더욱 흐리게 합니다. 인터프리터는 이 프로그램의 데이터뿐만 아니라 높은 수준의 프로그래밍 언어로 작성된 실행 가능한 원본 프로그램을 읽고 데이터에 대해 프로그램을 실행하여 일부 결과를 생성합니다. 한 가지 예는 대화식으로 운영 체제 명령을 실행하는 유닉스 쉘 인터프리터입니다.

컴파일러 분석 및 최적화의 범위는 매우 다양합니다. 범위는 기본 블록 내에서 작동에서 전체 절차 또는 전체 프로그램까지 다양합니다. 최적화의 세분성과 컴파일 비용 사이에는 장단점이 있습니다. 예를 들어 peephole 최적화는 컴파일 중에 수행이 빠르지만 코드의 작은 로컬 조각에만 영향을 미치며 코드 조각이 나타나는 컨텍스트와 독립적으로 수행할 수 있습니다. 반대로, 절차 간 최적화에는 더 많은 컴파일 시간과 메모리 공간이 필요하지만 여러 함수의 동작을 동시에 고려하여만 가능한 최적화를 활성화할 수 있습니다. C 컴파일러의 백 엔드보다 코드 생성기의 더 나은 예제를 가질 수 없습니다. 여기에서 찾을 수 있습니다. 일부 언어 사양에는 구현에 컴파일 기능이 포함되어야 한다는 것을 명시합니다. 예를 들어, 일반적인 리스프. 그러나 커먼 리스프의 정의에 내재된 것은 해석되지 않습니다. 다른 언어에는 인터프리터에서 구현하기가 매우 쉬운 기능이 있지만 컴파일러 작성을 훨씬 어렵게 만드는 기능이 있습니다.

예를 들어 APL, SNOBOL4 및 많은 스크립팅 언어를 사용하면 프로그램이 일반 문자열 작업을 사용하여 런타임에 임의의 소스 코드를 생성한 다음 특수 평가 함수에 전달하여 해당 코드를 실행할 수 있습니다.