[Revisit JS] 자바스크립트 엔진은 어떻게 인터프리터의 단점을 해결했는가?

2023. 9. 5. 20:32Trip to JavaScript

 

가장 쉽게는 이렇게 답을 얻었다. 원초에 질문은 사실 이 것은 아니었다. 1. 컴파일러 언어와 인터프리터 언어의 차이가 뭘까? 차이는 기본적으로 언어를 해석하는 프로세스가 다르다는 점이다. 컴파일 언어는 컴파일하는 과정을 거쳐 코드를 실행한다. 컴파일이란 아래와 같다.

단순하게 우리의 소스 코드를 컴퓨터가 읽을 수 있는 코드로 변환하는 것을 컴파일이라고한다. 인터프리터 언어의 경우 컴파일처럼 기계어로 번역하는 과정을 따로 갖지 않고 한 줄씩 읽어가면서 번역하고 실행을 시킨다. 여기서 단점은 매번 실행시 번역을 하다보니 코드 실행 속도가 느릴 수 밖에 없다. 컴파일의 경우 컴파일 과정을 거치고 실행 파일이 생성되어 다음 실행 시 빠르게 동작할 수 있다. 코드를 수정하면 그 부분만 재컴파일하기 때문에 별 문제도 아니다.

 

 2. 그럼 자바스크립트 완전히 인터프리터 언어일까? 그건 또 아니다. 이제 웹에서 돌아가기에는 코드가 거대해지고 하다보니 바로 해석해서 쓰기 무리가 생겼다. 그 변화의 첫 걸음이 구글 맵스이다. 그냥 딱 봐도 구글 맵스를 웹에서 돌린다는게 호락호락해보이지 않는다. 그래서 크롬 v8은 부분적으로 컴파일 도입했다. 

 

뭐 이런일을 한다고 한다. 그림으로는 구체적으로 이렇게 흘러간다.

gpt가 알려준 파싱부분을 세분화하면 아래와 같다.

일단 여기까지 알아본다.