V8 엔진

MM·2025년 1월 20일

ArticleDigest

목록 보기
7/12
post-thumbnail

V8이란

js에서 바이트코드를 생성하는 웹어셈블리 엔진

특징

  • C++로 작성
  • ECMAScript와 웹어셈블리를 완벽하게 지원
  • 독립실행 및 C++ 애플리케이션 임베드 가능

엔진의 종류

엔진사용된 환경코드 변환 방식
스파이더몽키과거 파이어폭스js를 중간 언어인 바이트코드로 변환 후 기계어로 변환
V8구글 크롬, Node.jsjs를 직접 기계어로 변환

원리

Node.js와 크롬이 기능을 C++로 구현 + V8을 사용해 js 함수로 바인딩
-> 낮은 수준의 언어일수록 시스템에 대한 더 많은 접근 권한과 제어 능력을 가진다!
-> C/C++은 네트워크 카드와 같은 저수준 리소스에 직접 접근 가능.
-> 자바스크립트는 이러한 C++의 기능을 활용해 원하는 작업을 수행

왜 기계어를 직접 사용하지 않을까?

  • 기계어에는 많은 양의 메모리가 필요하다!!
  • 기계어가 항상 바이트코드보다 빠른 것은 아니다!
    • 기계어는 실행 속도는 매우 빠르지만 컴파일이 느림
    • 바이트코드는 컴파일 시간은 짧지만 실행 단계가 느림

작동방식

1. 소스 코드를 파싱하여 추상 구문 트리(AST)로 변환

V8은 js 코드를 직접 이해하지 못한다!
-> 이 과정에서 스코프도 함께 생성

2. AST와 스코프를 기반으로 Ignition이 바이트코드 생성

엔진은 코드를 실행하고 타입 피드백을 수집
-> 실행 단계에서 이 타입 피드백을 제공

Ignition

  • 빠른 저수준 레지스터 기반 인터프리터
  • 백그라운드에서 추상구문트리(AST)를 기계 코드(바이트 코드)로 컴파일
  • 최적화X

3.바이트 코드가 피드백 데이터를 Turbofan으로 전달

바이트 코드로 최적화된 기계어 생성
-> 2번과 과정과 병렬로 처리
-> V8은 자주 사용되는 바이트코드를 핫코드로 표시하여 더 효율적인 기계어로 변환

Turbofan

  • 최적화 코드 컴파일러
profile
중요한 건 꺾여도 그냥 하는 마음

0개의 댓글