Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

rustc_driver와 rustc_interface

rustc_driver

rustc_driver는 본질적으로 rustc의 main 함수입니다. 이는 rustc_interface 크레이트에 정의된 인터페이스를 사용하여 컴파일러의 여러 단계를 올바른 순서로 실행하도록 이어 주는 접착제 역할을 합니다. 가능하다면 rustc_interface보다 rustc_driver를 사용하는 것을 권장합니다.

rustc_driver의 주 진입점은 rustc_driver::run_compiler입니다. 이 빌더는 rustc와 동일한 명령줄 인수와 함께 Callbacks의 구현 및 몇 가지 다른 선택적 옵션을 받습니다. Callbacks는 사용자 정의 컴파일러 구성을 가능하게 하고, 컴파일의 여러 단계가 끝난 뒤에 사용자 정의 코드를 실행할 수 있게 해 주는 trait입니다.

rustc_interface

rustc_interface 크레이트는 외부 사용자가 컴파일 과정을 수동으로 진행할 수 있도록 저수준 API를 제공합니다. 이를 통해 서드파티는 rustc의 내부를 크레이트 분석용 라이브러리로 효과적으로 사용하거나, rustc_driver가 충분히 유연하지 않은 경우(예: rustdoc가 코드를 컴파일하고 출력을 제공하는 경우)에 컴파일러를 임시로 흉내 낼 수 있습니다.

rustc_interface의 주 진입점(rustc_interface::run_compiler)은 컴파일러 구성 변수와, 아직 확정되지 않은 Compiler를 인수로 받는 closure를 받습니다. run_compiler는 구성으로부터 Compiler를 생성하여 closure에 전달합니다. closure 안에서는 Compiler를 사용하여 여러 함수를 호출함으로써 크레이트를 컴파일하고 결과를 얻을 수 있습니다. rustc_interface 사용법의 최소 예제는 여기에서 볼 수 있습니다.

rustc_interface를 사용할 때 필요한 여러 함수의 사용 예는 rustc_driver 구현, 특히 rustc_driver_impl::run_compiler(rustc_interface::run_compiler와 혼동하지 마십시오)를 살펴보면 확인할 수 있습니다.

경고: 컴파일러 내부 API는 그 본질상 언제나 불안정할 수밖에 없습니다. 그렇더라도 불필요하게 기존 기능을 깨뜨리지 않도록 노력하고 있습니다.