자바스크립트 엔진
Chapter 11 - JavaScript Engines
V8 자바스크립트 엔진
- V8 엔진은 C++로 작성되어 Chrome과 Nodejs에서 사용된다.
- 단독 실행이 가능하며 사용자 정의 프로그램을 C++로 작성하면 기능을 임베드하여 사용할 수 있다.
- 인터프리터와 컴파일러 모두 사용한다.
인터프리터 vs 컴파일
인터프리터 언어는 흔히 스크립트라고 칭하는 것들이 속한다. 소스코드를 작성하고 실행하면 한 줄씩 읽어들이며 기계어 코드로 변환한 이후에 실행하고 다시 다음 줄을 읽는 과정을 반복하며 프로그램을 실행한다.
컴파일 언어는 소스코드를 모두 기계어 코드로 전환하는 '컴파일' 단계를 거친다. 실행 단계가 분리되어 있기 때문에 프로그램을 실행하는 속도가 빠르다.
자바스크립트는 어떤 형식의 언어인지에 대해서 논쟁이 있었다. 전통적으로는 인터프리터 언어로 분류되었지만 V8처럼 기계어 코드로 컴파일한 후 실행하는 엔진들이 등장하면서 컴파일과 인터프리팅의 혼합방식으로 동작하게 되었다. 실행 전에 일부 코드를 최적화하고 즉시 기계어로 변환하여 더 빠르게 처리할 수 있게 되었지만 여전히 한 줄씩 실행하는 인터프리터 방식이기도 하다. 성능을 위해 전처리하는 일종의 '프리컴파일' 단계를 거치는 형태이다.
(() => {
console.info('executed'); // 콘솔에 로그가 먼저 남음
console.info(variable); // Uncaught ReferenceError: variable is not defined
})()
예제를 실행해보면 함수도 올바르게 작동하고 콘솔에 로그도 잘 남는다. 한 줄씩 읽고 실행하는 인터프린터 방식이기 때문에 variable
변수를 선언하지 않고 실행하여도 해당하는 줄을 실행하기 전까지 오류가 발생하지 않는다.
다양한 엔진
브라우저 전국시대에는 브라우저마다 구현된 자바스크립트의 버전이 달라 크로스플랫폼을 지원하는 것이 큰 일이었다. 크롬으로 대동단결된 현시점에서는 고민할 거리가 많이 줄긴 했지만 한국에서 만큼은 여전히 Safari나 IE를 완전히 배제할 수는 없다. 그나마 희망적인건 웹 개발자들의 야근과 뱃살을 재물로 삼던 지방호족들의 개싸움판이 대충 정리가 끝났다는 점이다.
대부분의 브라우저들이 Chromium이라는 거대한 물줄기에 올라타기도 했고 '바벨'과 같은 폴리필 도구의 발전이나 웹 표준에 대한 내용들이 많이 발전했기 때문에 앞으로는 '크로스 플랫폼'이라고 하는 작업이 이전처럼 고된 작업이 되지는 않을 전망이다.
초판: 2024. 08. 16. 14:34:39
© 2024 이 문서는 "CC BY 4.0 국제규약" 라이선스로 배포 되었습니다. 모든 권리는 저자에게 있습니다.