본문으로 건너뛰기

V8 릴리즈 v7.3

· 약 3분
크레멘스 배커스, 컴파일러 관리자

매 6주마다 우리는 릴리즈 프로세스의 일부로 V8의 새로운 브랜치를 만듭니다. 각 버전은 Chrome 베타 마일스톤 직전에 V8의 Git master에서 분기됩니다. 오늘 우리는 최신 브랜치 V8 버전 7.3을 발표하게 되어 기쁩니다. 이 브랜치는 몇 주 후 Chrome 73 Stable과 함께 릴리즈될 때까지 베타 단계에 있습니다. V8 v7.3는 개발자 중심의 다양한 새로운 기능들로 가득합니다. 이 글에서는 릴리즈를 기대하며 주요 기능 몇 가지를 미리 살펴봅니다.

비동기 스택 추적

--async-stack-traces 플래그를 기본적으로 활성화합니다. 제로-코스트 비동기 스택 추적은 비동기 코드로 가득 찬 생산 환경에서 문제를 진단하기 쉽게 만들어 줍니다. 이제 주로 로그 파일/서비스에 전송되는 error.stack 속성이 문제를 유발한 원인을 더 자세히 보여줍니다.

더 빠른 await

위에서 언급한 --async-stack-traces 플래그와 관련하여, 우리는 --harmony-await-optimization 플래그도 기본적으로 활성화하고 있습니다. 이는 --async-stack-traces의 전제조건입니다. 더 빠른 비동기 함수와 프로미스에 대한 자세한 내용을 참조하세요.

더 빠른 Wasm 시작

Liftoff 내부 최적화를 통해 WebAssembly 컴파일 속도를 크게 개선했으며, 생성된 코드 품질에는 영향을 미치지 않았습니다. 대부분의 작업에서는 컴파일 시간이 15–25% 단축되었습니다.

Liftoff의 Epic ZenGarden 데모에서의 컴파일 시간

JavaScript 언어 기능

V8 v7.3에는 여러 새로운 JavaScript 언어 기능이 포함되어 있습니다.

Object.fromEntries

Object.entries API는 이미 잘 알려져 있습니다:

const object = { x: 42, y: 50 };
const entries = Object.entries(object);
// → [['x', 42], ['y', 50]]

하지만, entries 결과를 다시 동일한 객체로 변환할 쉬운 방법이 없었습니다... 지금까지는요! V8 v7.3는 Object.fromEntries()를 지원하며, 이는 Object.entries의 반대 작업을 수행하는 새로운 내장 API입니다:

const result = Object.fromEntries(entries);
// → { x: 42, y: 50 }

더 많은 정보와 사용 사례는 우리의 Object.fromEntries 기능 설명서를 참조하세요.

String.prototype.matchAll

글로벌(g) 또는 고정(y) 정규 표현식의 일반적인 사용 사례는 문자열에 적용하고 모든 일치를 반복하는 것입니다. 새로운 String.prototype.matchAll API는 캡처 그룹이 있는 정규 표현식의 경우 특히 이 작업을 더 쉽게 만듭니다:

const string = '즐겨찾는 GitHub 저장소: tc39/ecma262 v8/v8.dev';
const regex = /\b(?<owner>[a-z0-9]+)\/(?<repo>[a-z0-9\.]+)\b/g;

for (const match of string.matchAll(regex)) {
console.log(`${match[0]} 위치 ${match.index}, '${match.input}'에서 찾음`);
console.log(`→ 소유자: ${match.groups.owner}`);
console.log(`→ 저장소: ${match.groups.repo}`);
}

// 출력:
//
// tc39/ecma262 위치 23, '즐겨찾는 GitHub 저장소: tc39/ecma262 v8/v8.dev'에서 찾음
// → 소유자: tc39
// → 저장소: ecma262
// v8/v8.dev 위치 36, '즐겨찾는 GitHub 저장소: tc39/ecma262 v8/v8.dev'에서 찾음
// → 소유자: v8
// → 저장소: v8.dev

더 자세한 내용은 우리의 String.prototype.matchAll 설명서를 읽어보세요.

Atomics.notify

Atomics.wake는 최근 명세 변경에 따라 Atomics.notify로 이름이 변경되었습니다.

V8 API

git log branch-heads/7.2..branch-heads/7.3 include/v8.h를 사용하여 API 변경 사항 목록을 확인하세요.

활성 V8 체크아웃을 가지고 있는 개발자는 git checkout -b 7.3 -t branch-heads/7.3를 사용하여 V8 v7.3의 새로운 기능을 실험해볼 수 있습니다. 또는 Chrome의 베타 채널을 구독하여 곧 새 기능을 직접 사용해볼 수도 있습니다.