소스 대 소스 컴파일러

소스 대 소스 컴파일러(source-to-source compiler), 트랜스컴파일러(transcompiler), 트랜스파일러(transpiler)는 하나의 프로그래밍 언어로 작성된 프로그램의 소스 코드를 입력으로 받아 다른 프로그래밍 언어로 동등한 소스 코드를 만들어내는 컴파일러의 일종이다. 소스 대 소스 컴파일러는 프로그래밍 언어 간에 변환을 할 때 거의 동등한 수준의 추상화로 동작하는 반면, 전통적인 컴파일러는 더 고급의 프로그래밍 언어더 저급인 프로그래밍 언어로 변환한다. 이를테면 소스 대 소스 컴파일러는 파스칼에서 C로 프로그램의 번역을 수행할 수 있다. 자동 병렬화 컴파일러는 고급 언어 프로그램을 입력으로 받고 코드를 변형시키고 병렬 코드 주해(annotation, 예: OpenMP) 또는 언어 구성체(예: 포트란forall 문)와 함께 주해를 달아 놓는다.[1]

소스 대 소스 컴파일의 다른 목적은 레거시 코드를 변환하여 차세대의 기반 프로그래밍 언어 또는 하위 호환성을 유지하지 못하는 API를 사용할 수 있게 하기 위해서이다. 리팩터링할 프로그램이 원래의 구현자의 제어권 밖에 있거나(이를테면 파이썬 2를 파이썬 3로 프로그램을 변환한다든지, 오래된 API를 새로운 API로 프로그램을 변환한다든지 등), 수작업으로 리팩터링을 하기에는 시간이 많이 소요되거나 프로그램의 크기가 비현실적일 때 자동 리팩터링을 수행한다.

트랜스컴파일러는 오리지널 소스 코드의 개발 및 디버그를 용이하게 하기 위해 가능한 원본 코드에 가까운 변환된 코드를 유지할 수 있으며, 원래의 코드의 구조를 변경시킴으로써 변환된 코드가 원본 코드처럼 보이지 않게 만들어질 수 있다.[2] 트랜스컴파일된 소스 코드를 오리지널 코드로 매핑시키는 디버깅 유틸리티들도 있다. 이를테면 자바스크립트 소스 맵[3] 표준은 트랜스컴파일 대 자바스크립트 언어로 웹 브라우저가 실행한 자바스크립트 코드를 원래의 소스로 매핑시킬 수 있게 한다.[4]

트랜스컴파일된 언어의 예로는 클로저 컴파일러, 커피스크립트, 다트, Haxe, 타입스크립트, Emscripten이 포함된다.[5]

같이 보기

편집

각주

편집
  1. “Types of compilers”. compilers.net. 1997–2005. 2019년 7월 19일에 원본 문서에서 보존된 문서. 2010년 10월 28일에 확인함. 
  2. Fowler, Martin (2013년 2월 12일). “Transparent Compilation”. 2013년 2월 13일에 확인함. 
  3. Lenz, Fitzgerald (2011년 2월 11일). “Source Map Revision 3 Proposal”. 
  4. Seddon, Ryan (2012년 3월 21일). “Introduction to JavaScript Source Maps”. html5rocks.com. 2015년 1월 21일에 확인함. 
  5. 에픽게임즈; 모질라. “HTML5 Epic Citadel”.