3

C 또는 C++과 같은 컴파일 된 언어를 학습하면 컴파일러에 대해 알게됩니다. 코드를 실행하려면 먼저 컴파일해야합니다. 코드를 컴파일하면 텍스트 표현에서 실행될 수있는 것으로 변환됩니다. 결과 코드는 매우 빠르며 전 처리기 등을 사용할 수 있습니다.해석 된 언어와 컴파일 된 언어가 명확하게 구분되어있는 이유는 무엇입니까?

Python, Matlab 또는 Ruby와 같은 동적 언어를 학습하면 통역사를 알게됩니다. 코드를 실행하려면 인터프리터에 코드를 입력하기 만하면됩니다. 따라서 런타임에 코드를 가지고 놀고 프로그램의 동작을 즉시 변경할 수 있습니다. 이 단점은 해석 언어가 다소 느리고 컴파일 시간이 분명하지 않아 전처리 기가 불가능하다는 것입니다.

그런 다음 인터럽트 된 언어처럼 사용되지만 컴파일 된 언어와 비교하여 성능이 떨어지는 Just-In-Time 컴파일러가 있습니다. 그러나 일반적으로 프리 프로세서를 사용하지 않고 즉시 실행할 수있는 바이너리를 출력하지 않습니다.

그리고 나서 나는 컴파일되고, 해석 될 수 있고, 무엇을 가지고 있으며, 빠른 속도와 강력한 전처리 시스템 (매크로)을 갖는 Lisp을 배웠다. 이것은 리스프 세계에서는 상식 인 것처럼 보이지만 다른 곳에서는 그렇지 않습니다.

C 나 파이썬 용 컴파일러에 널리 사용되는 인터프리터가없는 이유는 무엇입니까? 왜 해석 언어와 컴파일 언어가 강하게 다른가? (나는 파이썬을 컴파일하거나 C를 해석 할 수있는 프로젝트가 있지만 일반적으로 그 프로젝트는별로 인기가없는 것으로 보인다).

+0

C : http://root.cern.ch/drupal/content/cint에 대한 통역사가 있습니다. – Max

+1

전제의 일부에 도전하고 싶습니다. 전처리 기는 * 완전히 별개 *이며 컴파일러 나 인터프리터보다 훨씬 오래 사용할 수 있습니다 (바이너리가 아닌 소스 코드에서 작동합니다). C 및 C 호환 언어에는 특정 전 처리기가 내장되어 있지만 다른 이유가 있습니다 (저렴한 컴파일 타임 추상화가 필요함). 그리고 다음 문장에서 인정하는 ** ** 파이썬 컴파일러와 C 인터프리터가 있습니다. 그들은 주류 인 것처럼 보이지 않지만 그것을 사용하는 공동체가 있습니다. 그리고 어쨌든 "통역사/컴파일러가 없다"는 것은 분명히 거짓입니다. – delnan

+0

@delnan 사실, "해석기/컴파일러가 없습니다"는 잘못되었습니다. 나는 그것을 고쳤다. 그 점을 지적 해 주셔서 감사합니다. 전처리기에 관해서 : 많은 컴파일 된 언어 (특히 C에서 파생 된 모든 것)가 내장되어 있지만, 해석 된 언어가 적은 언어가 있습니다. Lisp를 제외하고 컴파일되고 해석되며 전처리 기가 있습니다. 그리고 그것은 * 유용합니다 *, 그래서 왜 다른 언어가 그 모든 것을 가지고 있지 않습니까? – bastibe

답변

2

가장 많이 사용되는 컴파일 언어는 처음부터 컴파일되도록 설계되었으므로 효율적인 컴파일 된 코드를 생성하기 어려운 기능을 피하는 경향이 있습니다. 이러한 언어 기능에는 동적 타이핑, 비 균일 컨테이너 및 임시 객체 네임 스페이스와 같은 편리한 "동적"객체가 포함됩니다.

따라서 컴파일 된 언어에 대한 인터프리터는 해석 된 언어에서 사용할 수있는 동적 기능을 사용할 수 없지만 컴파일 된 구현의 성능상의 이점은 없습니다.

반대로 컴파일러는 비용에 관계없이 해석 된 언어의 모든 기능과 동작을 복제해야합니다. 일반적으로 이것은 인터프리터 언어에 대한 컴파일 된 프로그램이 인터프리터의 많은 오버 헤드를 전달한다는 것을 의미합니다. 하나의 예로서, 어떤 종류의 eval() 기능은 사실상 인터프리터의 포함을 요구합니다.

마지막으로 이러한 효과는 대규모 사용자 기반, 우수한 지원 및 견고한 구현의 상호 보강적인 장점으로 증폭됩니다.

관련 문제