문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 PyPy (문단 편집) == 어떻게 구현하나 == [[인터프리터]] 방식의 [[Python]]을 가지고 파이썬으로 돌리는 파이썬을 어떻게 만들었을까. PyPy의 접근법은 이렇다. 1. 먼저 RPython이라고 하는, 파이썬 문법을 엄격하게 만들어 컴파일이 되게 만든 해석기(translate.py)를 Python 코드로 작성한다.[* RPython는 Python의 일부만 구현한 언어(부분 언어)이기 때문에 모든 RPython 코드는 Python 코드이기도 하다. (반대는 성립하지 않는다.)] 1. RPython의 효과적인 컴파일을 위해 다른 언어로 툴체인을 만든다.[* [[시뮬레이터]]나 [[에뮬레이터]]를 제작하는 때에도 이 과정을 반드시 거친다.] 1. Python 구현(런타임)을 RPython 문법으로 작성한다. 1. 3에서 만든 구현을 1 또는 2에서 만든 RPython 해석기로 컴파일한다. 1. 4으로 만든 후보를 이전 또는 다른 구현과 비교(성능 측정), 만족스럽지 않으면 수정한다.(nightly builds) 1. 5에서 만족스러운 결과를 냈다면 출시하고 1 또는 2부터 다시 시작한다.(release) 처음 한번만 기존 파이썬의 도움을 받으면 그 다음부터는 스스로 만든 구현으로 저 과정을 자체적으로 계속 반복할 수 있다. 이러한 이유로 로고가 [[우로보로스#s-1]]인 셈. 이게 얼핏 보면 '[[닭이 먼저냐 달걀이 먼저냐]]' 같은 것으로 착각할 수도 있지만, 이런 식의 접근법은 실제로 프로그래밍 언어를 제작할 때 해당되는 사항이다. 일례로 오래 전에 만들어진 유명 C/C++ 컴파일러인 [[GCC]]도 C/C++로 작성되었다. 파이썬이 스크립팅 언어이기 때문에 일견 특이해보이는 것일 뿐, 인터프리터는 어차피 컴파일된 상태로 돌아가므로 같은 원리다.간단히 보자면 더 좋은 장비의 개발을 위해 기존의 장비를 사용하는 것과 다름이 없다. 짱돌로 뗀석기를 만들고, 뗀석기로 간석기를 만들었던 것 처럼 '''인류 역사에 고고히 전해져오는 방법론''' 을 사용하고 있는 것이다. 이런 식으로 어떤 언어로 자기 자신을 구현하는 것을 '''부트스트래핑'''(Bootstrapping) 또는 '''부팅'''(Booting)[* 운영체제의 부팅과 같은 어원으로, [[뮌히하우젠 남작]]의 모험 이야기에서 유래했다.]이라고 하는데, 이렇게 하는 이유는 처음부터 작업하는 것보다 생산성이 좋기 때문이다. 처음부터 어셈블리어로 작업하면 [[이론상 최강]]의 성능을 발휘할 수는 있으나 그 가능성은 매우 낮고 생산성도 최악이다.([[최적화]]가 그래서 힘들다.) 이 때문에 대부분의 프로그래밍 언어도 초창기에는 어셈블리어나 다른 고급언어의 도움을 받지만, 일정 단계를 넘어서면서 발전에 한계가 오면 스스로의 컴파일러/인터프리터를 제작하게 된다. Haskell 컴파일러인 GHC와 C/C++ 컴파일러인 GCC가 대표적인 예. 물론 생산성에 중점을 두기 때문에 성능이 눈에 띄게 빨라지는 일은 드물고, 단지 우연한 발견 등 여러 이유로 성능이 향상되는 것 뿐이다. PyPy의 경우 Python의 한계를 극복하기 위해 정적인 컴파일이 가능한 RPython을 따로 만들었고 뒤에도 후술한 것처럼 성능 향상을 위해 '''7년이라는 긴 세월'''을 소모했는데, 이것도 어셈블리어로 처음부터 개발하는 것보다는 짧은 것이다.[* 컴퓨터 하드웨어의 발전도 마찬가지다. 처음 IC나 LSI를 설계할 때는 레이아웃을 손으로 그렸지만, 지금 나오는 칩들은 손으로 하기에는 회로의 규모가 지나치게 크기 때문에 전부 CAD로 개발하고 있다.]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기