TC39 proposals
12월 초, Object내 optional-chaining 에 관련된 스펙이 TC39 위원회에 의해 stage4로 전환되어, ES2020 스펙에 적용된다는 뉴스가 올라왔습니다. 관련되어 TC39는 무엇인지와 각 stage별 특징에 대해 간략하게 정리해보고자 합니다.
TC39
TC39는 ECMAScript내 위원회로써, ECMAScript 프로그래밍 언어를 발전시키고 사양을 작성하는 위원회입니다. 각 위원회는 브라우저 벤더 및 회사들로 이루어져 있으며, 멤버는 각 회사에서 보낸 대표를 의미하는 것이기도 합니다. TC39는 합의(컨센서스)에 의해 이루어진다는 점이 특징인데, 이는 결정권에 있어서 한명이라도 반대 의사가 있다면, 이에 대한 내용을 제고하는 방식을 사용합니다. 또한, 이러한 제안은 실질적으로 기능을 구현하는 의무로 이어지는 점이 특징입니다.
TC39 프로세스
ECMAScript에 대한 각 기능은 0단계(Stage0)부터 제안되어 각 단계를 거치게 됩니다. 한 단계에서 다음 단계로의 진행은 TC39의 승인을 받아야 합니다.
Stage0 - strawman (허수아비)
허수아비 단계라는게 재밌습니다. ECMAScript에 대한 아이디어를 자유 형식으로 제출하는 단계로써, 제출은 TC39의 회원 또는 TC39내 기고자로 등록된 비회원이 제출해야 합니다. TC39 회의에서 문서를 검토한 후 stage0 단계 제안서가 있는 페이지에 해당 내용을 추가해야 합니다.
Stage1 - Proposal (제안)
실제 관련 스펙을 제안하는 단계입니다. 이때는 제안을 이끌어갈 멤버, 소위 챔피언
을 선정해야 합니다. 이 챔피언 혹은 공동의 챔피언은 TC39의 구성원이어야 합니다. 제안된 내용은 텍스트 형태로 설명해야 하며, 예제 API, 알고리즘등이 설명되어야 합니다. 추가적으로, 제안에 대해 다른 기능과의 상호 작용 및 잠재적인 구현 문제 등이 조사되며, 구현 측면에서 폴리필(Polyfill) 또는 데모가 추가되어야 합니다. 1단계 제안이 수락되면, 이 제안에 대한 검토 및 논의가 있을 것임을 공지합니다.
Stage2 - Draft (초안)
사양에 포함될 첫 번째 버전이 명시되며, 해당 시점에서 최종적으로 기능이 표준에 포함될 수 있습니다. 이때, 제안서에는 초기사양에 대한 텍스트 및 구문과 의미에 대한 공식적인 설명이 포함되어야 합니다. 이때는 ECMAScript 사양의 공식 언어를 사용해야 합니다. 사양에는 모든 주요한 구문 및 API, TODO, placeholder 또는 편집에 관련된 이슈가 포함되어야 하며, 구현 내용에는 Babel과 같은 트랜스파일러에 해당 기능에 대한 실험 내용이 있을 수 있습니다.
Stage3 - Candidate (후보)
제안이 거의 완료된 상태이며, 추가적으로 사양을 세분화 하기 위한 구현 및 사용자의 피드백이 필요한 단계입니다. 사양에 대한 텍스트가 완료되어 있어야 하며, 챔피언이 아닌 TC39에 의해 임명된 지정 검토자의 사인오프가 있어야 하며, ECMAScript 에디터의 사인오프가 있어야 합니다. 또한 사양을 준수하는 구현이 두개 이상 존재해야 합니다. 이후에는 구현된 내용과 사용에 있어서 제기된 문제에 대응해서 사양을 변경하여야 합니다.
Stage4 - Finished (완료)
ECMAScript 표준에 추가할 준비가 완료된 상태입니다. 주요 사용될 시나리오에 대한 Test262에서 승인될 테스트가 작성되었으며, 병합 완료가 되어있는 상태여야 합니다. (테스트는 Javascript 언어로 작성된 언어 기능에 대한 단위 테스트입니다.) 테스트를 통과한 두가지 사양에 대한 내용이 있어야 하며, 전체 스펙이 통합 스펙 테스트와 더불어 tc39 / ecma262로 전송됩니다. 또한 모든 ECMAScript 에디터들이 pull request에 대한 승인이 완료되어 있어야 합니다. 이후 해당 사양은 ECMAScript의 실제 표준 개정에 포함되며, 최종적으로 구현에 따른 모든 변경 사항이 통합됩니다.