2011-01-06 3 views

답변

5

우선, 파이썬 은 컴파일 된 언어 인입니다. 런타임시 컴파일 만 수행합니다. 즉, eval을 다른 컴파일 된 언어로 구현하려면 컴파일러를 실행하고 (객체 코드를 동적으로로드 할 수 있어야합니다.) 파이썬에서 (그리고 다른 언어로도) 쉽게 할 수 있습니다. 컴파일러는 런타임의 필수 부분입니다. 기술적으로 C로 작성된 프로그램을 컴파일러를 호출하고 런타임에 결과를로드하는 것을 막는 것은 없습니다 (dlopen 사용). C 런타임은 컴파일러를 필요로하지 않기 때문에 일반적인 경우는 아니므로 대부분의 사용자는 컴파일러를 필요로하지 않습니다. .

+3

C는 또한 본질적으로 컴파일하기가 어렵다고 알려진 컴파일러이므로 "평가"를 위해 컴파일러를 호출하면 잠재적으로 사용자가 5 분 또는 그 이상 기다리게 할 수 있습니다. 파이썬은 컴퓨터 코드가 아니라 가상 컴퓨터로 컴파일되기 때문에 비트를 치밀하게 사로 잡습니다. 따라서 가상 컴퓨터가 언어를 쉽게 컴파일 할 수 있도록 복잡한 내용을 지원하도록 만들 수 있습니다. Lisp는 소스 코드가 기본적으로 이미 추상 구문 트리이기 때문에 시작하기 쉽습니다. 컴파일하기 쉬운 또 다른 언어는 Forth입니다. 원래 편집기는 입력 된대로 각 코드 행을 컴파일합니다. – slebetman

+3

@slebetman : 실제로 C 컴파일러를 호출하는 시스템이 있으며 매우 빠릅니다 (일부 pypy 모드가 하나의 예입니다) - 최신 C 컴파일러는 매우 빠르며 (C++이 아닌) 사실 실제로 가장 시간이 많이 소요되는 구성 요소 C의 빌드주기는 종종 (플랫폼에 따라) 링커이며, 단축/제거 할 수있는 경우 일반적으로 평상시에 평가하는 코드 조각의 크기가 크게 지연되지 않습니다 (예 : point of reference,'icl'은 파이썬 컴파일러가 파이썬의 라인을 VM opcode로 변환하는 것보다 C의 라인을 기계 코드로 더 빨리 컴파일합니다. –

5

물론 다양한 Lisp 환경이 수십 년 동안이 기능을 갖추고 있습니다. Lisp 컴파일러는 일반적으로 함수 단위로 작동하며 컴파일러와 런타임 시스템이 함께 작동합니다.

eval에게 질문을 받으면 Lisp 런타임 환경은 목록 (데이터 구조)을 컴파일러로 전달하여 컴파일합니다. 컴파일러는 시스템에 따라 기계 코드 (또는 시스템에 따라 바이트 코드)를 생성 할 수 있으며,이 함수는 프로그램의 다른 모든 함수와 마찬가지로 컴퓨터 수준에서 호출 할 수 있습니다.

관련 문제