Fork me on GitHub

ECMAScript 2016 features & changes

Translator: U-Yeong Ju Edit on GitHub See Revisions

ECMAScript 2016에 새롭게 추가될 기능이 50회차 Ecma TC39 미팅에서 확정됐습니다.

Array.prototype.includes

ES6에서 Array.prototype.contains로 추가될 예정이었지만, Break the web(웹을 망가뜨리는 구현 방식)이었기 때문에 연기 됐던 기능입니다.

Exponentiation Operator

x ** yMath.pow(x, y)와 같은 기능입니다.

자세한 내용은 아래의 몇 가지 글을 참고해주세요.

ES2016부터는 기능을 Proposal하고, 그것이 승인되면 ECMAScript의 사양에 합쳐지는 형태로 프로세스가 변경돼 있습니다.

이번에 추가된 기능이 합쳐진, 사양의 스냅샷은 3월에 공개되고, 최종적으로 Ecma GA에서 승인된 후 6월에 정식 ECMAScript 2016으로써 릴리즈됩니다.

아래에 이미 릴리즈된 ES2016의 드래프트(초안) 버전을 보는 것이 이해하기 쉬울 것 같습니다.

ECMAScript도 WHATWG의 HTML처럼 Living Standard로 돼 있어, 버전 번호를 스냅샷으로 관리합니다.

지금까지의 드래프트 버전에는 추가된 기능 이외에도 사양적인 여러 업데이트가 포함돼 있습니다.

변경된 사양

몇 가지 예를 들어보겠습니다.

Promise.allPromise.race@@species를 무시하도록 변경

ES6에서 이미 Promise.resolve@@species를 무시하는 변경이 들어가 있었으며, 이번에 all과 race에도 이러한 변경이 들어가게 됐습니다.

HostPromiseRejectionTracker(일본어) 추상 인터페이스 추가

이것은 HostPromiseRejectionTracker를 Host 환경(브라우저 등)이 구현하고 있다면
Promise에서 Unhandled Rejection이 발생했을 때 호출되는 방법에 관한 사양입니다.

이 사양과 WHATWG/html이 연계 한, 'unhandledRejection''rejectionHandled' 이벤트의 사양이 구현돼 있습니다.
(구체적으로 사용자가 사용하게 될 것은 이쪽입니다)

GeneratorFunction에서 [[Construct]]를 제외

ES6에서는 GeneratorFunction이 new 가능했습니다.
하지만, ES2016에서는 예외가 발생하도록 변경됐습니다.
([[Construct]]을 갖는다는 것은 new가 가능하다는 뜻입니다)

var g = { *g() {} }.g;
new g(); // ES6에서는 valid, ES2016에서는 throw error

Proxy의 [[Enumerate]] trap 변경

아직 사양이 변경되진 않았지만, 변경이 예정돼 있는 사항입니다.

이처럼, 기능이 추가되는 것 외에도 세세한 변경이 이뤄지고 있습니다.
Breaking Change지만, 아직 사용하고 있는 케이스가 적기(애초에 구현한 브라우저가 적다) 때문에 빠르게 수정하고 있다는 느낌입니다.

변경 사항을 알 수 있는 방법

이러한 정식 변경 사항을 어디서 알 수 있는지를 간단하게 정리해보겠습니다.
세세한 수정 이외의 변경은, 2개월 마다 1회 개최되고 있는 TC39의 미팅에서 의논된 후 추가됩니다.

개인적으로 느끼는 정보 전달이 빠른 순번부터 나열하면 Twitter > Github > 기타 입니다.

Twitter

TC39의 미팅 중엔 TC39 멤버의 Twitter를 보면 빠르게 정보를 얻을 수 있습니다.

현재, Editor인 @bterlson@rwaldron의 트위터를 본다면 좋을 것 같습니다.

TC39 Meeting Notes

미팅의 내용은 후에 Github에 공개됩니다.

미팅 노트가 공개되면, 매 회 저는 독서회를 진행합니다. 흥미가 있는 사람은 함께 읽읍시다.

GitHub

ECMAScript의 사양은 Github에서 관리되고 있습니다.
때문에 실제로 들어가는 변경은 Issue나 Pull Request를 보면 알 수 있습니다.

기타

기타로 공식적인 것은 아니지만 ECMAScript 관련 정보를 잘 소개하는 아래와 같은 사이트를 몇 개 소개합니다.

저도 @EcmascriptDaily에 ECMAScript 관련 정보를 발행하고 있으니,
흥미가 있는 사람은 팔로우 하시면 좋을 것 같습니다.

Realtime JSer.info같은 느낌으로 수시로 갱신 됩니다.

Contributing

개인적으로 저는 그다지 사양을 논의하는데 참가하고 싶다는 욕심은 없지만,
문서는 항상 올바르게 작성돼야 한다고 생각하기 때문에 이와 관련된 커밋을 하고 있습니다.

TC39 MTG Notes MTG | Doorkeeper에 매회 미팅 노트의 수정 사항을 보내고 있습니다.

tc39 meeting notes

또, Proposal이 Stage 3 정도 되면 그 Proposal의 저장소가 github.com/tc39에 이관됩니다.
그 때 URL이 예전 그대로인 경우가 자주 있어 수정이나 지적하는 일을 하고 있습니다.

이러한 사항은 발견하면 누구든지 할 수 있고, 컨트리뷰트 하기 쉽다고 생각합니다.
ecma262test262도 Editorial 되거나 작은 변경이라면 직접 Issue나 Pull Request 가능하므로, 이와 관련된 것을 살펴보면 재미있을지도 모르겠습니다.

Pull Request to this article
JSer.info Slackに参加する