กลับไปหน้าบทความ

อ่าน 7 นาที

สไปเดอร์มังกี้

SpiderMonkey เป็น เอ็นจิ้น JavaScript และ WebAssembly แบบโอเพนซอร์สโดย Mozilla Foundation [ 4 ] เอ็นจิ้นนี้ขับเคลื่อนเว็บ เบราว์เซอร์ Firefox และใช้คอมไพเลอร์ JavaScript แบบ...

สไปเดอร์มังกี้

สไปเดอร์มังกี้
นักพัฒนา
ปล่อยกันยายน 2538 ( กันยายน 2538 )
เขียนเป็นซี , ซี++
ระบบปฏิบัติการข้ามแพลตฟอร์ม
แพลตฟอร์มIA-32 , x86-64 , ARM , MIPS , SPARC , [ 1 ] RISC-V [ 2 ]
พิมพ์JavaScriptและWebAssembly engine
ใบอนุญาตMPL 2.0 [ 3 ]
เว็บไซต์spidermonkey .dev
ที่เก็บข้อมูลgithub.com/mozilla-firefox/firefox/tree/main/js/src , github.com/mozilla-spidermonkey​​​​​

SpiderMonkeyเป็นเอ็นจิ้นJavaScriptและWebAssemblyแบบโอเพนซอร์สโดยMozilla Foundation [ 4 ]เอ็นจิ้นนี้ขับเคลื่อนเว็บเบราว์เซอร์Firefox และใช้คอมไพเลอร์ JavaScript แบบ just-in-time (JIT) หลายรุ่นรวมถึง TraceMonkey, JägerMonkey, IonMonkey และ WarpMonkey รุ่นปัจจุบัน

นี่คือเอนจิน JavaScript ตัวแรก ที่เขียนโดยBrendan Eichที่Netscape Communications และต่อมาได้เปิดให้ใช้งานแบบโอเพนซอร์ส และปัจจุบันได้รับการดูแลรักษาโดยมูลนิธิ Mozilla การออกแบบของมันทำให้สามารถฝังลงในแอปพลิเคชันต่างๆ นอกเหนือจากเว็บเบราว์เซอร์ได้ โดยมีการใช้งานในระบบฐานข้อมูล MongoDB, Adobe Acrobat และสภาพแวดล้อมเดสก์ท็อป GNOME

ประวัติศาสตร์

ในปี 1995 Eich "เขียน JavaScript เสร็จภายในสิบวัน" [ 5 ] โดย "ได้รับการว่าจ้างให้ทำงานที่ Netscape ด้วยคำสัญญาว่าจะ 'เขียนScheme ' ในเบราว์เซอร์" [ 6 ] (แนวคิดในการใช้ Scheme ถูกยกเลิกเมื่อ "ฝ่ายบริหารด้านวิศวกรรม [ตัดสินใจ] ว่าภาษาต้อง 'ดูเหมือนJava ' ) [ 6 ]ในช่วงปลายปี 1996 Eich จำเป็นต้อง "ชำระหนี้ทางเทคนิค จำนวนมาก " ที่เหลือจากปีแรก จึง "อยู่บ้านเป็นเวลาสองสัปดาห์เพื่อเขียน Mocha ใหม่เป็นโค้ดเบสที่ต่อมาเป็นที่รู้จักในชื่อ SpiderMonkey" [ 5 ] (Mocha เป็นชื่อการทำงานดั้งเดิมของภาษา) [ 6 ] [ 7 ] ในปี 2011 Eich ได้โอนการจัดการโค้ด SpiderMonkey ให้กับ Dave Mandelin [ 5 ]

เวอร์ชัน

ประวัติเวอร์ชันของ SpiderMonkey
เวอร์ชั่น วันที่วางจำหน่าย เวอร์ชัน ECMAScriptเวอร์ชันเบราว์เซอร์ เพิ่มฟังก์ชันการทำงาน[ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ]
ไม่รองรับ:1.0 (มอคค่า) กันยายน พ.ศ. 2538 [ 8 ]Netscape Navigator 2.0b1 [ 13 ]
  • ไวยากรณ์พื้นฐานส่วนใหญ่มาจากC ( >>>การเลื่อนแบบไม่ระบุเครื่องหมาย) จากJavaคำfor-inสั่งและ การประกาศ มาfunctionจากAWK [ 8 ]
  • var, with, this, obj.propและobj[prop]ไวยากรณ์ การแทรกเครื่องหมายเซมิโคลอนอัตโนมัติ และ<!--ความคิดเห็น
  • ประเภทข้อมูล: ตัวเลข, สตริง, บูลีน, อ็อบเจ็กต์ และฟังก์ชัน; ค่าที่ไม่กำหนดและค่าว่าง
  • ObjectคลาสStringและDateเมธอด, Mathอ็อบเจ็กต์, eval(), parseInt(), parseFloat(),isNaN()
  • คุณสมบัติ ของฟังก์ชันarguments(ข้อสังเกต: เป็นเพียงชื่อเรียกแทนของอ็อบเจ็กต์ฟังก์ชัน)
ไม่รองรับ:1.1 (มอคค่า) สิงหาคม พ.ศ. 2539พื้นฐานสำหรับ ES1เน็ตสเคป เนวิเกเตอร์ 3.0
  • ออกแบบภาษาตามแนวคิดเดิมเสร็จสมบูรณ์ แต่ถูกตัดให้สั้นลงเนื่องจากการหยุดพัฒนาฟีเจอร์ของ Netscape Navigator 2.0 [ 8 ]
  • การสืบทอดแบบอิงตามต้นแบบ (จากSelfprototype ) ผ่าน คุณสมบัติของฟังก์ชัน
  • typeofและผู้ปฏิบัติvoidงานdelete var
  • Arrayชั้นBooleanเรียนFunctionNumberString
  • การแปลงประเภทข้อมูลอัตโนมัติ อ็อบเจ็กต์ Wrapper เมื่อเข้าถึงคุณสมบัติของประเภทข้อมูลพื้นฐาน
ไม่รองรับ:1.2มิถุนายน พ.ศ. 2540พื้นฐานสำหรับ ES3เน็ตสเคป เนวิเกเตอร์ 4.0-4.05
  • เอนจิ้นใหม่ที่มีชื่อรหัสว่า "SpiderMonkey" จะมาแทนที่เอนจิ้น Mocha เดิม
  • นิพจน์ปกติ , นิพจน์ฟังก์ชัน , ฟังก์ชันซ้อนกัน
  • do-whileป้ายswitchกำกับข้อความbreak/ continueพร้อมป้ายกำกับdelete obj.propคุณสมบัติ__proto__เสมือน
  • ลิเทอรัล Array ( [...]), Object ( {prop: ...}) และ RegExp ( /.../)
  • เมธอดของอาร์เรย์: push, pop, shift, splice, unshift, concat, slice
  • เมธอดของสตริง: charCodeAt, fromCharCode, match, replace, search, substr
  • ฟังก์ชันและargumentsเป็นวัตถุที่แตกต่างกันคุณสมบัติarguments.calleeของฟังก์ชันarity
  • นอกเหนือมาตรฐาน: ลบการแปลงอัตโนมัติสำหรับ==(กู้คืนในเวอร์ชัน 1.3), คำสั่ง watch()/ unwatch(), import/ exportและสคริปต์ที่ลงนามแล้ว
ไม่รองรับ:1.3ตุลาคม พ.ศ. 2541ES1 + ES2 (เป็นไปตามมาตรฐาน)Netscape Navigator 4.06-4.7x
  • การปฏิบัติตามมาตรฐาน ECMAScript อย่างสมบูรณ์ การสนับสนุน Unicode ===และ!==. [ 14 ]
  • การแปลงประเภทข้อมูล==กลับไปใช้ความหมายตาม JS1.1
  • if(x=y)ไม่สามารถแปลงเป็นif(x==y). ได้อีกต่อไป
  • อ็อบเจ็กต์ที่ไม่ใช่ค่าว่างจะมีค่าเป็นจริงในเงื่อนไข แม้แต่Booleanอ็อบเจ็กต์ที่ห่อหุ้มค่าว่างfalseก็ตาม
  • การผูกมัด ทั่วโลกundefined(สำนวนก่อนหน้านี้: void(0)) [ 8 ] [ 15 ]
ไม่รองรับ:1.4เซิร์ฟเวอร์เน็ตสเคป
  • try-catch-finallyคำสั่งinและinstanceofตัวดำเนินการ
  • ไม่มีการเชื่อมโยงทางอ้อมeval()(ภายหลังถูกยกเลิก) ถูกลบObject.prototype.eval()ออก
  • คุณสมบัติ ของฟังก์ชันargumentsตอนนี้เป็นตัวแปรแล้วarityคุณสมบัติถูกยกเลิกและแทนที่lengthด้วย
ไม่รองรับ:1.5พฤศจิกายน 2000อีเอส3Netscape Navigator 6, Firefox 1.0
  • คุณสมบัติของ ES3: ข้อผิดพลาดขณะรันไทม์จะถูกรายงานเป็นข้อยกเว้น, การปรับปรุง regex (ตัวกำหนดปริมาณที่ไม่โลภ, กลุ่มที่ไม่จับคู่, การยืนยันล่วงหน้า, แฟล็ก m), วิธีการจัดรูปแบบตัวเลข (toExponential, toFixed, toPrecision)
  • ตัวรับและตัวตั้งค่า
  • ประโยค ย่อยหลายcatchประโยคในtry-catch.
  • สามารถประกาศฟังก์ชันภายในนิพจน์และifข้อความได้
  • constคำประกาศ (ไม่ได้เป็นส่วนหนึ่งของ ES3 แต่ถูกนำมาใช้ใน ES6)
ไม่รองรับ:1.6พฤศจิกายน 2548 อี4เอ็กซ์Firefox 1.5
  • เมธอดของอาร์เรย์: indexOf, lastIndexOf, every, filter, forEach, map, some
  • เจเนริกของอาร์เรย์และสตริง
  • E4Xและfor each...inคำแถลง
ไม่รองรับ:1.7ตุลาคม พ.ศ. 2549Firefox 2.0
  • ตัววนซ้ำและตัวสร้าง, for...ofคำ สั่ง yield, let, การกำหนดค่าแบบแยกส่วน
  • รูปแบบที่ไม่เป็นมาตรฐาน: การสร้างอาร์เรย์แบบเข้าใจง่าย (array comprehensions)
ไม่รองรับ:1.8มิถุนายน 2551Firefox 3.0
  • เมธอดของอาร์เรย์: reduce, reduceRight
  • รูปแบบที่ไม่เป็นมาตรฐาน: การปิดนิพจน์และการสร้างความเข้าใจในตัวสร้าง
ไม่รองรับ:1.8.1มิถุนายน 2552Firefox 3.5 [ 16 ]
  • TraceMonkey: การติดตาม JIT [ 17 ]
  • รองรับ JSON, Object.getPrototypeOf(), เมธอดของสตริง: trim, trimLeft, trimRight, startsWith
  • เปลี่ยนจากภาษา C ธรรมดามาใช้ C++ ในการสร้างเอนจิ้น
ไม่รองรับ:1.8.5มีนาคม 2554อีเอส5Firefox 4.0 [ 18 ]
  • JägerMonkey: วิธีการ JIT
  • เมธอดสำหรับการจัดการและปกป้องอ็อบเจ็กต์ ได้แก่ Array.isArray(), Date.prototype.toJSON(), Function.prototype.bind()
  • โหมดเข้มงวด
  • เครื่องหมายจุลภาคท้ายไม่เป็นที่ยอมรับJSON.parse()
  • คลาสพร็อกซีและอาร์เรย์แบบกำหนดชนิดข้อมูล (ไม่ได้เป็นส่วนหนึ่งของ ES5 แต่ถูกนำมาใช้ใน ES6)
ไม่รองรับ:1.8.8มกราคม 2555Firefox 10.0
  • อ็อบเจ็กต์นิพจน์ปกติไม่สามารถเรียกใช้งานได้อีกต่อไปแล้ว โดยใช้เมธอด Function.prototype.isGenerator() (ในเวอร์ชัน 5.0)
  • ES6 WeakMap (ในเวอร์ชัน 6.0)
  • ลบ Function.arity ออกแล้ว (ในเวอร์ชัน 7.0)
  • E4X ถูกยกเลิกการใช้งานแล้ว (ในเวอร์ชัน 10.0)
ไม่รองรับ:17พฤศจิกายน 2555Firefox 17.0
  • ArrayBuffer.prototype.slice() (ในเวอร์ชัน 12.0)
  • ES6 สำหรับ...ของ และ Map/Set (ในเวอร์ชัน 13.0)
  • พารามิเตอร์เริ่มต้นและพารามิเตอร์ที่เหลือของ ES6, เมธอดใหม่ของ Number, อินเทอร์เฟซ DataView (ในเวอร์ชัน 15.0)
  • ตัวดำเนินการ spread ใน ES6 สำหรับการเริ่มต้นอาร์เรย์ (ในเวอร์ชัน 16.0)
  • เมธอดของสตริง: startsWith, endsWith, contains การปรับปรุงตัววนซ้ำ E4X ถูกปิดใช้งานสำหรับเว็บ (ในเวอร์ชัน 17.0)
ไม่รองรับ:24กันยายน 2556Firefox 24.0
  • IonMonkey: ปรับปรุงคอมไพเลอร์ JIT ให้เหมาะสม (ในเวอร์ชัน 18.0) [ 19 ]
  • ES6 Proxy, เมธอด String.prototype.contains() (ในเวอร์ชัน 18.0)
  • for each...inฟังก์ชัน Math.imul() ถูกยกเลิกการใช้งานแล้ว (ในเวอร์ชัน 20.0)
  • วิธีการกำหนดค่า Map/Set: คีย์, ค่า, รายการ (ในเวอร์ชัน 20.0/24.0)
  • E4X ถูกลบออกแล้ว และ parseInt จะไม่ถือว่าสตริงที่มี "0" นำหน้าเป็นเลขฐานแปดอีกต่อไป (ในเวอร์ชัน 21.0)
  • ฟังก์ชันลูกศร ES6, Object.is() (ในเวอร์ชัน 22.0)
  • OdinMonkey: โมดูลเพิ่มประสิทธิภาพ asm.js (ในเวอร์ชัน 22.0)
ไม่รองรับ:31กรกฎาคม 2557Firefox 31.0
ไม่รองรับ:38พฤษภาคม 2558Firefox 38.0
ไม่รองรับ:45มีนาคม 2559Firefox 45.0
ไม่รองรับ:52มีนาคม 2560อีเอส6Firefox 52.0
  • การปฏิบัติตามมาตรฐาน ES6 เกือบสมบูรณ์ภายในเวอร์ชัน 52.0-53.0 การเรียก Tail Call ที่ถูกต้องเป็นปัญหาที่ค้างคามานานเพียงอย่างเดียว[ 20 ]
ไม่รองรับ:60พฤษภาคม 2561Firefox 60.0
ไม่รองรับ:68กรกฎาคม 2562Firefox 68.0
ไม่รองรับ:78มิถุนายน 2020Firefox 78.0
  • เปลี่ยนเอ็นจิ้น regex จาก YARR เป็น Irregexp ของ V8 [ 21 ]
ไม่รองรับ:91สิงหาคม 2564Firefox 91.0
  • WarpMonkey JIT เข้ามาแทนที่ IonMonkey ในเวอร์ชัน 83.0 [ 22 ]
ไม่รองรับ:102มิถุนายน 2565Firefox 102.0
ไม่รองรับ:103กรกฎาคม 2565Firefox 103.0
ไม่รองรับ:131กันยายน 2024 [ 23 ]Firefox 131.0
เวอร์ชันล่าสุด:140 (ESR)มิถุนายน 2568อีเอส16Firefox 140 (ESR)
เวอร์ชันล่าสุด:150เมษายน 2569Firefox 150
ตำนาน:
ไม่ได้รับการสนับสนุน
ได้รับการสนับสนุน
เวอร์ชั่นล่าสุด
เวอร์ชันตัวอย่าง
เวอร์ชันในอนาคต

มาตรฐาน

SpiderMonkey ใช้ข้อกำหนด ECMA-262 ( ECMAScript ) ECMA-357 ( ECMAScript สำหรับ XML (E4X)) ถูกยกเลิกในช่วงต้นปี 2556 [ 24 ]

ภายใน

SpiderMonkey เขียนด้วยภาษาC / C++และประกอบด้วยตัวแปลภาษาคอมไพเลอร์ JIT ชื่อ WarpMonkey และตัวจัดการหน่วยความจำอัตโนมัติ (garbage collector )

เทรซมังกี้

TraceMonkey [ 17 ]เป็นคอมไพเลอร์ JIT ตัวแรกที่เขียนขึ้นสำหรับภาษา JavaScript ในตอนแรกถูกนำเสนอเป็นตัวเลือกในเวอร์ชันเบต้าและแนะนำในบล็อกของ Brendan Eich เมื่อวันที่ 23 สิงหาคม 2551 [ 25 ]คอมไพเลอร์นี้ได้กลายเป็นส่วนหนึ่งของเวอร์ชันหลักในฐานะส่วนหนึ่งของ SpiderMonkey ในFirefox 3.5ซึ่งให้ "การปรับปรุงประสิทธิภาพที่เร็วขึ้นระหว่าง 20 ถึง 40 เท่า" เมื่อเทียบกับตัวแปลภาษาพื้นฐานในFirefox 3 [ 26 ]

แทนที่จะคอมไพล์ฟังก์ชันทั้งหมด TraceMonkey เป็นJIT สำหรับการติดตามการทำงาน ซึ่งทำงานโดยการบันทึกการไหลของควบคุมและประเภทข้อมูลระหว่างการประมวลผลของตัวแปลภาษา ข้อมูลเหล่านี้จะถูกนำไปใช้ในการสร้างแผนผังการติดตามซึ่งเป็นเส้นทางเฉพาะของโค้ดเนที

การปรับปรุง JägerMonkey ในที่สุดก็ทำให้ TraceMonkey ล้าสมัย โดยเฉพาะอย่างยิ่งกับการพัฒนา เอ็นจิ้น การอนุมานประเภท SpiderMonkey TraceMonkey หายไปจาก SpiderMonkey ตั้งแต่ Firefox 11 เป็นต้นไป[ 27 ]

เยเกอร์มังกี้

JägerMonkey ซึ่งมีชื่อภายในว่า MethodJIT เป็นคอมไพเลอร์ JIT แบบเมธอดทั้งหมดที่ออกแบบมาเพื่อปรับปรุงประสิทธิภาพในกรณีที่ TraceMonkey ไม่สามารถสร้างโค้ดเนทีฟ ที่เสถียร ได้[ 28 ] [ 29 ]เปิดตัวครั้งแรกในFirefox 4และในที่สุดก็เข้ามาแทนที่ TraceMonkey อย่างสมบูรณ์ และต่อมาก็ถูกแทนที่ด้วย IonMonkey

JägerMonkey ทำงานแตกต่างจากคอมไพเลอร์อื่นๆ ในกลุ่มเดียวกันอย่างมาก: ในขณะที่คอมไพเลอร์ทั่วไปทำงานโดยการสร้างและปรับแต่งกราฟการไหลของควบคุมที่แสดงถึงฟังก์ชัน แต่ JägerMonkey กลับทำงานโดยการวนซ้ำไปข้างหน้าแบบเชิงเส้นผ่านไบต์โค้ด ของ SpiderMonkey ซึ่งเป็นตัวแทนของฟังก์ชันภายใน แม้ว่าวิธีนี้จะห้ามการปรับแต่งที่ต้องมีการเรียงลำดับคำสั่งใหม่ แต่การคอมไพล์ของ JägerMonkey ก็มีข้อดีคือเร็วมาก ซึ่งมีประโยชน์สำหรับ JavaScript เนื่องจากต้องคอมไพล์ใหม่บ่อยครั้งเนื่องจากการเปลี่ยนแปลงประเภทของตัวแปร

Mozilla ได้นำการปรับปรุงประสิทธิภาพที่สำคัญหลายอย่างมาใช้ใน JägerMonkey ซึ่งที่สำคัญที่สุดคือแคชแบบอินไลน์โพลีมอร์ฟิกและการอนุมานประเภท[ 30 ]

ความแตกต่างระหว่างเทคนิค JIT ของ TraceMonkey และ JägerMonkey รวมถึงความจำเป็นในการใช้ทั้งสองเทคนิค ได้รับการอธิบายไว้ในบทความของ hacks.mozilla.orgคำอธิบายเชิงลึกเกี่ยวกับรายละเอียดทางเทคนิคเพิ่มเติมนั้น ได้รับการอธิบายโดย Chris Leary หนึ่งในผู้พัฒนา SpiderMonkey ในบล็อกโพสต์(ลิงก์ถูกปิดใช้งานแล้ว ถูกเก็บถาวรเมื่อวันที่ 9 ธันวาคม 2012 ที่archive.today ) สามารถค้นหาข้อมูลทางเทคนิคเพิ่มเติมได้ในบล็อกของนักพัฒนาคนอื่นๆ เช่นdvanderและdmandelin

ไอออนมังกี้

IonMonkey เป็นคอมไพเลอร์ JavaScript JIT ของ Mozilla ซึ่งมีจุดมุ่งหมายเพื่อเปิดใช้งานการเพิ่มประสิทธิภาพใหม่ๆ มากมายที่ไม่สามารถทำได้ด้วยสถาปัตยกรรม JägerMonkey รุ่นก่อนหน้า[ 31 ]

IonMonkey เป็นคอมไพเลอร์แบบดั้งเดิมมากกว่า โดยจะแปลงไบต์โค้ด SpiderMonkey เป็นกราฟควบคุมการไหลโดยใช้รูปแบบการกำหนดค่าเดี่ยวแบบคงที่ (SSA) สำหรับการแสดงผลระดับกลางสถาปัตยกรรมนี้ทำให้สามารถใช้การเพิ่มประสิทธิภาพที่รู้จักกันดีจากภาษาโปรแกรมอื่น ๆ สำหรับ JavaScript ได้ รวมถึงการกำหนดประเภทเฉพาะการแทรกฟังก์ชันการจัดสรรรีจิสเตอร์แบบสแกนเชิงเส้นการกำจัดโค้ดที่ไม่ได้ใช้งานและการเคลื่อนย้ายโค้ดที่ไม่เปลี่ยนแปลงในลู[ 32 ]

คอมไพเลอร์สามารถสร้าง การแปล โค้ดเนทีฟที่ รวดเร็ว ของฟังก์ชัน JavaScript บน แพลตฟอร์ม ARM , x86และx86-64ได้ โดยเป็นเอ็นจิ้นเริ่มต้นตั้งแต่ Firefox 18 [ 19 ]

โอดินมังกี้

OdinMonkey เป็นชื่อของโมดูลเพิ่มประสิทธิภาพใหม่ของ Mozilla สำหรับasm.jsซึ่งเป็นส่วนย่อยของ JavaScript ที่คอมไพล์ได้ง่าย OdinMonkey เองไม่ใช่คอมไพเลอร์ JIT แต่ใช้คอมไพเลอร์ JIT ปัจจุบัน มันถูกรวมอยู่ใน Firefox ตั้งแต่เวอร์ชัน 22 [ 33 ] OdinMonkey ถูกปิดใช้งานโดยค่าเริ่มต้นตั้งแต่ Firefox 148 ที่วางจำหน่ายในเดือนกุมภาพันธ์ 2026 [ 34 ]

วาร์ปมังกี้

WarpMonkey JIT แทนที่เอ็นจิ้น IonMonkey เดิมตั้งแต่เวอร์ชัน 83 [ 22 ]มันสามารถแทรกสคริปต์อื่นๆ และปรับแต่งโค้ดตามข้อมูลและอาร์กิวเมนต์ที่กำลังประมวลผลได้ มันแปลงไบต์โค้ดและข้อมูลแคชแบบอินไลน์เป็น Mid-level Intermediate Representation (Ion MIR) กราฟนี้จะถูกแปลงและปรับให้เหมาะสมก่อนที่จะลดระดับลงเป็น Low-level Intermediate Representation (Ion LIR) LIR นี้จะทำการจัดสรรรีจิสเตอร์แล้วสร้างโค้ดเครื่องดั้งเดิมในกระบวนการที่เรียกว่าการสร้างโค้ด การปรับให้เหมาะสมในที่นี้ถือว่าสคริปต์ยังคงเห็นข้อมูลที่คล้ายกับที่เคยเห็นมาก่อน Baseline JITs มีความสำคัญต่อความสำเร็จในที่นี้เพราะมันสร้าง IC ที่ตรงกับข้อมูลที่สังเกตได้ หากหลังจากที่สคริปต์ถูกคอมไพล์ด้วย Warp แล้วพบข้อมูลที่ไม่พร้อมที่จะจัดการ มันจะทำการบายพาส กลไกการบายพาสจะสร้างเฟรมสแต็กเครื่องดั้งเดิมขึ้นใหม่ให้ตรงกับเค้าโครงที่ใช้โดย Baseline Interpreter แล้วแยกสาขาไปยังตัวแปลภาษาดังกล่าวราวกับว่าเรากำลังเรียกใช้มันอยู่ตลอดเวลา การสร้างเฟรมสแต็กนี้อาจใช้ตารางด้านข้างพิเศษที่บันทึกไว้โดย Warp เพื่อสร้างค่าที่ไม่มีอยู่จริงขึ้นมาใหม่[ 35 ]

ใช้

SpiderMonkey ถูกออกแบบมาเพื่อใช้งานร่วมกับแอปพลิเคชันอื่นๆ ที่มีสภาพแวดล้อมสำหรับ JavaScript รายชื่อแอปพลิเคชันบางส่วนมีดังต่อไปนี้:

  • Mozilla Firefox , Thunderbird , SeaMonkeyและแอปพลิเคชันอื่นๆ ที่ใช้เฟรมเวิร์กแอปพลิเคชันของ Mozilla
  • แอปพลิเคชันจัดเก็บข้อมูล:
    • MongoDBเปลี่ยนจากV8เป็น SpiderMonkey ในเวอร์ชัน 3.2 [ 36 ]
    • Riakใช้ SpiderMonkey เป็นรันไทม์สำหรับการดำเนินการ MapReduce ของ JavaScript [ 37 ]
    • ระบบฐานข้อมูลCouchDB (เขียนด้วย ภาษา Erlang ) JavaScript ถูกใช้สำหรับการกำหนดแผนที่ ตัวกรอง ฟังก์ชันลดรูป และการแสดงผลข้อมูล เช่น ในรูปแบบ HTML
  • Adobe Acrobatและ Adobe Reader, Adobe Flash ProfessionalและAdobe Dreamweaver Adobe Acrobat DC ใช้ Spidermonkey 24.2 พร้อมการรองรับ ECMA-357 ที่ส่งต่อมา[ 38 ]
  • สภาพแวดล้อมเดสก์ท็อป GNOMEเวอร์ชัน 3 และเวอร์ชันที่ใหม่กว่า
  • สภาพแวดล้อมเดสก์ท็อป Cinnamonเวอร์ชัน 1.0 และเวอร์ชันที่ใหม่กว่า
  • Yahoo! Widgetsซึ่งเดิมชื่อ Konfabulator
  • FreeSWITCHซึ่งเป็นซอฟต์แวร์โอเพนซอร์สสำหรับระบบโทรศัพท์ ใช้ SpiderMonkey เพื่อให้ผู้ใช้สามารถเขียนสคริปต์การจัดการการโทรด้วย JavaScript ได้
  • PythonMonkeyใช้ SpiderMonkey เพื่ออนุญาตให้ผู้ใช้เขียนโปรแกรมที่ฟังก์ชัน ประเภท และเหตุการณ์ของ JavaScript และ Python สามารถทำงานร่วมกันได้ และ (เท่าที่เป็นไปได้) สามารถใช้พื้นที่จัดเก็บหน่วยความจำร่วมกันได้[ 39 ]
  • เว็บเบราว์เซอร์แบบข้อความELinksใช้ SpiderMonkey เพื่อรองรับ JavaScript [ 40 ]
  • บางส่วนของ SpiderMonkey ถูกนำมาใช้ในJScript (re-)implementation ของโครงการWine [ 41 ]
  • Synchronetคือระบบ BBS, อีเมล, เว็บ และแอปพลิเคชันเซิร์ฟเวอร์ที่ใช้เอนจิน SpiderMonkey
  • JavaScript OSA ภาษา สำหรับการสื่อสารระหว่างกระบวนการ (Inter-Process Communication ) ของ SpiderMonkey สำหรับคอมพิวเตอร์Mac
  • 0 ADเกมวางแผนแบบเรียลไทม์
  • Wasmer ได้รวม SpiderMonkey เข้ากับโครงการโอเพนซอร์ส WinterJS ของพวกเขา ซึ่งเป็นสภาพแวดล้อมการทำงานของ JavaScript
  • SpiderMonkey ยังถูกใช้ในโครงการโอเพนซอร์สอื่นๆ อีกมากมาย โดยมีการรวบรวมรายชื่อภายนอกไว้ในเว็บไซต์สำหรับนักพัฒนาของ Mozilla [ 42 ]

SpiderMonkey มี JavaScript Shell สำหรับการพัฒนา JavaScript แบบโต้ตอบและสำหรับการเรียกใช้ไฟล์โปรแกรม JavaScript จากบรรทัดคำสั่ง[ 43 ]

ดูเพิ่มเติม

  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า , เอ็นจิ้น SpiderMonkey (JavaScript-C)
  • ปฏิทินการเผยแพร่ Firefox (และ Spidermonkey)
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=SpiderMonkey&oldid=1355229610 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ สไปเดอร์มังกี้

SpiderMonkey เป็น เอ็นจิ้น JavaScript และ WebAssembly แบบโอเพนซอร์สโดย Mozilla Foundation [ 4 ] เอ็นจิ้นนี้ขับเคลื่อนเว็บ เบราว์เซอร์ Firefox และใช้คอมไพเลอร์ JavaScript แบบ...

ประวัติศาสตร์

ในปี 1995 Eich "เขียน JavaScript เสร็จภายในสิบวัน" [ 5 ] โดย "ได้รับการว่าจ้างให้ทำงานที่ Netscape ด้วยคำสัญญาว่าจะ 'เขียน Scheme ' ในเบราว์เซอร์" [ 6 ] (แนวคิดในการใช้ Scheme ถูกยกเลิกเมื่อ "ฝ่ายบริหารด้านวิศวกรรม [ตัดสินใจ] ว่าภาษาต้อง 'ดูเหมือน Java ' ) [...

เวอร์ชัน

ประวัติเวอร์ชันของ SpiderMonkey เวอร์ชั่น วันที่วางจำหน่าย เวอร์ชัน ECMAScript เวอร์ชันเบราว์เซอร์ เพิ่มฟังก์ชันการทำงาน [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] ไม่รองรับ: 1.0 (มอคค่า) กันยายน พ.ศ. 2538 [ 8 ] Netscape Navigator 2.

มาตรฐาน

SpiderMonkey ใช้ข้อกำหนด ECMA-262 ( ECMAScript ) ECMA-357 ( ECMAScript สำหรับ XML (E4X)) ถูกยกเลิกในช่วงต้นปี 2556 [ 24 ]