하나의 프로그래밍 언어로 쓰여진 코드를 다른 프로그래밍 언어로 바꾸고자 하는 시도는 그 동안 많이 있어왔고, 상용 툴도 여러 종류가 있습니다. 주된 사용 목적은 호환성 확보인데, 예를 들어 FORTRAN이나 BASIC, 혹은 Python 2로 작성된 코드들을 C++이나 Python 3로 변환하여 통합하는 등의 사용 사례가 있습니다.
그 동안 주로 사용되던 방법은 syntax tree를 사용하여 구조화 한 후, 양 쪽 프로그래밍 언어를 모두 잘 아는 전문가가 만든 규칙들을 적용하여 변환하는 것입니다. 이러한 방식은 때때로 잘 동작하지 않는데다가, 변환에 성공한다고 하더라도 결과물의 코드 품질이 낮은 경우가 많습니다.
자연어 번역 분야를 생각해 보자면, 신경망 모델에 기반한 번역기들은 규칙 기반 번역기의 성능을 월등히 뛰어넘었습니다. 그러나 보통 원시 언어와 목적 언어 표현이 매핑되어 있는 대량의 데이터가 필요한데, 프로그래밍 언어의 경우 이런 데이터를 구하는 것이 매우 어렵습니다. 이 연구에서는 이러한 데이터 부족 현상을 해결하기 위해서 비지도학습을 전면적으로 도입하였고, 특히 자연어 언어모델에서 많이 사용되고 있는 masked language model pretraining을 적용한 특징이 있습니다.
아래는 Java, C++, Python 상호 변환(번역)해주는 Facebook TransCoder의 github 저장소와 논문 링크입니다. Pre-trained model과 test 데이터도 포함되어 있어서 바로 테스트 해 볼 수 있습니다. 논문의 테스트 결과에 따르면, unsupervised 임에도 불구하고 같은 목적 상용 프로그램들의 성능을 상회한다고 합니다.
converts source code from a high-level programming language (such as C++ or
Python) to another. Transcompilers are primarily used for interoperability, and
to port codebases written in an obsolete or deprecated language (e.…