편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
어떠한 언어를 다른 언어로 바꾸어 주는 프로그램을 번역기라고 한다. | 어떠한 언어를 다른 언어로 바꾸어 주는 프로그램을 번역기라고 한다. 보통 세가지 경우를 생각할 수 있다. | ||
보통 | |||
첫째로 '''고급 언어를 저급 언어로 바꾸는 경우'''이다. 도착어가 기계어나 바이트 코드인 경우. 어쨌든 실행하면 CPU가 알아먹어야 하므로 모든 언어는 기계어로 도착한다고 할 수 있겠다. | 첫째로 '''고급 언어를 저급 언어로 바꾸는 경우'''이다. 도착어가 기계어나 바이트 코드인 경우. 어쨌든 실행하면 CPU가 알아먹어야 하므로 모든 언어는 기계어로 도착한다고 할 수 있겠다. | ||
15번째 줄: | 11번째 줄: | ||
* 루비를 자바스크립트로 번역해주는 Opal | * 루비를 자바스크립트로 번역해주는 Opal | ||
<s>전부 도착어가 자바스크립트인 것 같다면 착각이다.</s> | <s>전부 도착어가 자바스크립트인 것 같다면 착각이다.</s> | ||
마지막으로 '''저급 언어를 고급 언어로 바꾸는 경우'''가 있다. 이를 decompiler라고 한다. | 마지막으로 '''저급 언어를 고급 언어로 바꾸는 경우'''가 있다. 이를 decompiler라고 한다. | ||
이런 경우는 소스코드를 실행하기 위한 목적이 아니라 {{--|아니 애초에 고급언어도 결국 기계어로 실행시키는데 굳이 이런 뻘짓을 해서 실행시킬 이유가 뭘까}} [[역공학|프로그램을 분석]]하는 게 주 목적이다. | 이런 경우는 소스코드를 실행하기 위한 목적이 아니라 {{--|아니 애초에 고급언어도 결국 기계어로 실행시키는데 굳이 이런 뻘짓을 해서 실행시킬 이유가 뭘까}} [[역공학|프로그램을 분석]]하는 게 주 목적이다. | ||
해석하는 방식에 따라서도 | 해석하는 방식에 따라서도 두가지로 나눌 수 있다. | ||
하나는 번역할 코드를 모두 읽어들인 후 한 번에 번역하는 '''[[컴파일러]](compiler)'''이다. 컴파일 타임에 오류를 잡아낼 수 있{{--|으며 통번역되기 때문에 속도가 월등히 빠르}}다.<ref>무슨 언어로 컴파일 되냐에 따라 다르다. 보통은 기계어로 컴파일 되기 때문에 아무래도 빠르지만 자바 프로그램의 경우 자바 바이트코드로 컴파일하여 JVM이라는 인터프리터에서 실행하기 때문에 실행속도에 차이가 난다.</ref> | 하나는 번역할 코드를 모두 읽어들인 후 한 번에 번역하는 '''[[컴파일러]](compiler)'''이다. 컴파일 타임에 오류를 잡아낼 수 있{{--|으며 통번역되기 때문에 속도가 월등히 빠르}}다.<ref>무슨 언어로 컴파일 되냐에 따라 다르다. 보통은 기계어로 컴파일 되기 때문에 아무래도 빠르지만 자바 프로그램의 경우 자바 바이트코드로 컴파일하여 JVM이라는 인터프리터에서 실행하기 때문에 실행속도에 차이가 난다.</ref> | ||
27번째 줄: | 23번째 줄: | ||
둘을 융합한 '''JIT(Just-in-time 컴파일)'''이라는 것도 있다. 미리 코드를 통번역 하지 않고, 프로그램을 시작할 때 필요한 부분만 번역하는 방식을 말한다. | 둘을 융합한 '''JIT(Just-in-time 컴파일)'''이라는 것도 있다. 미리 코드를 통번역 하지 않고, 프로그램을 시작할 때 필요한 부분만 번역하는 방식을 말한다. | ||
예로 PyPy, Dalvik VM등이 있다. | 예로 PyPy, Dalvik VM등이 있다. | ||
{{각주}} | {{각주}} | ||