소스 대 소스 컴파일러는 한 프로그래밍 언어의 소스 코드를 다른 프로그래밍 언어의 소스 코드로 변환하는 컴파일러의 일종이다. 초기에는 어셈블리 언어 간의 변환에 사용되었으며, 1980년대 초 최적화 컴파일러 기술이 도입되면서 더욱 발전했다. 현재는 다양한 프로그래밍 언어 구현 및 코드 이식에 활용되며, 트랜스컴파일러 파이프라인을 통해 재귀적 트랜스컴파일링을 수행하기도 한다.
더 읽어볼만한 페이지
소스 대 소스 컴파일러 - 스칼라 (프로그래밍 언어) 스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다.
소스 대 소스 컴파일러 - 타입스크립트 타입스크립트는 마이크로소프트에서 개발한 자바스크립트의 상위 집합으로, 정적 타입 지정, 타입 추론 등의 기능을 제공하여 코드의 안정성과 가독성을 높이는 언어이다.
유틸리티 소프트웨어 종류 - 데이터 압축 데이터 압축은 디지털 데이터의 크기를 줄여 저장 공간을 절약하고 전송 속도를 향상시키는 기술로, 모르스 부호에서 시작하여 ZIP, JPEG, LZ77 등 다양한 방식으로 발전해 왔으며, 무손실 압축과 손실 압축으로 나뉘고 최근에는 인공지능 기술을 활용하여 효율성을 높여 다양한 분야에서 활용되고 있다.
유틸리티 소프트웨어 종류 - 바이러스 검사 소프트웨어 바이러스 검사 소프트웨어는 악성 소프트웨어의 감염을 탐지, 제거 또는 차단하는 소프트웨어로, 다양한 기술을 사용하여 악성코드를 식별하고 시스템을 감시하며, V3, 노턴 안티바이러스, 알약 등 다양한 종류가 존재한다.
소스 대 소스 컴파일러
개요
유형
컴파일러
종류
소스 코드 → 소스 코드
다른 이름
트랜스컴파일러 트랜스파일러
상세 정보
목적
하나의 프로그래밍 언어로 작성된 소스 코드를 다른 언어의 동등한 소스 코드로 변환
사용 이유
다양한 플랫폼 지원 레거시 시스템과의 호환성 유지 새로운 프로그래밍 언어 기능 활용 가독성 향상 난독화
예시
C에서 C++로 변환 자바에서 C#로 변환 파이썬에서 자바스크립트로 변환 CoffeeScript에서 자바스크립트로 변환 TypeScript에서 자바스크립트로 변환 C++에서 High Level Shading Language로 변환
트랜스컴파일러라는 개념은 컴퓨터 과학 초기부터 존재했지만, 1980년대에 들어서면서 본격적으로 주목받기 시작했다.
1981년 디지털 리서치는 인텔 8080용 .ASM 소스 코드를 인텔 8086용 .A86 소스 코드로 변환하는 XLT86을 개발했다. XLT86은 8080 레지스터를 사용한 전반적인 데이터 흐름 분석을 통해 출력 코드 크기를 최적화하고, CP/M-80과 프로그램을 CP/M-86과 으로 자동 이식할 수 있도록 지원했다.[5] XLT86은 PL/I-80로 작성되었으며, CP/M-80 환경뿐만 아니라 DECVMS에서도 작동했다.[5]
1980년 팀 패터슨은 86-DOS의 일부로 TRANS.COM을 작성했다. TRANS.COM은 몇몇 Z80어셈블러 소스 코드를 8086용 .ASM 소스 코드로 변환했지만, 제어 코드, 레지스터, 모드의 하위 집합만 지원하여 수동 변환 및 수정이 필요했다. 또한 레지스터나 점프 최적화를 수행하지 않았다.[6][7]
2. 1. 초기 어셈블리 언어 번역기 (1970년대 후반 ~ 1980년대 초반)
인텔은 1978년에 8비트 프로세서인 8080용으로 작성된 소스 코드를 16비트 프로세서인 8086용 소스 코드로 변환하는 CONV86 (CONV-86 및 CONVERT 86으로도 불림)을 개발하여 소스 코드 호환성을 지원했다. 이 번역기는 ISIS-II 기반이었으며, 여러 단계의 변환을 지원했고, 8인치 플로피 디스크 드라이브가 장착된 MDS-800에서 2 MHz로 실행되었다.
시애틀 컴퓨터 프로덕츠(SCP)는 8080 및 자일로그(Zilog) Z80 어셈블리 소스 코드를 8086 어셈블리 소스 코드로 변환하는 TRANS86.COM(이후 TRANS.COM)을 개발했다. 팀 패터슨이 1980년에 86-DOS를 개발하는 동안 작성한 이 유틸리티는 크로스 어셈블러(cross-assembler) ASM86 for CP/M-80과만 호환되는 형식이었지만, 연산 코드(opcode), 레지스터 및 모드의 하위 집합만 지원했으며, 변환 후에도 상당한 수동 수정 및 재작업이 필요했다. 또한, 단순한 음역(transliteration)만 수행했으며, 무작위 대입 단일 패스 번역기(single-pass translator)는 레지스터 및 점프 최적화를 수행하지 않았다.
SORCIM은 1980년에 TRANS86으로도 불린 8080에서 8086으로의 소스 코드 변환기를 제공하여 CP/M-80 응용 프로그램 코드를 MS-DOS로(ACT86과 호환되는 형식으로) 이식할 수 있게 했다. SCP 프로그램과 유사하게 명령어 단위로 번역되었으며, 조건 분기에 대한 약간의 최적화가 적용되었다.
2. 2. 최적화 컴파일러 기술 도입 (1980년대 초반)
디지털 리서치의 XLT86은 1981년에 출시된 프로그램으로, 최적화 컴파일러 기술을 소스 번역 과정에 도입한 초기 사례 중 하나이다. 게리 킬달이 작성한 XLT86은 인텔 8080 프로세서용 .ASM 소스 코드를 인텔 8086용 .A86 소스 코드로 변환했다. 이 프로그램은 전역 데이터 흐름 분석을 통해 코드 크기를 최적화하고, CP/M-80 및 MP/M-80 프로그램을 CP/M-86 및 MP/M-86 플랫폼으로 자동 포팅할 수 있도록 지원했다. XLT86 자체는 PL/I-80으로 작성되었으며, CP/M-80 플랫폼 및 DEC VAX/VMS에서도 사용할 수 있었다.
2. 3. 기타 어셈블리 언어 번역기
2500 AD 소프트웨어는 Z80을 사용하는 CP/M-80 머신용 XASM 제품군과 Zilog ZEUS 및 Olivetti PCOS 시스템의 일부로 8080에서 8086으로의 소스 코드 변환기를 제공했다.
1979년부터 Zilog는 PDS 8000 개발 시스템의 일부로 Z80에서 Z8000으로의 변환기를 제공했다. AMC와 2500 AD 소프트웨어도 Z80에서 Z8000으로의 변환기를 제공했다. 2500 AD 소프트웨어의 변환기는 TRANS로 명명되었으며 Z80 CP/M, CP/M-86, MS-DOS 및 PCOS에서 사용할 수 있었다.
3. 프로그래밍 언어 구현
많은 프로그래밍 언어가 트랜스컴파일러를 통해 구현되거나, 트랜스컴파일러를 주요 구현 방식으로 사용한다.
일부 프로그래밍 언어는 처음 구현될 때부터 트랜스컴파일러를 사용했으며, CoffeeScript처럼 여전히 트랜스컴파일러가 기본 구현인 경우도 있다. CoffeeScript 유지 관리자는 JavaScript로 컴파일되는 언어 목록을 제공한다.
트랜스컴파일러는 개발자가 기존 코드베이스를 다른 언어로 전환할 때 유용하게 사용된다. 전체 소프트웨어를 수동으로 다시 작성하는 것보다 트랜스컴파일러를 사용하는 것이 더 효율적일 수 있다. 트랜스컴파일러의 품질에 따라 코드가 제대로 작동하기 위해 수동 개입이 필요할 수도 있고 그렇지 않을 수도 있다.
코드베이스 포팅에 사용되는 모든 트랜스컴파일러는 가독성 및 플랫폼 규칙 측면에서 최대 코드 품질을 달성해야 할 경우 출력 소스 코드의 수동 조정을 예상한다.
C2Rust는 C 코드를 입력으로 받아 unsafe 러스트 코드를 출력하여 원래 코드베이스와의 호환성을 유지한다. 이 프로세스에는 여러 가지 문서화된 제한 사항이 있으며, 결과 코드를 안전하고 관용적인 러스트 코드로 변환하는 것은 번역 후 수동 작업이지만, 이를 위한 자동화된 도구가 있다.
Swiftify는 Objective-C에서 Swift로의 온라인 소스 간 변환 도구이다. 이는 iOS 코드베이스의 전부 또는 일부를 Swift로 마이그레이션하는 개발자를 지원한다. 변환은 주로 Objective-C와 Swift 간의 구문 변환을 목표로 하며, Apple이 Swift와 Objective-C 런타임 간의 호환성을 보장하기 위해 노력했기 때문에 도움이 된다.
5. 트랜스컴파일러 파이프라인
트랜스컴파일러 파이프라인은 재귀적 트랜스컴파일링을 통해 여러 기술 계층을 연결하고, 각 계층 간 변환 단계를 거쳐 기술을 반복적으로 변환하는 방식으로 구성된다. 이러한 파이프라인은 XSLT와 같은 범용 변환 도구를 사용하여 구축할 수 있다.
5. 1. 재귀적 트랜스컴파일링
트랜스컴파일러 파이프라인은 ''재귀적 트랜스컴파일링''의 결과이다. 여러 계층의 기술을 연결하고 각 계층 사이에 트랜스컴파일 단계를 거치면 기술을 반복적으로 변환하여 분산된 언어 독립 사양을 효과적으로 생성할 수 있다.
XSLT는 다양한 기술 간에 사용될 수 있는 범용 변환 도구로, 이러한 파생 코드 파이프라인을 만들 수 있다. '''재귀적 변환 컴파일'''(또는 '''재귀적 변환''')은 변환 컴파일의 개념을 재귀적으로 적용하여 변환 파이프라인을 생성하는 과정으로, (종종 단일 진실 공급원에서 시작하여) 한 기술을 다른 기술로 반복적으로 변환한다.
이 과정을 반복함으로써 A → B → C → D → E → F를 거쳐 다시 A(v2)로 변환할 수 있다. A → A(v2)의 파이프라인을 통해 일부 정보가 보존되며, 해당 정보는 (추상적인 수준에서) 각 구성 요소 A–F가 동의하는 사항을 보여준다.
변환 컴파일러 파이프라인이 생성하는 각기 다른 버전에서 해당 정보는 보존된다. 이는 다양한 모양과 크기를 가질 수 있지만, 위 파이프라인에서 여섯 번의 변환 컴파일을 거쳐 A(v2)로 돌아올 때 정보는 원래 상태로 돌아간다.
A–F–A(v2)의 각 형식을 통한 변환에서 살아남는 이 정보는 (정의상) 파생 콘텐츠 또는 파생 코드이다.
재귀적 변환 컴파일은 변환 컴파일러가 개발을 용이하게 하고 원래 소스 코드의 디버깅을 위해 변환된 코드를 소스 코드에 최대한 가깝게 유지하거나, 변환된 코드가 소스 코드처럼 보이지 않도록 원래 코드의 구조를 크게 변경할 수 있다는 사실을 활용한다. 또한 변환 컴파일된 소스 코드를 원래 코드로 다시 매핑하는 디버깅 유틸리티도 있다. 예를 들어, 자바스크립트 소스 맵을 사용하면 웹 브라우저에서 실행되는 자바스크립트 코드를 자바스크립트 언어로 변환된 원래 소스에 매핑할 수 있다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.