번역기

117.111.1.240 (토론)님의 2021년 1월 16일 (토) 15:27 판

어떠한 언어를 다른 언어로 바꾸어 주는 프로그램을 번역기라고 한다. 번역기가 발전하게 된다면 사람을 통한 학습을 하지 않고도 번역기를 통해 외국인과 자연스레 대화하는 날이 올것이다. 지금의 시점에서도 간단한 여행회화 정도는 문제없는 수준이다.

프로그래밍에서의 번역기

보통 세 가지 경우를 생각할 수 있다.

첫째로 고급 언어를 저급 언어로 바꾸는 경우이다. 도착어가 기계어나 바이트 코드인 경우. 어쨌든 실행하면 CPU가 알아먹어야 하므로 모든 언어는 기계어로 도착한다고 할 수 있겠다.

둘째로 고급 언어를 고급 언어로 바꾸는 경우이다. source-to-source compiler 또는 트랜스파일러(transpiler)라고 한다. 구현체나 버전의 차이를 매꿔야 하는 경우, 혹은 도착어를 좀 더 쉽게 쓰려 하는 경우 등이 이에 속한다.

다음의 예가 있겠다:

  • 자바스크립트로 번역되는 CoffeeScript[1]
  • 자바스크립트로 번역되는 Dart[1]
  • 자바스크립트로 번역되는 TypeScript[2]
  • 루비를 자바스크립트로 번역해주는 Opal

전부 도착어가 자바스크립트인 것 같다면 착각이다.

마지막으로 저급 언어를 고급 언어로 바꾸는 경우가 있다. 이를 decompiler라고 한다. 이런 경우는 소스코드를 실행하기 위한 목적이 아니라 아니 애초에 고급언어도 결국 기계어로 실행시키는데 굳이 이런 뻘짓을 해서 실행시킬 이유가 뭘까 프로그램을 분석하는 게 주 목적이다.

해석하는 방식에 따라서도 두 가지로 나눌 수 있다.

하나는 번역할 코드를 모두 읽어들인 후 한 번에 번역하는 컴파일러(compiler)이다. 컴파일 타임에 오류를 잡아낼 수 있으며 통번역되기 때문에 속도가 월등히 빠르다.[3]

또 다른 하나는 컴파일러와 다르게 한 줄 한 줄씩 읽어들인 후 번역하는 인터프리터(interpreter)이다. 특징은 미리 번역할 필요가 없기 때문에 코드를 즉시 실행할 수 있어 테스트에 유용하며 변수의 종류를 지정하지 않아도 인터프리터가 잡아내기 때문에 문법이 유연해진다. 대표적인 인터프리터 언어로는 파이썬이 있다.

둘을 융합한 JIT(Just-in-time 컴파일)이라는 것도 있다. 미리 코드를 통번역 하지 않고, 프로그램을 시작할 때 필요한 부분만 번역하는 방식을 말한다. 예로 PyPy, Dalvik VM등이 있다.

각주

  1. 1.0 1.1 언어 자체가 JavaScript로 번역되는 것을 전제로 만들어졌다.
  2. 언어 자체가 JavaScript로 번역되는 것을 ㅈ...
  3. 무슨 언어로 컴파일 되냐에 따라 다르다. 보통은 기계어로 컴파일 되기 때문에 아무래도 빠르지만 자바 프로그램의 경우 자바 바이트코드로 컴파일하여 JVM이라는 인터프리터에서 실행하기 때문에 실행속도에 차이가 난다.