소스 대 소스 컴파일러(source-to-source compiler), 트랜스컴파일러(transcompiler), 트랜스파일러(transpiler)는 하나의 프로그래밍 언어로 작성된 프로그램의 소스 코드를 입력으로 받아 다른 프로그래밍 언어로 동등한 소스 코드를 만들어내는 컴파일러의 일종이다. 소스 대 소스 컴파일러는 프로그래밍 언어 간에 변환을 할 때 거의 동등한 수준의 추상화로 동작하는 반면, 전통적인 컴파일러는 더 고급의 프로그래밍 언어를 더 저급인 프로그래밍 언어로 변환한다. 이를테면 소스 대 소스 컴파일러는 파스칼에서 C로 프로그램의 번역을 수행할 수 있다. 자동 병렬화 컴파일러는 고급 언어 프로그램을 입력으로 받고 코드를 변형시키고 병렬 코드 주해(annotation, 예: OpenMP) 또는 언어 구성체(예: 포트란의 forall
문)와 함께 주해를 달아 놓는다.[1]
소스 대 소스 컴파일의 다른 목적은 레거시 코드를 변환하여 차세대의 기반 프로그래밍 언어 또는 하위 호환성을 유지하지 못하는 API를 사용할 수 있게 하기 위해서이다. 리팩터링할 프로그램이 원래의 구현자의 제어권 밖에 있거나(이를테면 파이썬 2를 파이썬 3로 프로그램을 변환한다든지, 오래된 API를 새로운 API로 프로그램을 변환한다든지 등), 수작업으로 리팩터링을 하기에는 시간이 많이 소요되거나 프로그램의 크기가 비현실적일 때 자동 리팩터링을 수행한다.
트랜스컴파일러는 오리지널 소스 코드의 개발 및 디버그를 용이하게 하기 위해 가능한 원본 코드에 가까운 변환된 코드를 유지할 수 있으며, 원래의 코드의 구조를 변경시킴으로써 변환된 코드가 원본 코드처럼 보이지 않게 만들어질 수 있다.[2] 트랜스컴파일된 소스 코드를 오리지널 코드로 매핑시키는 디버깅 유틸리티들도 있다. 이를테면 자바스크립트 소스 맵[3] 표준은 트랜스컴파일 대 자바스크립트 언어로 웹 브라우저가 실행한 자바스크립트 코드를 원래의 소스로 매핑시킬 수 있게 한다.[4]
트랜스컴파일된 언어의 예로는 클로저 컴파일러, 커피스크립트, 다트, Haxe, 타입스크립트, Emscripten이 포함된다.[5]
같이 보기
각주