더북(TheBook)

C 언어 문법이 나왔다고 당황하지 마세요. 완벽하게 이해하지 않아도 괜찮습니다. 그저 PVM이 어떻게 구성되었는지 흐름을 파악하는 용도입니다. _PyEval_EvalFrameDefault() 함수는 바이트 코드의 실제 실행을 담당하는 함수로, 이 함수 안에서 opcode라는 변수가 바이트 코드를 받아옵니다.

초기식이나 증감식이 없는 for(;;) 문은 무한 루프를 의미합니다. 파이썬의 while True:와 같습니다. 이 무한 루프가 바로 PVM입니다. 무한 루프 안에는 실제 바이트 코드를 분석해서 실행하는 switch 문이 있습니다(파이썬에는 switch 문이 없는 대신 if ~ elif 문이 그 역할을 합니다).

switch 문 안에 있는 case 문을 살펴보면 NOP, LOAD_FAST, STORE_FAST 같은 바이트 코드가 눈에 띕니다. OpcodeNOP라면 break 문을 만날 때까지 case NOP: 부분이 실행됩니다. 다른 opcode라면 그에 해당하는 case 문이 실행됩니다. PVM이 어떻게 작동하는지 어렵지 않게 유추할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.