너무 읽기 싫게 생겼다..
Ecma 262를 읽다가 문득 동기님과 궁금해했던 주제가 생각나서 찾아보기로 했다. 나는 너무 당연하게 ES문법을 자바스크립트로 사용하지만, ES 와 자바스크립트의 차이가 무엇인지 몰랐다. 일단 먼저 스크립트 언어가 무엇인지 부터 찾아보기로 했다.
액션 스크립트, JS 같이 대놓고 Script 가 붙는 언어뿐 아니라 우리가 알고있는 Python, Ruby와 같은언어들도 Script 언어이다!! 과연 Script언어 라는것은 무슨 뜻일까?
언어는 크게 Programming Language와 Script Language로 나누어져 있고 Script Language 또한 Programming Language다.
Programming 언어는 쉽게 말하자면 컴퓨터에게 연산을 시킬 목적으로 만들어진 모든 언어를 의미한다. 추상화 정도, 사람이 읽기 쉬운 정도 에따라 low-level 과 high-level로 나누어 진다. ( 사실 low level로 알고있는 사람들도 많은 C , Java 등등 도 high level 이고 low-level은 기계어, 어셈블리어 등이다)
Script 언어라는 것은 프로그래밍 언어의 한 종류로, 사전적인 의미로는 이미 존재하는 소프트웨어(Application)을 제어하기 위한 용도로 쓰이는 언어이다.
예시로 들자면 자바스크립트 같은 경우는 이미 존재하는 웹 브라우저에서 구동이 지원되고, 이를 제어하기 위한 용도로 쓰이기 때문에 Script 언어인 것이다. 하지만 Python , Ruby같은 경우는 이 예시에 맞지 않는데, Script언어로 불리고 있다. JS또한 웹환경이 고도화되고, Node 나 Electron 등이 등장함에 따라 독립적인 프로그램 개발에 사용될수 있도록 발전하면서 이를 단순히 웹 브라우저 제어 언어라고 부르기 어려워졌다. (심지어 Ts 는 컴파일 결과물을 JS 로 뱉는다.)
결론적으로는 초창기 시절에는 xx 언어 하고 정의하는것이 가능해졌지만, 이제는 프로그래밍 언어가 고도화됨에 따라 , 뭉뚱그려서 이언어는 xx어야! 하는게 무의미해져간다고 한다.
Script 언어의 대부분은 Interpreter 방식으로 언어를 실행한다.
이 뜻은 컴파일러를 거치지 않고, 즉 기계어로의 변환을 거치지 않고 바로 실행된다는 것이다.
Interpreter 방식은 한줄씩 읽어서 바로바로 프로세서에게 전달, 실행되는 방식이라 에러를 만나면
에러를 표시하고, 중단된다. 또한 이러한 방식이기 때문에 실행파일도 따로 없다는 장점이 있다.
JS를 많이 사용하는 우리한테는 굉장히 친숙한 방식이다. 하지만 컴파일러를 거치는 방식보다 느리다는 단점또한 존재한다.
컴파일과, Interpreter 방식을 결합한 JIT(Just-In-Time)컴파일러도 존재하지만! JS와 Ecma 가 주제이므로 넘어 가려고 한다.
MDN에 따르면 “JavaScript is a scripting or programming language that allows you to implement complex features on web pages.” 라고 되어있다. Script 언어는 봤으니 이제는 이 뜻을 대략적으로 파악할 수 있을것이다. Dom, Geolocation, 등의 WebAPI기능들을 제외하고, JS의 Core language(ECMA Script) 를 보려고 한다.
**ECMA 인터내셔널**
Ecma International 은 비영리 표준 기구다. Ecma 는 표준을 제정하는 데 , 예를 들면 CD롬 , 많이 쓰는 JSON 포맷등, 정보 통신기술에 대한 표준을 이 단체에서 관리하고 있고 각각의 표준들은 고유 이름과 번호를 가지는 데 우리가 봐야할 번호는 ECMA-262입니다.
**ECMA 262**
JS는 맨 처음 Brendan Eich라는 사람에 의해 처음 개발되었다. Js 가 잘 되자 MS에서 Jscript라는 언어를 개발 해 IE에 탑재했는데 이 둘이 너무 제각각이라 표준을 위해 자바스크립트를 ECMA 라는 비영리 표준 기구에 제출했고, 이작업이 ECMA-262 라는 이름으로 1997년에 채택되었다.
**ECMA Script**
즉 ECMA Script 란 ECMA International 이 ECMA 262 기술 규격에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어를 말한다. JS를 표준화하기 위해 만들어졌으며, 또한 JS뿐 아니라 액션스크립트 등 다른 구현체도 포함하고 있다.
흔히 하는 표현으로 ES는 표준어고, JS는 한국말로, 표준어가 아닌 방언들 (ES 표준에 만족되지 않는 ! ) 또한 지원된다.
JS
JavaScript는 ECMAScript 사양을 준수하는 범용 스크립팅 언어이다.
JavaScript는 ECMAScript의 사양을 따르는, 언어이다. 만약 ECMAScript 문서를 읽게 된다면, 어떻게 스크립트 언어를 만들 수 있는지를 알 수 있다. 반면 JavaScript 문서를 읽게 된다면, 어떻게 스크립트 언어를 쓸 수 있는지를 알 수 있다.
**JavaScript 엔진(JavaScript Engine)**
JavaScript 엔진은 JavaScript 코드를 이해하고 실행하는 프로그램 또는 인터프리터다.
JavaScript 엔진은 일반적으로 대부분의 웹 브라우저에서 찾아 볼 수 있다.
JavaScript 엔진에는 여러 종류가 있는데, V8, SpiderMonkey, Microsoft Edge의 Chakra 등이 있다. 다양한 종류가 있기 때문에, 각각의 JavaScript 엔진들은 다른 것들과 비교할 수 있는 몇 가지 특징을 갖는다.
첫 번째 특징은 바로 수행 능력(Performance)이 차이가 난다는 것이다. 두 개의 웹 브라우저는 명령어를 이해할 수는 있는 능력은 같지만 속도에서 차이가 날 수 있는데, 이는 JavaScript 엔진이 얼마나 효율적으로 JavaScript를 처리하고 있는가에 따라 다르기 때문이다.
두 번째 특징은 지원되는 ECMAScript가 다르다는 것이다. 웹 브라우저의 JavaScript 엔진이 JavaScript를 모두 이해할 수 있음에도 불구하고, 몇몇 브라우저들은 다른 브라우저들에 비해 매우 뛰어난 이해 능력을 갖고 있다. 이는 브라우저마다 언어를 지원하는 능력이 다르기 때문이다.
브라우저가 얼마나 JavaScript를 잘 지원하느냐와 관련해서, 사람들은 일반적으로 JavaScript 호환성 이라는 단어보다는 ECMAScript 호환성 이라는 단어를 더 사용한다.
아까 위에서 말했듯이, ECMAScript는 스크립트 언어가 어떻게 생겨야 하는지에 관한 사양이고, 새로운 버전의 ECMAScript를 발표한다고해서 모든 JavaScript 엔진이 갑자기 이러한 새로운 기능을 갖게되는 것은 아니기 때문에. JavaScript 엔진이 최신 ECMAScript의 사양을 준수하던지 아닌지는 JavaScript 엔진을 담당하는 회사의 업데이트에 따라 달려있다.