본문으로 건너뛰기

V8 릴리스 v5.1

· 약 3분
V8 팀

V8 릴리스 프로세스의 첫 번째 단계는 약 6주마다 Chrome 베타 마일스톤을 위해 Chromium이 분기되기 직전에 Git 마스터에서 새 분기를 만드는 것입니다. 우리의 최신 릴리스 분기는 V8 v5.1이며, Chrome 51 Stable과 함께 안정적인 빌드를 릴리스할 때까지 베타 상태를 유지할 것입니다. 이번 V8 버전에서 개발자들이 주목해야 할 새로운 기능을 소개합니다.

향상된 ECMAScript 지원

V8 v5.1은 ES2017 초안 규격 준수를 위한 여러 가지 변경 사항을 포함하고 있습니다.

Symbol.species

Array.prototype.map과 같은 배열 메서드는 해당 하위 클래스의 인스턴스를 출력으로 생성하며, Symbol.species를 변경하여 이를 사용자 정의할 수 있습니다. 이와 유사한 변경 사항이 다른 기본 클래스에도 적용되었습니다.

instanceof 사용자 정의

생성자는 자체 Symbol.hasInstance 메서드를 구현하여 기본 동작을 재정의할 수 있습니다.

반복자 종료

for-of 루프(또는 스프레드 연산자와 같은 기타 내장 반복)를 생성하는 반복자는 종료 메서드가 있는지 확인하며, 루프가 일찍 종료되는 경우 호출됩니다. 이를 통해 반복이 끝난 후 정리 작업을 수행할 수 있습니다.

RegExp 하위 클래스의 exec 메서드

RegExp 하위 클래스는 기본 매칭 알고리즘만 수정할 수 있도록 exec 메서드를 덮어쓸 수 있으며, 이 방법은 String.prototype.replace와 같은 고수준 함수에 의해 호출됩니다.

함수 이름 추론

함수 표현식의 추론된 함수 이름이 이제 일반적으로 ES2015의 규칙 공식화를 따라 함수의 name 속성으로 제공됩니다. 이 변경은 기존 스택 트레이스를 변경하거나 이전 V8 버전과 다른 이름을 제공할 수 있습니다. 또한 계산된 속성 이름을 가진 속성과 메서드에 유용한 이름을 부여합니다:

class Container {
...
[Symbol.iterator]() { ... }
...
}
const c = new Container;
console.log(c[Symbol.iterator].name);
// → '[Symbol.iterator]'

Array.prototype.values

다른 컬렉션 타입과 마찬가지로, 배열의 values 메서드는 배열의 내용을 반복하는 반복자를 반환합니다.

성능 향상

V8 v5.1은 다음 JavaScript 기능과 관련하여 몇 가지 주목할 만한 성능 향상을 제공합니다:

  • for-in 루프 실행
  • Object.assign
  • Promise 및 RegExp 인스턴스화
  • Object.prototype.hasOwnProperty 호출
  • Math.floor, Math.roundMath.ceil
  • Array.prototype.push
  • Object.keys
  • Array.prototype.join & Array.prototype.toString
  • 반복 문자열 평탄화 예: '.'.repeat(1000)

WebAssembly (Wasm)

V8 v5.1은 WebAssembly를 위한 초기 지원을 포함합니다. d8에서 --expose_wasm 플래그를 통해 활성화할 수 있습니다. 또는 Chrome 51(베타 채널)로 Wasm 데모를 직접 체험할 수 있습니다.

메모리

V8은 Orinoco의 추가 부분을 구현했습니다:

  • 병렬 젊은 세대 이동
  • 확장 가능한 기억 세트
  • 블랙 할당

이로 인해 필요 시 지터와 메모리 소비가 감소합니다.

V8 API

우리의 API 변경 사항 요약을 확인하세요. 이 문서는 주요 릴리스 후 몇 주 뒤에 정기적으로 업데이트됩니다.

활성 V8 체크아웃을 보유한 개발자는 git checkout -b 5.1 -t branch-heads/5.1 명령을 사용하여 V8 v5.1의 새로운 기능을 실험해볼 수 있습니다. 또는 Chrome의 베타 채널에 구독하여 새 기능을 직접 체험할 수도 있습니다.