Evolution of Javascript : 2편 (~1996년: 브라우저 전쟁의 서막)

1995년

앞서 말했던 Netscape Communications의 두 가지 전략은 당시 Microsoft라는 공룡에 대항하기 위해 동시에 진행되었다.

1995년 4월 Netscape은 Brendan Eich를 영입하게 되었다.

5월에 Netscape 2.0 beta의 일정에 맞추기 위해 Brendan Eich는 입사하자마자 10일만에 브라우저에서 사용할 수 있는 동적 언어를 탄생시켰다.

10일만에 무에서 유를 창조할 수 없으니 Brendan Eich는 여러 언어에서 아이디어를 따왔다. 그 중 특히 4가지에서 영감을 받았는데,

1. 함수형 언어인 Lisp 계열의 Scheme이란 언어에서 영감을 받고 (first-class functions)

2. Bill Atkinson이 개발한 매킨토시의 Hypertalk에서도 아이디어를 따오고 (onclick과 같은 event handler 이름)

3. Self의 prototype-based 언어와

4. Java의 syntax를 많이 따르라는 Netscape의 요구사항으로 Java에서도 따왔다.

 

하나씩 예를 살펴보자면

1. Scheme에서 따온 흔적

function createCounter() {
  let count = 0;
  return function() {
    count += 1;
    return count;
  };
}

const counter = createCounter();
console.log(counter());  // Outputs: 1
console.log(counter());  // Outputs: 2

 

'First-class functions'라는 말의 뜻은

1. 변수에 string이나 number를 할당해주듯이, 함수 자체도 변수에 저장할 수 있고

2. return 값으로도 함수를 반환할 수 있고

3. 다른 함수에 인자(argument)로도 넣을 수 있고, array나 object같은 데이터 구조에도 넣을 수 있다

는 뜻이다.

First-class라는 용어는 위 세 가지 특성처럼 프로그래밍 context에서 제한없이 사용될 수 있다는 뜻이다.

언어의 type 시스템에 있어서 1등석이라는 뜻으로 이해하면 될 것 같다.

위 예시에서 counter()를 두 번째 실행했을 때 count가 0으로 초기화 안 되고 지난 환경을 기억하면서 1, 2 하나씩 늘어나는 것은 first-class functions와 closure라는 특성 때문인데 이런 건 나중에 다시 정리하기로.

 

2. Hypertalk

애플 매킨토시의 소프트웨어 도구 중에 Hypercard가 있었는데 이는 Hypertalk라는 scripting 언어로 되어있었다.

Event handling에 대한 접근 방식 그리고 onclick같은 이름들은 여기서 따왔다.

document.getElementById('myButton').addEventListener('click', function() {
  alert('Button clicked!');
});

 

3. Self

내 생각에 C나 Java와 같은 low-level language 전문가들이 javascript 할 때 적응이 안 되는 이유가 많이 있겠지만 그 중 하나가 바로 이 Self라는 prototype-based 언어 특성 때문일 수도 있다. 아래 코드처럼 객체지향의 class라는 개념이 원래는 없다. 물론 OOP같이 class 정의하고 constructor 정의하는 것은 ECMAscript 2015 (ES6)에서 도입되었지만 원래 그런 언어가 아니고 syntax적으로 도입했기 때문에 syntactic sugar라고도 부른다. Typescript 도입으로 더 발전하였지만, 아무튼 원래는 아래와 같다.

const animal = {
  makeSound: function() {
    console.log(this.sound);
  }
};

const dog = Object.create(animal);
dog.sound = 'Woof';

dog.makeSound();  // Woof 를 출력함

 

4. Java

Java syntax를 많이 따라가달라는 Netscape의 요구사항에 따라 많이 가져왔다. 중괄호(curly braces), 세미콜론으로 문장 끝맺기, 그리고 전체적인 코드 구조가 그렇다.

function greet(name) {
  if (name) {
    console.log('Hello, ' + name + '!');
  } else {
    console.log('Hello, world!');
  }
}

greet('Alice');  // Outputs: Hello, Alice!
greet();         // Outputs: Hello, world!

 

이렇게 언어를 만들고 내부적으로 Mocha라는 이름을 주었다.

그러다 이름을 LiveScript로 바꿨다. 그리고 Netscape 브라우저 안에 LiveScript Interpreter 엔진을 추가하여 배포하였다.

하지만 당시 Java를 대대적으로 마케팅하던 Sun Microsystems 덕분에 인기가 치솟은 Java의 흥행에 얹혀가기 위해 1995년 12월에 Javascript로 이름을 바꾸었다.

 

Microsoft

Bill Gates는 우수 개발자들을 모아 'Internet Explorer' 팀을 구성하였다.

Mosaic 브라우저를 만든 일리노이 대학교 NCS는 Spyglass에게 Mosaic 기술의 상업적 목적 사용 라이센스를 부여했고, Spyglass는 이 라이선스를 기반으로 Mosaic 브라우저 기술을 Microsoft에 다시 서브 라이센스 하여, Microsoft가 Internet Explorer를 개발하는 데 사용할 수 있도록 했다. 

그리고 1995년 8월에 Internet Explorer 1.0을 출시하였다.

이후 Microsoft는 Netscape engine을 reverse engineering(→ binary를 보고 source code를 복원하는 작업)하였다. 그리고 Javascript와 복원시켜 따라 만들고 JScript라는 언어로 발표했다. CSS도 reverse engineering으로 따라 만들고 JSSS라는 이름을 붙엿다. 따라 만들었지만 조금은 달랐기 때문에 이 때부터 서로 호환은 되지 않아 고래 싸움에 개발자들의 고난은 시작되었다.

 

 

1996년

Netscape가 IE 1.0보다 성능이 우수했기에 시장점유율 80%였지만,

이런 Microsoft의 행태에 열받은 Netscape는 자신들의 Javascript를 표준으로 하기위해 W3C와 ISO를 찾아갔지만 거절당했다. 그러나 1996년 11월 ECMA International (European Computer Manufacturers Association)에 찾아가 Javascript 표준을 만들자는 제안에 ECMA는 제안을 받아들였다.

 

참조: (대부분) wikipedia

'Frontend (Next.js Tailwind Typescript) > Frameworks' 카테고리의 다른 글

Evolution of Javascript : 1편 (~1994년)  (0) 2023.11.30
Frontend framework trend  (2) 2023.11.23
Loading time vs. Bounce Rate  (1) 2023.11.23
SEO 최적화의 중요성  (1) 2023.11.23
CSR vs SSR vs SSG vs ISR  (0) 2023.11.23
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유