더북(TheBook)

칩의 언어로 말을 한다는 건 컴파일러가 특정 아키텍처에 매여 있다는 증거다. x867 기계어를 타깃으로 한 컴파일러가 ARM8 장치에서 실행될 리 없다. 컴퓨터 아키텍처가 캄브리아기(Cambrian)처럼 폭증하던 1960년대에 이식성(portability)의 부재는 아주 커다란 흠이었다.

예를 들어, AAD(ASCII Adjust AX Before Division)9는 나눗셈을 수행하는 유용한 명령어처럼 보인다. 이 명령어는 이진수로 변환된 2개의 십진수를 피연산자로 받아 하나의 16비트 레지스터를 채운다. 여러분이 마지막으로 16비트 PC에서 BCD를 필요로 했던 시절이 언제였던가?

이런 까닭에 각각 BCPL과 파스칼로 유명했던 마틴 리처즈(Martin Richards), 니클라우스 워스(Niklaus Wirth) 같은 해커들은 컴파일러가 가상 머신 코드를 만들어내도록 개발했다. 실제 칩 명령어가 아닌, 가상의 이상적인 머신용 코드를 생성한 것이다. 워스는 이식성이 있다(portable)는 뜻에서 P-코드(p-code)라 불렀는데, 명령어 하나당 1바이트 길이여서 지금은 보통 바이트코드(bytecode)라고 한다.

이러한 합성 명령어(synthetic instruction)는 언어의 시맨틱과 좀 더 가깝게 매핑되도록 디자인되어 어느 특정 컴퓨터 아키텍처와 복잡하게 쌓인 역사적 특성에 별로 얽매이지 않는다. 언어의 로우레벨 연산을 조밀하게 바이너리로 인코드한 것이라 볼 수 있다.

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