본문 바로가기
..front-end/JavaScript

002. JavaScript - ECMAScript 정의

by IT-SEMICOLON 2022. 1. 1.

1. 'ECMAScript'는 무엇인가?

1.1. 정의

- 다양한 웹 브라우저 환경에서 웹 페이지의 상호 운용성을 보장하기 위한 '자바스크립트(JavaScript)' 표준입니다.

- 'WWW(World Wide Web)'에서 클라이언트 측 스크립팅(Client-side scripting)에 일반적으로 사용됩니다.

- Node.js를 사용하여 서버 응용 프로그램 및 서비스를 작성하는데 점점 더 많이 사용되고 있습니다.

 

2. 'ECMAScript' 특징

2.1. Imperative and structured

2.2. Weakly typed

2.3. Dynamic

2.4. Transpiling

 

3.'ECMAScript' 개정 이력

3.1. ECMAScript 1-4

 

 'ECMAScript' 사양은 Netscape의 Brendan Eich가 개발한 스크립팅 언어의 표준 사양입니다. 처음에는 'Mocha', 'LiveScript'로 명칭하였으나, 마지막으로 'JavaScript'로 이름이 변경되었습니다. 1995년 12월 Sun Microsystems와 Netscape는 JavaScript를 처음 발표하였고 1996년 11월 Netscape는 JavaScript의 표준화를 위해 Ecma International standards organization 회의를 발표하였으며, 1997년 ECMA-262의 초판이 채택되었습니다.

 

3.2. ES3 (ECMAScript 3, 1999)

 

- Strict Equality

- Regual Expressions

- Literal Expressions

- Constructor Expressions

- Switch Statement

- Try/Catch Handling

 

3.3. ES4 (ECMAScript 4, 2007)

 

 'ECMA-262(ECMAScript 4 또는 ES4)'의 4번째 에디션은 1999년에 출판된 ECMAScript에 대한 첫 번째 주요 업데이트 였습니다. 사양은 원래 2008년 10월까지 완료하는 것을 목표로 하였습니다. 첫 번째 초안은 1999년 2월에 작성되었으며, 언어의 개요는 2007년 10월 23일에 공개되었습니다. 

 2008년 8월까지 'ECMAScript 4'는 'ECMAScript Harmony'라는 프로젝트 코드로 요약되었습니다. 당시 Harmony에 대해 논의 중인 기능은 다음과 같습니다.

 

- 클래스(Class)

- 모듈 시스템(Module system)

- Optional type annotations and static typing, probably using a structural type system.

- 발생자와 반복자(Generators and iterators)

- 구조 분해 할당(Destructuring assignment)

- 대수적 자료형(Algebraic data types)

 

위 기능의 의도는 부분적으로 큰 규모의 프로그래밍을 지원하고, 스크립트의 동적 기능 중 일부를 희생하여 성능을 향상시킬 수 있습니다.  예를들어, 'Tamarin(Adobe에서 개발한 ActionScript용 가상 머신)'은 특정 클래스의 스크립트에 대해 JIT(Just-In-Time Compilation)을 지원합니다.

 

 ES-CP(ECMAScript Compact Profile) 사양이 완료된 후 ECMAScript 4에 대한 작업이 시작되었고, 넷스케이프(Netscape)의 JavaScript 2 사양 이론과 마이크로소프트(Microsoft)의 JScript .NET 의 구현 경험의 균형을 맞추는데 약 18개월 이라는 오랜 시간이 걸렸습니다. 얼마 후 초점은 E4X(XML 용 ECMAScript) 표준으로 옮겨 졌습니다. 업데이트는 논란의 여지가 없었으나, 2007년 말 Mozilla Foundation의 CTO가 된 Eich와 Internet Explorer 용 마이크로소프트(Microsoft)의 플랫폼 설계자인 Chris Wilson 사이의 논쟁이 여러 블로그를 통해 공개되었습니다.

 Chris Wilson은 "ECMAScript에 고안된 변경 사항으로 인해 이전 버전의 언어와 역호환성이 없었기 때문에 ECMAScript의 업데이트는 'Breaking the Web'이며, ECMAScript 4에 대한 비평가는 'Hidden from view' 상태입니다."라며 경고했고, 이에 Brendan Eich는 Chris Wilson이 "Repeating falsehoods in blogs"라고 말하면서 비평가의 의견을 억제하려는 시도가 있었다는 것을 부인하고 비평가에게 비호환성의 구체적인 예를 제시하도록 이의를 제기하였습니다. 또한, Microsoft Silverlight와 Adobe AIR가 각각 ECMAScript 3보다 더 크고 복잡한 C#과 ActionScript3에 의존한다고 지적하였습니다. (논쟁 원문)

 

3.4. ES5 (ECMAScript 5, 2009)

 

 Yahoo, Microsoft, Google 및 기타 ECMAScript 4의 반대자들은 ECMAScript 3의 업데이트 버전인 ECMAScript 3.1를 설계하기 위해 위원회를 구성하였습니다. ECMAScript 3.1 버전은 호환성에 크게 중점을 두고 보안 및 라이브러리 업데이트에 중점을 두었습니다. 위원회를 통해 ECMAScript 3.1 팀과 ECMAScript 4 팀 간의 협업으로 고안되어 ECMAScript 5 버전이 공개되었으며, ECMAScript 5은(는) ECMAScript 3.1의 의미(Semantics)와 구문(Syntax) 모두를 철저히 포함하고 있습니다.

 

 그러나, 각 팀의 서로 다른 철학으로 인해 하위 집합 규칙이 반복적으로 위반되어, ECMAScript 5 반대자들은 ECMAScript 4에 대한 의심을 떨쳐내지 못했습니다. Ecma Techincal Committee 39 내에서 ECMAScript의 미래에 대한 의견 충돌 이 1년 동안 지속되었으며,  ECMAScript 3.1팀과 ECMAScript 4 팀은 2009년 7월 새로운 협의점에 도달하였으며, Brendan Eich는 ECMA TC39가 두 팀 간의 협력을 통해 최소 2개의 상호 운용이 가능한 구현을 목표로 하여 ECMAScript 3.1 프로젝트에 전념할 것을 발표하였습니다.

 

 2009년 4월 Ecma TC39는 ECMAScript 3.1의 최종 초안을 발표하였고 상호 운용 가능한 구현의 테스트가 7월 중순까지 완료될 것으로 예상한다고 발표했으며, 2009년 12월 3일 ECMA-262 5번째 에디션인 ECMAScript 5가 공개되었습니다.

 

3.5. ES6 (ECMAScript 2015, 2015)

 

 'ECMAScript 6'는 2015년 6월에 완성되었으며, 후에 ECMAScript 2015로 이름이 변경되었습니다. 이 업데이트는 복잡한 응용 프로그램을 구현하기 위해 클래스, JavaScript 모듈 등 중요한 구문(Syntax)이 신규로 추가되었습니다. 이러한 문법은 ECMAScript 5의 strict mode와 같은 방법으로 정의합니다. 변경된 내용은 매우 광범위하며, 첫 번째 ECMAScript Harmony 사양으로 'ES6 Harmony'라고 명칭합니다.

 

- Generators and Iterators

- for…of 반복문

- 화살표 함수 표현식

- let keyword

- const keyword

- Binary datas

- Array & New collection

- Number & Math enhancement

- reflection

- Proxies (metaprogramming for virtual objects and wrappers)

- Template literals for string


Reference

더보기

※ ECMAScript 개정 이력

 

Name Release Date Subscription
  1997.06 First edition
  1998.06 Editorial changes
ECMAScript 3 1999.12 - regular expressions
- try/catch
- switch
- do-while
ECMAScript 4   Never Released
ECMAScript 5   - "strict mode"
- JSON support
- String.trim()
- Array.isArray()
- Array iteration methods
- Allows trailing commas for object literals
ECMAScript 6 2009.12 - let and const
- Default parameter values
- Array.prototype.find()
- Array.prototype.findIndex()
ECMAScript 2016 2015.06 - Exponential operator (**)
- Array.includes()
ECMAScript 2017 2017.06 - string padding
- Object.entries()
- Object.values()
- async functions
- Shared memory
ECMAScript 2018 2018.06 - rest/spread properties
- asynchronous iteration
- Promise.finally()
- Additions to RegExp
ECMAScript 2019 2019.06 - Array.prototype.Flat()
- Array.prototype.flatMap()
- String.prototype.trimStart()
- String.prototype.trimEnd()
- Object.fromEntries()
- Symbol.prototype.description
- Optional catch binding
ECMAScript 2020 2020.06 - String.prototype.matchAll()
- Dynamic imports via
- Bigints
- Promise.allSettled()
- globalThis
- for-in mechanics
- Optional chaining for property accesses and method calls
- Nullish coalescing operator(??)
- import.meta
- Namespace re-exporting: export * as ns from "mod";
ECMAScript 2021 2021.06 - String.prototype.replaceAll()
- Promise.any()
- WeakRefs (beyond the scope of this book, see proporsal)
- Logical assignment operators
- Underscopes(_) as separators in number literals and bigint literals

 

wiki

 

ECMAScript - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Official specification on which JavaScript and other languages are based ECMAScriptParadigmMulti-paradigm: prototype-based, functional, imperativeDesigned byBrendan Eich, Ecma Interna

en.wikipedia.org

 

'..front-end > JavaScript' 카테고리의 다른 글

005. JavaScript - Interpreter  (0) 2022.01.04
004. JavaScript - ECMAScript(ES6)  (0) 2022.01.03
003. JavaScript - ECMAScript(ES5)  (0) 2022.01.02
001. JavaScript 알아보기  (0) 2021.12.31

댓글