Spinnenaffe

Spinnenaffe
Spidermonkey-logo-2021.svg
Entwickler (en) Mozilla Foundation
Mozilla Corporation
Repository Github.com/Mozilla-Spidermonkey
Geschrieben in C, C ++, Rost
Betriebssystem Plattformübergreifend
Plattform IA-32, x86-64, ARM, MIPS, Sparc[1]
Typ JavaScript -Engine
Lizenz MPL 2.0[2]
Webseite Spinnenaffe.dev

Spinnenaffe ist die erste JavaScript -Engine, geschrieben von Brendan Eich bei Netscape Kommunikation, später veröffentlicht als Open Source und derzeit unterhalten von der Mozilla Foundation. Es wird in der verwendet Feuerfuchs Webbrowser.[3]

Geschichte

Eich "schrieb JavaScript in zehn Tagen" 1995,[4] nach dem Versprechen, es zu tun, für Netscape rekrutiert worden Planen"Im Browser".[5] (Die Idee, das Schema zu verwenden'".)[5] Ende 1996 musste Eich "die Wesentliche abbezahlen" Technische Schulden"Abgelassen vom ersten Jahr", blieb zwei Wochen zu Hause, um Mokka als Codebasis umzuschreiben, die als Spidermonkey bekannt wurde ".[4] (Mokka war der ursprüngliche Arbeitsname für die Sprache.)[5][6] Im Jahr 2011 überwies Eich die Verwaltung des Spidermonkey -Code an Dave Mandelin.[4]

Versionen

Spidermonkey -Versionsgeschichte
Ausführung Veröffentlichungsdatum Entsprechende ECMAScript -Version Browserversion Funktionalität hinzugefügt
Alte Version, nicht mehr gepflegt: 1.0 März 1996 Netscape Navigator 2.0
Alte Version, nicht mehr gepflegt: 1.1 August 1996 Netscape Navigator 3.0
Alte Version, nicht mehr gepflegt: 1.2 Juni 1997 Netscape Navigator 4.0 - 4.05
Alte Version, nicht mehr gepflegt: 1.3 Oktober 1998 ECMA-262 1st + 2. Auflage Netscape Navigator 4.06-4.7x
Alte Version, nicht mehr gepflegt: 1.4 Netscape Server
Alte Version, nicht mehr gepflegt: 1.5 November 2000 ECMA-262 3. Auflage Netscape Navigator 6, Firefox 1.0
Alte Version, nicht mehr gepflegt: 1.6 November 2005[7] Firefox 1.5 Zusätzliche Array -Methoden, Array- und String -Generika, E4X
Alte Version, nicht mehr gepflegt: 1.7 Oktober 2006 Firefox 2.0 Iteratoren und Generatoren, let Anweisung, Array -Verständnis, Zerstörungsaufgabe
Alte Version, nicht mehr gepflegt: 1.8 Juni 2008 Firefox 3.0 Generatorausdrücke, Expressionsschließungen
Alte Version, nicht mehr gepflegt: 1.8.5 März 2011 ECMA-262 5. Auflage Firefox 4.0 JSON -Unterstützung
Alte Version, nicht mehr gepflegt: 1.8.8 Januar 2012 Firefox 10.0
Alte Version, nicht mehr gepflegt: 17 November 2012 Firefox 17.0
Alte Version, nicht mehr gepflegt: 24 September 2013 Firefox 24.0
Alte Version, nicht mehr gepflegt: 31 Juli 2014 Firefox 31.0
Alte Version, nicht mehr gepflegt: 38 Mai 2015 Firefox 38.0
Alte Version, nicht mehr gepflegt: 45 März 2016 Firefox 45.0
Alte Version, nicht mehr gepflegt: 52 März 2017 Firefox 52.0
Alte Version, nicht mehr gepflegt: 60 Mai 2018 Firefox 60.0
Alte Version, nicht mehr gepflegt: 68 Juli 2019 Firefox 68.0
Alte Version, nicht mehr gepflegt: 78 Juni 2020 Firefox 78.0
Alte Version, nicht mehr gepflegt: 91 August 2021 Firefox 91.0
Aktuelle stabile Version: 102 Juni 2022 Firefox 102.0

Standards

Spidermonkey implementiert die ECMA-262-Spezifikation (ECMaskript). ECMA-357 (ECMascript für XML (E4x)) wurde Anfang 2013 fallen gelassen.[8]

Interna

Spidermonkey ist geschrieben in C/C ++ und enthält an Dolmetscher, der Ionmonkey JIT -Compiler, und ein Müllsammler.

Tracemonkey

Tracemonkey[9] war der erste JIT -Compiler, der für die JavaScript -Sprache geschrieben wurde. Anfangs als Option in einer Beta -Veröffentlichung eingeführt und am 23. August 2008 in Brendan Eichs Blog eingeführt.[10] Der Compiler wurde als Teil von Spidermonkey in der Hauptfreisetzung in der Hauptfreisetzung Firefox 3.5Bereitstellung von "Leistungsverbesserungen zwischen 20 und 40 -mal schneller" als der Basiskolterinterpreter in Firefox 3.[11]

Anstatt ganze Funktionen zusammenzustellen, war Tracemonkey a Verfolgung von JIT, was mit Aufzeichnung arbeitet Steuerfluss und Datentypen Während der Ausführung von Interpreter. Diese Daten informierten dann den Bau von Spurenbäume, hochspezialisierte Wege von nativen Code.

Verbesserungen an Jägermonkey machten Tracemonkey schließlich veraltet, insbesondere mit der Entwicklung des Spidermonkey Geben Sie Inferenz ein Motor. Tracemonkey fehlt bei Spidermonkey von Firefox 11 weiter.[12]

Jägermonkey

Jägermonkey, intern bezeichneter Methodjit, war ein Wholet-Methoden-JIT-Compiler, der die Leistung in Fällen verbessern soll nativen Code.[13][14] Es wurde zum ersten Mal in veröffentlicht in Firefox 4 und schließlich vollständig ersetzt Tracemonkey. Es wurde selbst durch Ionmonkey ersetzt.

Jägermonkey arbeitete sehr unterschiedlich als andere Compiler in seiner Klasse: Während typische Compiler durch Konstruktion und Optimierung von a arbeiteten Kontroll-Flow-Diagramm Jägermonkey repräsentierte die Funktion stattdessen durch iterierte linear nach vorne über Spidermonkey Bytecode, die interne Funktionsdarstellung. Obwohl dies Optimierungen verbietet, die eine Überarbeitung von Anweisungen erfordern, hat Jägermonkey Compiling den Vorteil, sehr schnell zu sein, was für JavaScript nützlich ist, da die Neukompetenz aufgrund von variablen Typen häufig vorkommt.

Mozilla hat eine Reihe kritischer Optimierungen in Jägermonkey implementiert, vor allem Polymorphe Inline -Caches und Geben Sie Inferenz ein.[15]

Der Unterschied zwischen Tracemonkey und Jägermonkey JIT -Techniken und die Notwendigkeit beides wurde in der Erklärung in a hacks.mozilla.org Artikel. Eine eingehendere Erklärung der technischen Details wurde von Chris Leary, einem der Entwickler von Spidermonkey, bereitgestellt. in einem Blog -Beitrag. Weitere technische Informationen finden Sie in den Blogs eines anderen Entwicklers: Dvander, Dmandelin.

Ionmonkey

Ionmonkey war ein JavaScript -JIT -Compiler von Mozilla, der viele neue Optimierungen ermöglichen sollte, die mit der früheren Jägermonkey -Architektur unmöglich waren.[16]

Ionmonkey war ein traditioneller Compiler: Es übersetzte Spidermonkey Bytecode in ein Kontroll-Flow-Diagramm, verwenden statisches Einzelzuweisungsformular (SSA) für die Zwischendarstellung. Diese Architektur ermöglichte es, bekannte Optimierungen aus anderen Programmiersprachen für JavaScript zu verwenden, einschließlich Typspezialisierung. Funktionsingine, linear-scan Zuteilung registrieren, Dead Code Elimination, und Loop-Invariante-Codebewegung.[17]

Der Compiler kann schnell emittieren nativen Code Übersetzungen von JavaScript -Funktionen auf der ARM, x86, und x86-64 Plattformen. Es ist der Standardmotor seit Firefox 18.[18]

Odinmonkey

Odinmonkey ist der Name des neuen Optimierungsmoduls von Mozilla für ASM.JS, eine leicht kompilierbare Teilmenge von JavaScript. Odinmonkey selbst ist kein JIT -Compiler, sondern der aktuelle JIT -Compiler. Es ist mit Firefox aus Release 22 enthalten.

Warpmonkey

Die Warpmonkey JIT ersetzt den ehemaligen Ionmonkey -Motor aus Version 83.[19] Es ist in der Lage, andere Skripte inzieren und Code basierend auf den verarbeiteten Daten und Argumenten zu spezialisieren. Es übersetzt die Bytecode- und Inline-Cache-Daten in eine mittlere Ebene Zwischendarstellung (Ion Mir) Darstellung. Dieses Diagramm wird transformiert und optimiert, bevor sie auf eine Zwischendarstellung auf niedriger Ebene (Ionen-LIR) abgesenkt wird. Dieser LIR führt die Registrierungszuweisung durch und generiert dann nativen Maschinencode in einem Prozess namens Code Generation. Die Optimierungen hier gehen davon aus, dass ein Skript weiterhin Daten ähnelt, was zuvor gesehen wurde. Die Basis -Jits sind hier für den Erfolg von wesentlicher Bedeutung, da sie ICs generieren, die beobachtete Daten entsprechen. Wenn nach einem Skript mit Kette zusammengestellt wurde, stößt es auf Daten, dass es nicht bereit ist, eine Rettungsaktion auszuführen. Der Rettungsmechanismus rekonstruiert den nativen Maschinenstapelrahmen so, dass er dem von dem Basiskold Interpreter verwendeten Layout entspricht, und verzweigt dann zu diesem Dolmetscher, als würden wir ihn die ganze Zeit ausgeführt. Das Erstellen dieses Stapelrahmens kann spezielle Seiten-Tisch verwenden, die von Warp gespeichert sind, um Werte zu rekonstruieren, die sonst nicht verfügbar sind.[20]

Verwenden

Spidermonkey soll in andere Anwendungen eingebettet sein, die Hostumgebungen für JavaScript bereitstellen. Eine unvollständige Liste folgt:

  • Mozilla Feuerfuchs, Thunderbird, Seeaffeund andere Anwendungen, die die verwenden Mozilla -Anwendungsrahmen
  • Datenspeicheranwendungen:
    • MongoDB zugezogen von V8 zu Spidermonkey in Version 3.2[21]
    • Rioch Verwendet Spidermonkey als Laufzeit für JavaScript MapReduce -Operationen[22]
    • Couchdb Datenbanksystem (geschrieben in Erlang). JavaScript wird zum Definieren von Karten, Filtern, Reduzierung von Funktionen und Anzeigen von Daten verwendet, beispielsweise im HTML -Format.
  • Adobe Acrobat und Adobe Reader, Adobe Flash Professional, und Adobe Dreamweaver. Adobe Acrobat DC verwendet Spiderermonkey 24.2 mit ECMA-357-Support-Forward-Ported.[23]
  • Gnom Desktop -Umgebung, Version 3 und später
  • Yahoo! Widgets, früher Konfabulator
  • FreeSwitch, Open-Source-Telefonie-Engine, verwendet Spidermonkey, um Benutzern das Schreiben von Call-Management-Skripten in JavaScript zu ermöglichen
  • Der textbasierte Webbrowser Elinks Verwendet Spidermonkey, um JavaScript zu unterstützen[24]
  • Teile von Spidermonkey werden in der verwendet Wein Projekts Jscript (re) Implementierung[25]
  • Synchronet, A BBS, E-Mail, Web und Anwendungsserver mit der Spidermonkey-Engine
  • JavaScript OSA, ein Spidermonkey Interprozesskommunikation Sprache für die Macintosh Computer
  • 0 a.d., ein Echtzeit-Strategiespiel
  • Spidermonkey wird auch in vielen anderen Open-Source-Projekten verwendet. Eine externe Liste wird auf der Entwicklerstelle von Mozilla unterhalten.[26]

Spidermonkey enthält eine JavaScript-Shell für die interaktive JavaScript-Entwicklung und für den Befehlszeilenaufruf von JavaScript-Programmdateien.[27]

Siehe auch

Verweise

  1. ^ "1.8.8 - Spidermonkey | Mdn". Entwickler.mozilla.org. 10. Januar 2013. Archiviert vom Original am 2. Mai 2013. Abgerufen 21. März 2013.
  2. ^ Mozilla -Lizenzrichtlinien, Mozilla.org, archiviert Aus dem Original am 2. April 2013, abgerufen 26. März 2013
  3. ^ "Heim". Spidermonkey JavaScript/WebAssembly Engine. Abgerufen 28. August 2021.
  4. ^ a b c Eich, Brendan (21. Juni 2011). "New JavaScript Engine Modul Besitzer". Brendaneich.com. Archiviert Aus dem Original am 14. Juli 2011. Abgerufen 1. Juli 2011.
  5. ^ a b c Eich, Brendan (3. April 2008). "Popularität". Brendaneich.com. Archiviert Aus dem Original am 3. Juli 2011. Abgerufen 1. Juli 2011.
  6. ^ Eich, Brendan (19. August 2011). "Abbildung der Affenkugel". Archiviert Aus dem Original am 13. Januar 2013. Abgerufen 19. August 2011.
  7. ^ "Neu in JavaScript 1.6". Archiviert Aus dem Original am 5. September 2015. Abgerufen 28. Juli 2015.
  8. ^ "759422 - Nutzung von E4X bei der Erstellung von Rechnung" entfernen ". Abgerufen 5. Februar 2013.
  9. ^ "JavaScript: Tracemonkey, Mozillawiki". Abgerufen 22. Juli 2020.
  10. ^ "Tracemonkey: JavaScript Lightspeed, Brendan Eichs Blog". Abgerufen 22. Juli 2020.
  11. ^ Paul, Ryan (22. August 2008). "Firefox, um einen massiven JavaScript -Leistungsschub zu erhalten". ARS Technica. Archiviert Aus dem Original am 6. Mai 2012. Abgerufen 21. März 2013.
  12. ^ Nethercote, Nicholas (1. November 2011). "Spidermonkey ist auf Diät | Nicholas nethercote". Blog.mozilla.com. Archiviert Aus dem Original am 28. März 2012. Abgerufen 21. März 2013.
  13. ^ "Jaegermonkey - schnelles JavaScript, immer!» Mystery Bail Theatre ". Bailopan.net. 26. Februar 2010. Archiviert Aus dem Original am 24. März 2013. Abgerufen 21. März 2013.
  14. ^ Paul, Ryan (9. März 2010). "Mozilla leiht sich von Webkit, um schnelle neue JS -Engine zu bauen". ARS Technica. Archiviert Aus dem Original am 16. April 2012. Abgerufen 21. März 2013.
  15. ^ "Jaegermonkey - Mozillawiki". Wiki.mozilla.org. Archiviert Aus dem Original am 23. August 2013. Abgerufen 21. März 2013.
  16. ^ "Plattform/Funktionen/Ionmonkey - Mozillawiki". Wiki.mozilla.org. 11. Februar 2013. Archiviert Aus dem Original am 8. März 2013. Abgerufen 21. März 2013.
  17. ^ "Ionmonkey: Mozillas neuer Javascript -JIT -Compiler". Infoq.com. Archiviert Aus dem Original am 8. Dezember 2012. Abgerufen 21. März 2013.
  18. ^ "Firefox Notes - Desktop". Mozilla.org. 8. Januar 2013. Archiviert Aus dem Original am 2. September 2014. Abgerufen 21. März 2013.
  19. ^ "Warp: Verbesserte JS -Leistung in Firefox 83 - Mozilla Hacks - The Web Developer Blog". Mozilla Hacks - Der Webentwicklerblog. 13. November 2020. Abgerufen 28. August 2021.
  20. ^ "Spidermonkey - Dokumentation von Firefox Source Docs". Firefox-Source-docs.mozilla.org. Abgerufen 28. August 2021.
  21. ^ "JavaScript -Änderungen in MongoDB 3.2 - MongoDB Manual 3.4". Archiviert Aus dem Original am 6. Juni 2017. Abgerufen 23. November 2016.
  22. ^ "Die Release RIAK 0.8 und JavaScript Map/Reduzierung". Archiviert Aus dem Original am 3. November 2011. Abgerufen 24. April 2011.
  23. ^ "Acrobat DC SDK -Dokumentation". helpx.adobe.com. Abgerufen 5. November 2021.
  24. ^ Bolso, Erik Inge (8. März 2005). "2005 Textmodus Browser -Zusammenfassung". Linux Journal. Archiviert Aus dem Original am 15. März 2010. Abgerufen 5. August 2010.
  25. ^ Wein-CVS-Mailingliste Archiviert 7. Februar 2009 bei der Wayback -Maschine, 16. September 2008: "Jscript: Der regelmäßige Expressions Compiler basierend auf der Implementierung von Mozilla Regexp"
  26. ^ "Spidermonkey> Foss". MDN Web Docs. Abgerufen 2. April 2019.
  27. ^ "Einführung in die JavaScript -Shell". Mdn. Mozilla Developer Network. 29. September 2010. archiviert von das Original am 29. Juni 2011. Abgerufen 14. Dezember 2010. Die JavaScript-Shell ist ein Befehlszeilenprogramm, das in der Spidermonkey-Quellverteilung enthalten ist. [...] Sie können es als interaktive Shell verwenden.

Externe Links