스파이더몽키
SpiderMonkey![]() | |
개발자 | 모질라 재단 모질라 코퍼레이션 |
---|---|
저장소 | github |
기입처 | C, C++, 녹 |
운영 체제 | 크로스 플랫폼 |
플랫폼 | IA-32, x86-64, ARM, MIPS, SPARC[1] |
유형 | JavaScript 엔진 |
면허증. | MPL 2.0[2] |
웹 사이트 | spidermonkey |
SpiderMonkey는 Netscape Communications의 Brendan Eich가 작성한 최초의 JavaScript 엔진으로, 나중에 오픈 소스로 출시되어 현재 Mozilla Foundation에 의해 유지되고 있습니다.Firefox 웹 [3]브라우저에서 사용됩니다.
역사
Eich는 1995년에 [4]"JavaScript를 열흘 만에 작성했다"며 "브라우저에서 '스킴을 실행하겠다'는 약속으로 Netscape에 채용되었다"[5]고 말했다.(Scheme를 사용한다는 생각은 "엔지니어링 관리["언어가 'Java처럼 보여야 한다고 결정했다"[5]고 판단했을 때 포기되었다.)1996년 말, 아이치는 첫해부터 "상당한 기술적 빚을 갚아야" 했고, "모카를 SpiderMonkey로 알려진 코드 베이스로 다시 쓰기 위해 2주 동안 집에 머물렀다"[4]고 말했다.(Mocha는 원래 이 언어의 작업 이름입니다.)[5][6]2011년, Eich는 SpiderMonkey 코드의 관리를 Dave Mandelin에게 [4]이관했습니다.
버전
버전 | 발매일 | 대응하는 ECMAScript 버전 | 브라우저 버전 | 기능 추가 |
---|---|---|---|---|
버전 더 이상 보수되지 않음 | 1996년 3월 | Netscape Navigator 2.0 | ||
버전, 보수 1.1 | 1996년 8월 | Netscape Navigator 3.0 | ||
버전, 보수 1.2 | 1997년 6월 | Netscape Navigator 4.0 - 4.05 | ||
버전, 보수 1.3 | 1998년 10월 | ECMA-262 제1판 + 제2판 | Netscape Navigator 4.06-4.7x | |
버전 더 이상 보수되지 않음 | 넷스케이프 서버 | |||
버전 더 이상 보수되지 않음 | 2000년 11월 | ECMA-262 제3판 | Netscape Navigator 6, Firefox 1.0 | |
버전 더 이상 보수되지 않음 | 2005년 11월[7] | 파이어 폭스 1.5 | 추가 어레이 방식, 어레이 및 문자열 제네릭, E4X | |
버전, 보수 1.7 | 2006년 10월 | 파이어폭스 2.0 | 반복기 및 생성기, let 문, 배열 통합, 할당 파괴 | |
버전, 보수 1.8 | 2008년 6월 | 파이어폭스 3.0 | 제너레이터 식, 식 폐쇄 | |
버전, 보수 1.8.5 | 2011년 3월 | ECMA-262 제5판 | 파이어폭스 4.0 | JSON 지원 |
버전, 보수 1.8.8 | 2012년 1월 | 파이어폭스 10.0 | ||
버전 더 이상 되지 않음: 17 | 2012년 11월 | 파이어폭스 17.0 | ||
버전 더 이상 되지 않음: 24 | 2013년 9월 | 파이어폭스 24.0 | ||
버전 더 이상 되지 않음: 31 | 2014년 7월 | 파이어폭스 31.0 | ||
버전 더 이상 되지 않음: 38 | 2015년 5월 | 파이어폭스 38.0 | ||
버전 더 이상 보수되지 않음 | 2016년 3월 | 파이어폭스 45.0 | ||
버전 더 이상 되지 않음: 52 | 2017년 3월 | 파이어폭스 52.0 | ||
버전 더 이상 되지 않음: 60 | 2018년 5월 | 파이어폭스 60.0 | ||
버전 더 이상 되지 않음: 68 | 2019년 7월 | 파이어폭스 68.0 | ||
버전 더 이상 보수되지 않음 | 2020년 6월 | 파이어폭스 78.0 | ||
버전 더 이상 되지 않음: 91 | 2021년 8월 | 파이어폭스 91.0 | ||
버전 더 이상 되지 않음: | 6월 2022년 | 파이어폭스 102.0 | ||
103 | 2022년 7월 | 파이어폭스 103.0 |
표준
SpiderMonkey는 ECMA-262 사양(ECMAScript)을 실장합니다.ECMA-357(ECMAScript for XML(E4X))은 2013년 [8]초에 폐기되었습니다.
내부
SpiderMonkey는 C/C++로 기술되어 있으며 IonMonkey J라는 인터프리터가 포함되어 있습니다.IT 컴파일러 및 가비지 콜렉터.
트레이스 몽키
TraceMonkey는[9] JavaScript 언어용으로 작성된 최초의 JIT 컴파일러입니다.2008년 [10]8월 23일 Brendan Eich의 블로그에 소개된 이 컴파일러는 파이어폭스 3.5의 SpiderMonkey의 일부로 메인라인 릴리즈에 포함되어 파이어폭스 [11]3의 베이스라인 인터프리터보다 "20배에서 40배 빠른 성능 향상"을 제공합니다.
TraceMonkey는 함수 전체를 컴파일하는 것이 아니라 인터프리터 실행 중 제어 흐름과 데이터 유형을 기록하는 트레이스 JIT였습니다.이 데이터는 추적 트리의 구축, 즉 네이티브 코드의 고도로 특수화된 경로의 구축을 알렸습니다.
특히 SpiderMonkey 타입의 추론 엔진의 개발과 함께, JégerMonkey에 대한 개선은 결국 TraceMonkey를 쓸모없게 만들었다.Firefox 11 [12]이후로는 SpiderMonkey에 TraceMonkey가 없습니다.
예거몽키
JégerMonkey(내부명 MethodJ)IT는 TraceMonkey가 안정적인 네이티브 [13][14]코드를 생성할 수 없는 경우 성능을 향상시키기 위해 설계된 전체 메서드의 JIT 컴파일러입니다.처음에 파이어폭스4에서 출시되어 최종적으로 TraceMonkey를 완전히 대체하였습니다.그 자체는 IonMonkey로 대체되었습니다.
JégerMonkey는 클래스의 다른 컴파일러와 매우 다르게 동작했습니다.일반 컴파일러는 함수를 나타내는 제어 흐름 그래프를 구축하고 최적화함으로써 동작했지만, 대신 JégerMonkey는 내부 함수 표현인 SpiderMonkey 바이트 코드를 통해 선형적으로 앞으로 반복 동작했습니다.이는 명령어 정렬을 필요로 하는 최적화를 금지하지만 JégerMonkey 컴파일은 매우 빠르다는 장점이 있으며 변수 유형의 변경으로 인한 재컴파일이 빈번하기 때문에 JavaScript에 유용합니다.
Mozilla는 JégerMonkey에서 많은 중요한 최적화, 특히 다형성 인라인 캐시와 유형 [15]추론을 구현했습니다.
TraceMonkey와 JégerMonkey J의 차이점IT기술과 그 양쪽의 필요성에 대해서는, hacks.mozilla.org의 기사에서 설명하고 있습니다.SpiderMonkey의 개발자 중 한 명인 Chris Leary가 블로그 투고에서 기술적인 세부 사항에 대한 자세한 설명을 제공했습니다.자세한 기술 정보는 dvander, dmandelin 등의 다른 개발자의 블로그에서 확인할 수 있습니다.
이온몽키
IonMonkey는 Mozilla의 JavaScript JIT 컴파일러로 이전 JégerMonkey [16]아키텍처에서는 불가능했던 많은 새로운 최적화를 가능하게 하는 것을 목적으로 했습니다.
IonMonkey는 좀 더 전통적인 컴파일러로, SpiderMonkey 바이트 코드를 중간 표현을 위해 정적 단일 할당 형식(SSA)을 사용하여 제어 흐름 그래프로 변환했습니다.이 아키텍처를 통해 유형 특성화, 함수 인라인화, 선형 스캔 레지스터 할당, 데드 코드 제거 및 루프 불변 코드 [17]모션 등 다른 프로그래밍 언어에서 잘 알려진 최적화를 JavaScript에 사용할 수 있게 되었습니다.
컴파일러는 ARM, x86 및 x86-64 플랫폼에서 JavaScript 함수의 빠른 네이티브 코드 변환을 내보낼 수 있습니다.파이어폭스 [18]18부터 기본 엔진입니다.
오딘몽키
OdinMonkey는 JavaScript의 서브셋인 asm.js용 Mozilla의 새로운 최적화 모듈 이름입니다.OdinMonkey 자체는 JIT 컴파일러가 아니라 현재의 JIT 컴파일러를 사용합니다.릴리스 22부터 Firefox에 포함되어 있습니다.
워프몽키
WarpMonkey JIT는 이전 [19]버전 83부터의 IonMonkey 엔진을 대체합니다.다른 스크립트를 인라인화하고 처리 중인 데이터와 인수를 기반으로 코드를 전문화할 수 있습니다.바이트 코드 및 인라인 캐시 데이터를 Mid-level Intermediate Representation(Ion MIR; 중간 수준 표현)으로 변환합니다.이 그래프는 Low-Level Intermediate Representation(Ion LIR; 하위 수준 중간 표현)으로 낮아지기 전에 변환 및 최적화됩니다.이 LIR는 레지스터 할당을 수행하고 Code Generation이라는 프로세스로 네이티브머신 코드를 생성합니다.여기서의 최적화에서는 스크립트가 이전과 유사한 데이터를 계속 참조하는 것으로 가정합니다.Baseline JIT는 관찰된 데이터와 일치하는 IC를 생성하기 때문에 여기서 성공하기 위해 필수적입니다.Warp로 스크립트를 작성한 후, 구제금융을 실시할 준비가 되어 있지 않은 데이터가 발견됩니다.구제 메커니즘은 베이스라인 인터프리터가 사용하는 레이아웃에 맞게 네이티브 머신의 스택프레임을 재구성한 후 마치 처음부터 실행 중인 것처럼 해당 인터프리터에 분기합니다.이 스택 프레임을 빌드하면 Warp에 의해 저장된 특별한 사이드 테이블을 사용하여 달리 사용할 [20]수 없는 값을 재구성할 수 있습니다.
사용하다
SpiderMonkey는 JavaScript용 호스트 환경을 제공하는 다른 응용 프로그램에 포함되도록 설계되었습니다.불완전한 목록은 다음과 같습니다.
- Mozilla Firefox, Thunderbird, SeaMonkey 및 Mozilla 응용 프로그램 프레임워크를 사용하는 기타 응용 프로그램
- 데이터 스토리지 애플리케이션:
- Adobe Acrobat 및 Adobe Reader, Adobe Flash Professional 및 Adobe Dreamweaver.Adobe Acrobat DC는 Spidermonkey 24.2와 ECMA-357 지원 [23]포워드를 사용합니다.
- GNOME 데스크톱 환경, 버전 3 이후
- Yahoo! 위젯(구 Konfabulator)
- 오픈소스 텔레포니엔진인 FreeSWITCH는 SpiderMonkey를 사용하여 사용자가 JavaScript에서 콜 관리 스크립트를 쓸 수 있도록 합니다.
- 텍스트 기반 웹 브라우저 ELinks는 SpiderMonkey를 사용하여 JavaScript를 지원합니다[24].
- SpiderMonkey의 일부는 Wine 프로젝트의 JScript(재) 구현에[25] 사용됩니다.
- SpiderMonkey 엔진을 사용하는 Synchronet, BBS, 이메일, 웹 및 응용 프로그램서버
- 매킨토시 컴퓨터용 SpiderMonkey 프로세스 간 통신 언어인 JavaScript OSA
- A.D. 0, 실시간 전략 게임
- SpiderMonkey는 다른 많은 오픈 소스 프로젝트에서도 사용됩니다.외부 목록은 Mozilla의 개발자 [26]사이트에서 유지됩니다.
SpiderMonkey에는 대화형 JavaScript 개발 및 JavaScript 프로그램 [27]파일의 명령줄 호출을 위한 JavaScript Shell이 포함되어 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "1.8.8 - SpiderMonkey MDN". Developer.mozilla.org. 10 January 2013. Archived from the original on 2 May 2013. Retrieved 21 March 2013.
- ^ Mozilla Licensing Policies, mozilla.org, archived from the original on 2 April 2013, retrieved 26 March 2013
- ^ "Home". SpiderMonkey JavaScript/WebAssembly Engine. Retrieved 28 August 2021.
- ^ a b c Eich, Brendan (21 June 2011). "New JavaScript Engine Module Owner". BrendanEich.com. Archived from the original on 14 July 2011. Retrieved 1 July 2011.
- ^ a b c Eich, Brendan (3 April 2008). "Popularity". BrendanEich.com. Archived from the original on 3 July 2011. Retrieved 1 July 2011.
- ^ Eich, Brendan (19 August 2011). "Mapping the Monkeysphere". Archived from the original on 13 January 2013. Retrieved 19 August 2011.
- ^ "New in JavaScript 1.6". Archived from the original on 5 September 2015. Retrieved 28 July 2015.
- ^ "759422 – Remove use of e4x in account creation". Retrieved 5 February 2013.
- ^ "JavaScript:TraceMonkey, MozillaWiki". Retrieved 22 July 2020.
- ^ "TraceMonkey: JavaScript Lightspeed, Brendan Eich's Blog". Retrieved 22 July 2020.
- ^ Paul, Ryan (22 August 2008). "Firefox to get massive JavaScript performance boost". Ars Technica. Archived from the original on 6 May 2012. Retrieved 21 March 2013.
- ^ Nethercote, Nicholas (1 November 2011). "SpiderMonkey is on a diet Nicholas Nethercote". Blog.mozilla.com. Archived from the original on 28 March 2012. Retrieved 21 March 2013.
- ^ "JaegerMonkey – Fast JavaScript, Always! » Mystery Bail Theater". Bailopan.net. 26 February 2010. Archived from the original on 24 March 2013. Retrieved 21 March 2013.
- ^ Paul, Ryan (9 March 2010). "Mozilla borrows from WebKit to build fast new JS engine". Ars Technica. Archived from the original on 16 April 2012. Retrieved 21 March 2013.
- ^ "JaegerMonkey - MozillaWiki". Wiki.mozilla.org. Archived from the original on 23 August 2013. Retrieved 21 March 2013.
- ^ "Platform/Features/IonMonkey - MozillaWiki". Wiki.mozilla.org. 11 February 2013. Archived from the original on 8 March 2013. Retrieved 21 March 2013.
- ^ "IonMonkey: Mozilla's new JavaScript JIT compiler". Infoq.com. Archived from the original on 8 December 2012. Retrieved 21 March 2013.
- ^ "Firefox Notes - Desktop". Mozilla.org. 8 January 2013. Archived from the original on 2 September 2014. Retrieved 21 March 2013.
- ^ "Warp: Improved JS performance in Firefox 83 – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog. 13 November 2020. Retrieved 28 August 2021.
- ^ "SpiderMonkey — Firefox Source Docs documentation". firefox-source-docs.mozilla.org. Retrieved 28 August 2021.
- ^ "JavaScript Changes in MongoDB 3.2 — MongoDB Manual 3.4". Archived from the original on 6 June 2017. Retrieved 23 November 2016.
- ^ "The Release Riak 0.8 and JavaScript Map/Reduce". Archived from the original on 3 November 2011. Retrieved 24 April 2011.
- ^ "Acrobat DC SDK Documentation". helpx.adobe.com. Retrieved 5 November 2021.
- ^ Bolso, Erik Inge (8 March 2005). "2005 Text Mode Browser Roundup". Linux Journal. Archived from the original on 15 March 2010. Retrieved 5 August 2010.
- ^ wine-cvs 메일링 리스트 2009년 2월 7일 Wayback Machine에서 아카이브, 2008년9월 16일: "jscript:Mozilla regexp 구현을 기반으로 정규 표현 컴파일러 추가"
- ^ "SpiderMonkey > FOSS". MDN Web Docs. Retrieved 2 April 2019.
- ^ "Introduction to the JavaScript shell". MDN. Mozilla Developer Network. 29 September 2010. Archived from the original on 29 June 2011. Retrieved 14 December 2010.
The JavaScript shell is a command-line program included in the SpiderMonkey source distribution. [...] You can use it as an interactive shell [...] You can also pass in, on the command line, a JavaScript program file to run [...]
외부 링크
- 공식 웹사이트 SpiderMonkey(JavaScript-C) 엔진
- 파이어폭스(및 Spidermonkey) 출시 일정