스파이더몽키
1. 개요
스파이더몽키는 넷스케이프의 브렌던 아이크가 개발한 자바스크립트 엔진으로, 웹 브라우저에서 스크립트 언어를 실행하기 위해 만들어졌다. 넷스케이프 내비게이터와 파이어폭스 웹 브라우저의 핵심 엔진으로 사용되었으며, 현재는 파이어폭스와 함께 릴리즈되고 있다. 스파이더몽키는 C/C++로 작성되었으며, GC, JSObject, 파서, 인터프리터, JIT 컴파일러, 웹어셈블리 등으로 구성되어 있다. ECMA-262 사양을 구현하여 자바스크립트 언어 표준을 따르며, 다양한 응용 프로그램에 내장되어 자바스크립트 실행 환경을 제공한다.
이미지 준비중입니다.
| 개발 | 모질라 재단 모질라 코퍼레이션 |
|---|---|
| 최신 릴리스 버전 | 해당 없음 |
| 최신 릴리스 날짜 | 해당 없음 |
| 운영체제 | 크로스 플랫폼 |
| 종류 | 자바스크립트 및 WebAssembly 엔진 |
| 프로그래밍 언어 | C C++ 러스트 |
| 플랫폼 | IA-32 x86-64 ARM MIPS SPARC RISC-V |
| 라이선스 | MPL 2.0 |
| 웹사이트 | SpiderMonkey JavaScript/WebAssembly Engine |
| 저장소 | github.com/mozilla-spidermonkey |
-
자바스크립트 엔진 -
V8 (자바스크립트 엔진)
V8은 구글이 개발한 오픈 소스 자바스크립트 엔진으로, 자바스크립트 코드 실행 속도 향상을 위해 여러 컴파일러를 거쳐 크롬, 노드.js 등에서 활용된다. -
자바스크립트 엔진 -
차크라 (자바스크립트 엔진)
차크라는 ECMAScript 5.1과 ECMAScript 2015의 일부 기능을 지원하는 자바스크립트 엔진이며, 마이크로소프트는 해당 엔진의 핵심 구성 요소를 ChakraCore라는 이름으로 오픈 소스화했다. -
분류 값 없이 쓰인 위키공용분류 -
라우토카
라우토카는 피지 비치레부섬 서부에 위치한 피지에서 두 번째로 큰 도시이자 서부 지방의 행정 중심지로, 사탕수수 산업이 발달하여 "설탕 도시"로 알려져 있으며, 인도에서 온 계약 노동자들의 거주와 미 해군 기지 건설의 역사를 가지고 있고, 피지 산업 생산의 상당 부분을 담당하는 주요 기관들이 위치해 있다. -
분류 값 없이 쓰인 위키공용분류 -
코코넛
코코넛은 코코넛 야자나무의 열매로 식용 및 유지로 사용되며, 조리되지 않은 과육은 100g당 354kcal의 열량을 내는 다양한 영양 성분으로 구성되어 있고, 코코넛 파우더의 식이섬유는 대부분 불용성 식이섬유인 셀룰로오스이며, 태국 일부 지역에서는 코코넛 수확에 훈련된 원숭이를 이용하는 동물 학대 문제가 있다. -
모질라 -
모질라 재단
모질라 재단은 넷스케이프 사업부 축소 후 모질라 프로젝트의 독립 운영을 위해 2003년 설립된 비영리 단체로, 파이어폭스 개발 지원, 개방형 웹 생태계 유지, 그리고 인터넷 자유 수호를 위한 활동을 전개한다. -
모질라 -
모질라 차이나
모질라 차이나는 한국에서의 역사와 관련된 주제를 다루며, 특정 시대별 주요 사건 및 변화, 쟁점, 사회적 영향, 관련 인물 및 단체, 그리고 미래에 대한 내용을 포함한다.
2. 역사
브렌던 아이크는 1995년에 "10일 만에 자바스크립트를 작성"했다. 그는 "브라우저에서 'Scheme'을 만들겠다"는 약속을 받고 넷스케이프에 합류했으나, 엔지니어링 관리팀이 이 언어가 'Java'와 비슷해야 한다고 결정하면서 Scheme을 사용하려는 아이디어는 폐기되었다. 1996년 말, 아이크는 첫 해에 남겨진 "상당한 기술 부채"를 해결해야 할 필요성을 느껴 "2주 동안 집에 머물면서 Mocha를 스파이더몽키로 알려진 코드베이스로 다시 작성"했다. (Mocha는 언어의 원래 작업 이름이었다.)
2011년에 아이크는 스파이더몽키 코드 관리를 데이브 맨델린에게 넘겼다.
2.1. 개발 배경
1995년, 넷스케이프의 브렌던 아이크는 웹 브라우저에서 동작하는 스크립트 언어인 자바스크립트를 개발했다. 그는 "브라우저에서 'Scheme'을 만들겠다"는 약속을 받고 넷스케이프에 합류했으나, 엔지니어링 관리팀이 이 언어가 'Java'와 비슷해야 한다고 결정하면서 Scheme을 사용하려는 아이디어는 무산되었다. 1996년 말, 아이크는 첫해에 남겨진 "상당한 기술 부채"를 해결해야 할 필요성을 느껴 2주 동안 집에 머물면서 Mocha를 스파이더몽키라는 코드베이스로 다시 작성했다. (Mocha는 이 언어의 원래 작업 이름이었다.)
2011년, 아이크는 스파이더몽키 코드 관리를 데이브 맨델린(Dave Mandelin)에게 넘겼다.
2.2. 버전
스파이더몽키는 넷스케이프에서 개발되어 넷스케이프 내비게이터와 함께 발전해왔으며, 이후 파이어폭스 웹 브라우저의 핵심 엔진으로 사용되고 있다. 각 버전은 ECMAScript 표준을 준수하며, 새로운 기능과 성능 개선이 이루어졌다. 1995년에 브렌던 아이크(Eich)가 "10일 만에 JavaScript를 작성"했으며, 1996년 말에는 "2주 동안 집에 머물면서 Mocha를 SpiderMonkey로 알려진 코드베이스로 다시 작성"했다. 2011년부터는 Dave Mandelin이 SpiderMonkey 코드 관리를 맡고 있다. 2014년부터 스파이더몽키는 파이어폭스와 동시에 릴리즈되고 있다.
3. 구성 요소
스파이더몽키는 C/C++(프로그래밍 언어)로 작성되었으며, 인터프리터, WarpMonkey JIT 컴파일러, 가비지 컬렉션 등을 포함한다. Rhino와 함께 ECMAScript for XML (E4X) 표준을 지원한다.
3.1. 주요 구성 요소
스파이더몽키는 다음과 같은 주요 구성 요소로 이루어져 있다.
* [[쓰레기 수집 (컴퓨터 과학)|GC]]: 메모리 관리를 담당하는 가비지 컬렉터이다.
* JSObject: 자바스크립트 객체를 표현한다.
* [[파서]]: 자바스크립트 코드를 분석하여 해석 가능한 형태로 변환한다.
* [[인터프리터]]: 파싱된 코드를 실행한다.
* [[JIT 컴파일]]: 실행 속도 향상을 위해 자주 사용되는 코드를 기계어로 컴파일한다.
* [[웹어셈블리]]: 웹에서 네이티브에 가까운 성능을 제공하는 기술을 지원한다.
4. 내부
스파이더몽키는 C/[[C++](프로그래밍 언어)]로 작성되어, 효율적인 자바스크립트 실행을 위한 다양한 최적화 기술을 포함한다. 1996년 말, 아이크는 "상당한 기술 부채"를 해결하기 위해 "2주 동안 집에 머물면서 Mocha를 SpiderMonkey로 알려진 코드베이스로 다시 작성"했다. 2011년에 아이크는 스파이더몽키 코드 관리를 데이브 맨델린에게 넘겼다.
4.1. 내부 구성
스파이더몽키는 C/[[C++](프로그래밍 언어)]로 작성되었으며, 다음과 같은 구성 요소를 포함한다.
* 컴파일러: 자바스크립트 코드를 바이트코드로 변환한다.
* 인터프리터: 바이트코드를 실행한다.
* 역컴파일러: 필요시 바이트코드를 다시 자바스크립트 코드로 변환한다. (디버깅 등에 사용)
* 가비지 컬렉션: 더 이상 사용되지 않는 메모리를 자동으로 회수하여 메모리 누수를 방지한다.
* 표준 클래스군: 자바스크립트 표준 라이브러리를 제공한다.
스파이더몽키는 DOM과 같은 호스트 환경을 자체적으로 제공하지 않으며, Rhino와 함께 ECMAScript for XML (E4X) 표준을 지원한다.
4.2. 성능 최적화
스파이더몽키는 JIT(Just-In-Time) 컴파일 기술을 통해 성능을 향상시켜왔다. 다음은 스파이더몽키에서 사용된 주요 JIT 컴파일러들이다.
* TraceMonkey: 파이어폭스 3.5부터 10까지 사용된 최초의 자바스크립트 JIT 컴파일러이다. TraceMonkey는 특정 코드 경로(트레이스)를 추적하여 네이티브 코드로 최적화하는 트레이싱 JIT 방식을 사용했다. 이를 통해 기존 인터프리터보다 20~40배 빠른 성능 향상을 제공했다. 하지만 TraceMonkey는 타입 추론 엔진의 발전으로 인해 결국 쓸모없게 되어 파이어폭스 11부터 제거되었다.
* JägerMonkey: 파이어폭스 4부터 17까지 사용되었으며, TraceMonkey의 한계를 극복하기 위해 개발된 전체 메서드 JIT 컴파일러이다. JägerMonkey는 SpiderMonkey의 내부 함수 표현인 바이트코드를 통해 선형적으로 반복하며 작동하여, 빠른 컴파일 속도를 제공했다. 이는 변수 유형 변경으로 인해 재컴파일이 자주 발생하는 자바스크립트에 유용하다. JägerMonkey는 다형적 인라인 캐시와 타입 추론과 같은 중요한 최적화를 구현했다.
* IonMonkey: 파이어폭스 18부터 82까지 사용되었으며, JägerMonkey 아키텍처에서는 불가능했던 많은 최적화를 가능하게 하기 위해 개발되었다. IonMonkey는 정적 단일 할당 형식(SSA)을 중간 표현으로 사용하는 전통적인 컴파일러 아키텍처를 기반으로 한다. 이를 통해 타입 특수화, 함수 인라인, 데드 코드 제거 등 다른 프로그래밍 언어에서 잘 알려진 최적화를 자바스크립트에 적용할 수 있게 되었다.
* OdinMonkey: asm.js와 같은 자바스크립트 하위 집합에 대한 최적화 모듈이다. OdinMonkey 자체는 JIT 컴파일러가 아니며, 현재 JIT 컴파일러를 활용한다. 파이어폭스 22부터 포함되었다.
* WarpMonkey: 파이어폭스 83부터 현재까지 사용되고 있으며, IonMonkey를 대체하는 최신 JIT 컴파일러이다. WarpMonkey는 다른 스크립트를 인라인할 수 있으며, 처리되는 데이터 및 인수에 따라 코드를 특수화할 수 있다. 스크립트가 이전에 관찰된 것과 유사한 데이터를 계속 볼 것이라는 가정하에 최적화를 수행한다.
5. 표준
스파이더몽키는 ECMA-262 사양(ECMAScript)을 구현한다. 2013년 초에 ECMA-357(E4X) 지원이 중단되었다.
스파이더몽키는 C 언어로 구현되었으며, 컴파일러, 인터프리터, 역 컴파일러, 가비지 수집기, 표준 클래스군 등으로 구성된다. 자체적으로 DOM과 같은 호스트 환경을 제공하지는 않는다.
스파이더몽키와 자매 관계에 있는 Rhino는 E4X 표준을 지원했었다.
6. 응용
스파이더몽키는 다양한 응용 프로그램에 내장되어 자바스크립트 실행 환경을 제공한다.
* 웹 브라우저: 파이어폭스, 페일 문, 바실리스크, 워터폭스 등.
* 데이터 저장 애플리케이션: MongoDB, Riak, CouchDB.
* 어도비 제품군: 어도비 아크로뱃, Adobe Reader, 어도비 플래시 프로페셔널, 어도비 드림위버.
* 데스크톱 환경: GNOME.
* 기타: 야후! 위젯, FreeSWITCH, PythonMonkey, ELinks, Wine, Synchronet, JavaScript OSA, 0 A.D., Wasmer (WinterJS 프로젝트), 울티마 온라인 서버 에뮬레이터 UOX3, 오픈 소스 롤플레잉 게임 설계 지원 도구 Sphere.
스파이더몽키는 또한 다른 많은 오픈 소스 프로젝트에서 사용된다.