อ่าน 10 นาที
รายชื่อเครื่องมือ JavaScript
เอนจิ้นJavaScript รุ่นแรกๆเป็นตัวแปลรหัสต้นฉบับแต่เอนจิ้นสมัยใหม่ใช้การคอมไพล์แบบทันทีเพื่อปรับปรุงประสิทธิภาพโดยทั่วไปแล้ว เอนจิ้น JavaScript ได้รับการพัฒนาโดย ผู้ผลิต
รายชื่อเครื่องมือ JavaScript
เอนจิ้นJavaScript รุ่นแรกๆเป็นตัวแปลรหัสต้นฉบับแต่เอนจิ้นสมัยใหม่ใช้การคอมไพล์แบบทันทีเพื่อปรับปรุงประสิทธิภาพ[ 1 ]โดยทั่วไปแล้ว เอนจิ้น JavaScript ได้รับการพัฒนาโดย ผู้ผลิต เว็บเบราว์เซอร์และเบราว์เซอร์หลักทุกตัวจะมีเอนจิ้นนี้ ในเบราว์เซอร์ เอนจิ้น JavaScript จะทำงานร่วมกับเอนจิ้นการเรนเดอร์ผ่านDocument Object ModelและWeb IDL bindings [ 2 ]อย่างไรก็ตาม การใช้เอนจิ้น JavaScript ไม่ได้จำกัดอยู่แค่เบราว์เซอร์เท่านั้น ตัวอย่างเช่นเอนจิ้น V8เป็นส่วนประกอบหลักของระบบรันไทม์Node.js [ 3 ]พวกมันยังถูกเรียกว่า เอนจิ้น ECMAScriptตามชื่ออย่างเป็นทางการของข้อกำหนด ด้วยการมาถึงของWebAssembly เอนจิ้นบางตัวสามารถเรียกใช้โค้ดนี้ใน แซนด์บ็อกซ์เดียวกันกับโค้ด JavaScript ทั่วไปได้[ 4 ] [ 3 ]
ประวัติศาสตร์
เอนจิน JavaScript ตัวแรกถูกสร้างขึ้นโดยBrendan Eichในปี 1995 สำหรับเว็บเบราว์เซอร์ Netscape Navigator [ 5 ] มันเป็นตัวแปลภาษา พื้นฐาน สำหรับภาษาที่ Eich คิดค้นขึ้น[ 6 ] (ซึ่งต่อมาได้พัฒนาเป็น เอนจิน SpiderMonkeyซึ่งยังคงใช้โดยเบราว์เซอร์Firefox [ 5 ] )
Googleเปิดตัว เบราว์เซอร์ Chromeในปี 2551 โดยใช้ เอนจิน JavaScript V8ซึ่งในขณะนั้นเร็วกว่าคู่แข่งมาก[ 7 ] [ 8 ] ทำให้เกิดการแข่งขันระหว่างผู้ผลิตเบราว์เซอร์ในการพัฒนาเอนจิน JavaScript ที่เร็วขึ้นเรื่อยๆ[ 9 ] นวัตกรรมสำคัญในยุคนี้ ได้แก่ การเปลี่ยนจาก ตัวแปลภาษาแบบเดินตาม ต้นไม้ พื้นฐาน ไปเป็นตัวแปลภาษาไบต์โค้ดVM แบบ ใช้สแต็กและรีจิสเตอร์การคอมไพล์แบบทันเวลา (JIT) การแคชแบบอินไลน์ (คลาสที่ซ่อนอยู่) และGC แบบแบ่งรุ่นApple เปิดตัวเอนจิ น Nitroที่รองรับ JIT ในเดือนมิถุนายน 2551 สำหรับ เบราว์เซอร์ Safariซึ่งมีประสิทธิภาพดีกว่ารุ่นก่อนหน้าถึง 30% [ 10 ] [ 11 ] Mozillaก็ทำตามในเดือนสิงหาคม 2551 ด้วย TraceMonkey ซึ่งเป็นคอมไพเลอร์ JIT ตัวแรกสำหรับเอนจิน SpiderMonkey ที่เปิดตัวใน Firefox 3.1 [ 12 ] Operaเข้าร่วมการแข่งขันด้านประสิทธิภาพด้วย เอนจิ้น Carakan ที่ใช้ register-bytecode และ JIT ในปี 2009 [ 13 ]และวางจำหน่ายในเดือนเมษายน 2010 [ 14 ] เอนจิ้น Chakra ตัวแรกที่เปิดใช้งาน JIT ของ Microsoft ซึ่งอยู่ระหว่างการพัฒนามาตั้งแต่ปี 2008 [ 15 ]เปิดตัวเป็นส่วนหนึ่งของInternet Explorer 9ในปี 2011 การเขียนใหม่ครั้งใหญ่ปรากฏในMicrosoft Edge Legacyในปี 2015 และเปิดเผยเป็น โอเพนซอร์สในชื่อ ChakraCoreในปี 2016
ต่อมาได้มีการพัฒนาประสิทธิภาพเพิ่มเติมในเอนจิ้น JavaScript หลักๆ ด้วยการนำสถาปัตยกรรม JIT แบบหลายระดับมาใช้ คอมไพเลอร์ JIT ที่มีความก้าวหน้ามากขึ้นเรื่อยๆ จะถูกใช้เพื่อเพิ่มประสิทธิภาพจุดสำคัญในโค้ดของผู้ใช้ โดยแต่ละระดับถัดไปจะส่งมอบโค้ดเนทีฟที่มีประสิทธิภาพมากขึ้นเรื่อยๆ โดยแลกกับเวลาในการคอมไพล์ที่ช้าลง Chrome เป็นเบราว์เซอร์แรกที่นำมาใช้ใน V8 ในปี 2010 ด้วยการแนะนำ Crankshaft ซึ่งเป็นคอมไพเลอร์ JIT แบบ 2 ระดับ[ 16 ]ในปี 2023 สถาปัตยกรรมของ V8 ได้พัฒนาเป็น 4 ระดับ ได้แก่ Ignition – ตัวแปลไบต์โค้ดแบบใช้รีจิสเตอร์, Sparkplug – คอมไพเลอร์ JIT ที่รวดเร็วและไม่เพิ่มประสิทธิภาพ, Maglev และ TurboFan – คอมไพเลอร์ JIT ที่ช้ากว่าและเพิ่มประสิทธิภาพ[ 17 ] JavaScriptCore ในปัจจุบันมีสถาปัตยกรรม 4 ระดับที่คล้ายกัน[ 18 ]ในขณะที่ SpiderMonkey และ ChakraCore ของ Firefox มี 3 ระดับ (ตัวแปลและ JIT แบบ 2 ระดับ) [ 19 ] [ 20 ]อย่างไรก็ตาม ความซับซ้อนที่เพิ่มขึ้นเรื่อยๆ ของคอมไพเลอร์ JIT นี้ได้รับการวิพากษ์วิจารณ์ว่าเป็นแหล่งที่มาของบั๊กในเบราว์เซอร์จำนวนมาก ทำให้ผู้ผลิตเบราว์เซอร์บางรายปิดใช้งาน JIT โดยสิ้นเชิง เช่น "โหมดความปลอดภัยขั้นสุดยอด" ของ Microsoft Edgeที่เปิดตัวในปี 2021 และมีรายงานว่ามีผลกระทบต่อประสิทธิภาพเพียงเล็กน้อยสำหรับการท่องเว็บในชีวิตประจำวัน[ 21 ]
อิทธิพลของ V8 ขยายออกไปนอกเบราว์เซอร์ด้วยการเปิดตัวNode.jsในปี 2009 และตัวจัดการแพ็กเกจnpmในปี 2010 เมื่อความนิยมของทั้งสองอย่างเพิ่มขึ้นอย่างมาก V8 จึงกลายเป็นกลไกหลักที่ขับเคลื่อนโค้ด JavaScript ฝั่งเซิร์ฟเวอร์จำนวนมหาศาล[ 22 ] [ 23 ]ในปี 2013 เฟรมเวิร์ก Electronปรากฏขึ้น ซึ่งช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันเดสก์ท็อปด้วยเทคโนโลยีเว็บได้เช่นกัน โดยใช้Chromiumร่วมกับ V8 และNode.jsอยู่เบื้องหลัง[ 24 ]
ด้วยการใช้ประโยชน์จากการปรับปรุงประสิทธิภาพในเอนจิ้น JavaScript คอมไพเลอร์ Emscripten C/C++-to-JavaScript จึงปรากฏขึ้นในปี 2010-2011 และอนุญาตให้รันโค้ด C/C++ ที่ซับซ้อนที่มีอยู่ เช่นเอนจิ้นเกมและแม้แต่เครื่องเสมือน ทั้งหมด ได้โดยตรงในเบราว์เซอร์asm.jsซึ่งเป็นส่วนย่อยระดับต่ำของ JavaScript ที่สามารถปรับแต่งได้อย่างมากสำหรับคอมไพเลอร์ดังกล่าว ปรากฏขึ้นในปี 2013 โดยFirefoxเป็นเบราว์เซอร์แรกที่นำการปรับแต่งเฉพาะสำหรับ asm.js มาใช้ด้วยโมดูล OdinMonkey [ 25 ]ในที่สุด asm.js และNaCl (เทคโนโลยีคู่แข่งของ Google) ก็พัฒนาเป็น มาตรฐาน WebAssemblyในปี 2017 โดยเอนจิ้นหลักทั้งหมดเพิ่มการสนับสนุนสำหรับมาตรฐานนี้[ 4 ]
ช่องว่างหกปีระหว่างECMAScript 5 (2009) และES6 (2015) ถือเป็นจุดเปลี่ยนสำคัญในการพัฒนาเอ็นจิ้น JavaScript ในขณะที่ ES5 เป็นภาษาที่มีขนาดกะทัดรัดและมีการใช้งานพื้นฐานที่ตรงไปตรงมา ES6 ได้นำเสนอพื้นฐานของ JavaScript สมัยใหม่ ซึ่งมีความซับซ้อนเพิ่มขึ้นอย่างมาก รวมถึงวงจรการออกเวอร์ชันข้อกำหนดใหม่เป็นประจำทุกปี สิ่งนี้ทำให้การมุ่งเน้นไม่เพียงแต่การเพิ่มประสิทธิภาพการทำงานเท่านั้น แต่ยังรวมถึงการรักษาความทันต่อมาตรฐานที่พัฒนาอย่างรวดเร็ว (ทั้งของ ECMAScript และระบบนิเวศเว็บที่กว้างขึ้น) และนำไปสู่การรวมตัวกันของเอ็นจิ้นที่มีทรัพยากรเพียงพอที่จะทำเช่นนั้น โครงการขนาดเล็กจำนวนมากไม่ได้นำข้อกำหนด ES6 มาใช้อย่างเต็มที่ และ ทั้ง OperaและMicrosoftต่างก็หยุดพัฒนาเอ็นจิ้นของตนและนำ V8 มาใช้ในปี 2013 และ 2021 ตาม ลำดับ [ 26 ] [ 27 ]เอ็นจิ้น Nashorn ถูกถอดออกจาก OpenJDK เนื่องจากความกังวลที่คล้ายกันเกี่ยวกับการพัฒนาอย่างรวดเร็วของ ECMAScript [ 28 ]
รายการ
| เครื่องยนต์ | ใบอนุญาต | มาตรฐาน | จิท | วาสม์ | เขียนเป็น | คำอธิบาย |
|---|---|---|---|---|---|---|
| วี8 | BSD-3-Clause | อีเอสเน็กซ์ | ใช่ | ใช่ | ซี++ | JavaScript เป็นเอนจิน JavaScript ของGoogle Chromeและ เบราว์เซอร์ที่ใช้ Chromium / Blinkเช่นMicrosoft Edgeนอกจากนี้ยังใช้ในรันไทม์Node.jsและDeno , เฟรมเวิร์ก Electronและโครงการอื่นๆ อีกมากมาย ปัจจุบันมี ตัวแปล ไบต์โค้ดแบบใช้รีจิสเตอร์ (Ignition) และคอมไพเลอร์ JIT สามระดับ (Sparkplug, Maglev และ Turbofan) |
| สไปเดอร์มังกี้ | เอ็มพีแอล-2.0 | อีเอสเน็กซ์ | ใช่ | ใช่ | ซี++ | เอ็นจิ้น JavaScript ของMozilla Firefoxและแอปพลิเคชัน Mozilla Gecko อื่นๆ ปัจจุบันเอ็นจิ้นนี้ประกอบด้วยตัวแปลภาษา JIT แบบ 2 ระดับสำหรับ JavaScript (Baseline Compiler และ WarpMonkey) และ JIT แบบ 2 ระดับแยกต่างหากสำหรับ WebAssembly [ 19 ]ก่อนหน้านี้ เอ็นจิ้นนี้ประกอบด้วยส่วนประกอบต่างๆ เช่น คอมไพเลอร์ TraceMonkey (JIT JavaScript ตัวแรก), JägerMonkey, IonMonkey และโมดูลเพิ่มประสิทธิภาพ OdinMonkey ซึ่งโดดเด่นในด้านการบุกเบิกasm.js [ 25 ] |
| JavaScriptCore | LGPL-2.0บางส่วนอยู่ภายใต้BSD | อีเอสเน็กซ์ | ใช่ | ใช่ | ซี++ | เอนจิน JavaScript ของเบราว์เซอร์SafariและWebKit นอกจากนี้ยังใช้ในรันไทม์ Bunด้วย เริ่มต้นในปี 2001 โดยแยกมาจาก เอนจิน KJSในปี 2008 เอนจินนี้ได้รับการเขียนใหม่เพื่อใช้ตัวแปลไบต์โค้ดแบบใช้รีจิสเตอร์แบบเธรดโดยตรง ซึ่งมีชื่อรหัสว่า SquirrelFish ไม่นานหลังจากนั้น SquirrelFish Extreme (Nitro ในแง่การตลาดของ Apple) [ 29 ]ก็ได้รับการเผยแพร่ ซึ่งทำความเร็วได้มากกว่า 2 เท่าโดยใช้การแคชแบบอินไลน์โพลีมอร์ ฟิก และเธรดบริบท[ 30 ]ซึ่งเป็นรูปแบบพื้นฐานของJIT [ 31 ] ส่วนประกอบเหล่านี้ต่อมากลายเป็นตัวแปลไบต์โค้ด LLint และ Baseline JIT [ 32 ]ในปี 2011 คอมไพเลอร์ที่ปรับแต่งประสิทธิภาพตัวแรกถูกเพิ่มเข้ามา นั่นคือ DFG ("Data Flow Graph") JIT [ 32 ] [ 33 ]ในปี 2014 ได้มีการเพิ่มคอมไพเลอร์ขั้นสูง ที่ใช้ LLVMซึ่งเรียกว่า Fourth Tier LLVM (FTL) JIT [ 34 ]ในปี 2016 FTL ได้รับการเขียนใหม่เพื่อใช้แบ็กเอนด์ B3 ที่สร้างขึ้นใหม่แทน LLVM [ 35 ] [ 18 ] |
| ChakraCore | เอ็มไอที | อีเอส2019 | ใช่ | ใช่ | ซี++ | เอ็นจิ้น JavaScriptของMicrosoft Edge Legacy [ 36 ] เปิดเผยซอร์สโค้ดภายใต้ชื่อ ChakraCore ในปี 2016 Microsoft ยุติการบำรุงรักษาในปี 2021 และปล่อยให้ชุมชนดูแลต่อ แต่ก็ไม่ได้รับความสนใจมากนักตั้งแต่นั้นมา มีคุณสมบัติเป็นตัวแปลไบต์โค้ดแบบใช้รีจิสเตอร์และคอมไพเลอร์ JIT สองระดับ[ 20 ] |
| ลิบเจเอส | เงื่อนไข BSD-2 | อีเอสเน็กซ์ | เลขที่ | ใช่ | ซี++ | เอ็นจิ้น JavaScript ของเบราว์เซอร์SerenityOSและLadybird [ 37 ]ในตอนแรกเป็นตัวแปล AST-walking พื้นฐาน ต่อมาได้รับการอัปเกรดเป็นตัวแปล VM bytecode แบบใช้รีจิสเตอร์[ 38 ] [ 39 ] [ 40 ] [ 41 ]รองรับ WebAssembly ผ่านไลบรารี LibWasm |
| แรด | เอ็มพีแอล-2.0 | ES2023 (บางส่วน) | ผ่านทาง JVM | เลขที่ | ชวา | เอ็นจิ้น JavaScript จากMozillaสำหรับแพลตฟอร์ม Javaการพัฒนาเริ่มต้นที่ Netscape ในปี 1997 เดิมทีมันคอมไพล์ JavaScript เป็นไบต์โค้ด JVMแต่การใช้งานนั้นไม่มีประสิทธิภาพและส่วนใหญ่ใช้ในโหมดตัวแปลภาษา[ 42 ]รวมอยู่ในJDK 6 (2006) ในชื่อ javax.script ใน JDK 8 (2014) มันถูกแทนที่ด้วยเอ็นจิ้น Nashorn ที่เร็วกว่า[ 43 ]ถึงกระนั้น โครงการก็ยังคงพัฒนาต่อไปและได้นำการสนับสนุนสำหรับมาตรฐานใหม่ๆ หลายส่วนมา ใช้ [ 44 ]ใช้ในรันไทม์ RingoJS |
| นาชอร์น | จีพีแอล-2.0 | ES6 (บางส่วน) | ผ่านทาง JVM | เลขที่ | ชวา | เอ็นจิ้น JavaScript จากOracleที่ใช้ในJDK 8–14 [ 45 ]สร้าง ไบต์โค้ด JVM ที่มีประสิทธิภาพ มากกว่า Rhino โดยใช้ประโยชน์จาก คำสั่ง invokedynamic ใหม่ ที่แนะนำใน JDK 7 [ 46 ]ถูกยกเลิกใน JDK 11 (2018) เนื่องจากปัญหาในการบำรุงรักษาอันเนื่องมาจากการพัฒนาอย่างรวดเร็วของมาตรฐาน ECMAScript [ 28 ]และถูกลบออกใน JDK 15 (2020) [ 47 ]การพัฒนายังคงดำเนินต่อไปจนถึงปัจจุบันในรูปแบบไลบรารีแบบสแตนด์อโลน[ 48 ] |
| กราอัลเจเอส | GFTC, UPL-1.0 | อีเอสเน็กซ์ | ผ่านทางGraalVM | ใช่ | ชวา | เอ็นจิ้น JavaScript ของGraalVMสำหรับ แพลตฟอร์ม JVMใช้งานด้วย Truffle ซึ่งเป็นเฟรมเวิร์กภาษาใหม่สำหรับการสร้างโค้ดประสิทธิภาพสูงจากตัวแปลภาษาโดยอัตโนมัติ โดยอิงจากแนวคิดของ การประเมิน ตัวแปลภาษาบางส่วน (การฉายภาพ Futamura) [ 49 ] [ 50 ]โดยทั่วไปเร็วกว่าทั้ง Rhino และ Nashorn มาก และมีประสิทธิภาพเทียบเท่ากับเอ็นจิ้นเบราว์เซอร์หลัก[ 51 ]รองรับ WebAssembly ผ่านโมดูล GraalWasm |
| เฮอร์เมส | เอ็มไอที | ES2023 (บางส่วน) | เลขที่ | เลขที่ | ซี++ | พัฒนาโดยFacebookสำหรับแอปมือถือReact Native [ 52 ]แต่สามารถใช้งานได้โดยอิสระจาก React Native เช่นกัน คอมไพล์ JavaScript เป็นไบต์โค้ดที่ปรับให้เหมาะสมล่วงหน้าเพื่อปรับปรุงเวลาเริ่มต้นแอป[ 53 ] [ 54 ] [ 41 ]โครงการ Static Hermes มีเป้าหมายที่จะเพิ่มการกำหนดประเภทแบบคงที่และการคอมไพล์ JavaScript เป็นโค้ดเนทีฟ ซึ่งทั้งสองอย่างนี้ยังอยู่ในขั้นตอนการทดลอง และการปรับปรุงต่างๆ ให้กับ VM ซึ่งต่อมาได้เผยแพร่เป็น Hermes V1 ใน React Native 0.82 [ 55 ] |
| ดัคเทป | เอ็มไอที | ES6 (บางส่วน) | เลขที่ | เลขที่ | ซี | เอ็นจิ้น ES5 ขนาดเล็ก ฝังได้ง่าย พร้อมคุณสมบัติบางอย่างจาก ES6 และรุ่นต่อมา[ 56 ] [ 57 ] [ 58 ] [ 59 ]ใช้โดยเบราว์เซอร์ NetSurf |
| เอ็กซ์เอส | LGPL-3.0+ , Apache-2.0 | อีเอส2025 | เลขที่ | เลขที่ | ซี | เอ็นจิ้น JavaScript สำหรับไมโครคอนโทรลเลอร์ที่มีทรัพยากรจำกัด สอดคล้องกับ ECMAScript เวอร์ชันล่าสุด[ 60 ] [ 61 ] [ 59 ] [ 41 ] [ 62 ]เดิมทีพัฒนาโดยKinomaและเปิดเป็นโอเพนซอร์สครั้งแรกในปี 2015 ในฐานะส่วนประกอบสำคัญของเฟรมเวิร์ก KinomaJS IoT ปัจจุบันได้รับการดูแลโดย Moddable ในฐานะส่วนหนึ่งของ Moddable SDK [ 63 ] |
| มูเจเอส | ไอเอสซี | อีเอส5 | เลขที่ | เลขที่ | ซี | ไลบรารีตัวแปล ECMAScript น้ำหนักเบา ออกแบบมาเพื่อฝังในซอฟต์แวร์อื่นเพื่อขยายความสามารถในการเขียนสคริปต์ เดิมพัฒนาขึ้นสำหรับMuPDF [ 64 ] [ 57 ] |
| ควิกเจเอส | เอ็มไอที | อีเอส2025 | เลขที่ | เลขที่ | ซี | เอ็นจิ้น ECMAScript น้ำหนักเบาโดยFabrice Bellardและ Charlie Gordon ซึ่งปัจจุบันรองรับ ES2023 เกือบสมบูรณ์[ 65 ] [ 57 ] [ 53 ] [ 66 ] [ 41 ]ใช้ตัวแปล VM ไบต์โค้ดแบบ stack และคอมไพเลอร์แบบ single-pass ที่แปลงเป็นไบต์โค้ดโดยตรงโดยไม่ต้องมี AST สามารถคอมไพล์ .js เป็นไบต์โค้ดล่วงหน้าและสร้างไฟล์ปฏิบัติการไบนารีที่ไม่มีการพึ่งพาภายนอก ใช้ใน WinterJS และรันไทม์ LLRT ของAmazon , CouchDB , nginx (เป็นทางเลือกแทน njs), yt- dlp |
| V4 (QJSEngine) | LGPL , GPL , Qt | อีเอส2016 | ใช่ | เลขที่ | ซี++ | เอ็นจิ้น JavaScript ของ เฟรมเวิร์ก QML ของ Qt ซึ่งขับเคลื่อน UI ของแอปพลิเคชัน Qt สมัยใหม่Qt QuickและKDE Plasma [ 67 ] [ 68 ] [ 69 ] [ 70 ] ปรากฏครั้งแรกใน Qt 5.0 (2012) ในฐานะตัวห่อสำหรับ V8 [ 71 ]ต่อมาถูกแทนที่ด้วยเอ็นจิ้น "V4" น้ำหนักเบาที่พัฒนาขึ้นเองของ Qt ใน Qt 5.2 (2013) [ 72 ] [ 73 ]สอดคล้องกับ ES7/ES2016 [ 74 ]และเปิดใช้งาน JIT โดยใช้โค้ด macroassembler ที่ยืมมาจาก JavaScriptCore [ 75 ] [ 76 ]ใช้สำหรับ QML เท่านั้น ไม่ได้ใช้สำหรับโมดูลเอ็นจิ้นเบราว์เซอร์แบบฝัง: โมดูล QtWebKit ใช้ JavaScriptCore ต่อมาถูกแทนที่ด้วย QtWebEngine ที่ใช้ Blink /V8 |
| เอสปรุยโน | เอ็มพีแอล-2.0 | ES5 (กลุ่มย่อย) | เลขที่ | เลขที่ | ซี | ตัวแปลภาษาขนาดเล็กมากสำหรับไมโครคอนโทรลเลอร์โดย เฉพาะ [ 58 ]สามารถทำงานได้ใน RAM น้อยกว่า 8 kB โดยการดำเนินการจากซอร์สโค้ด (แทนที่จะเป็นไบต์โค้ด ) |
| เจอร์รี่สคริปต์ | อะปาเช่-2.0 | อีเอส2022 | เลขที่ | เลขที่ | ซี | เอ็นจิ้น JavaScript น้ำหนักเบาพิเศษจากSamsungสำหรับไมโครคอนโทรลเลอร์ที่มี RAM น้อยกว่า 64 KB [ 57 ] [ 59 ]รองรับ ES5 และมาตรฐานส่วนใหญ่ในปัจจุบันจนถึง ES2022 |
| หอยทาก | แอลจีพีแอล-2.1 | อีเอสเน็กซ์ | เลขที่ | ใช่ | ซี++ | เอ็นจิ้น JavaScript น้ำหนักเบาตัวใหม่จากSamsungสำหรับสภาพแวดล้อมที่มีทรัพยากรจำกัด โดยมุ่งเป้าไปที่อุปกรณ์ระดับกลาง เช่น โทรศัพท์และทีวี อยู่ระหว่างการพัฒนาอย่างต่อเนื่อง รองรับมาตรฐาน ECMAScript ล่าสุดอย่างเต็มที่ ยกเว้นคุณสมบัติเล็กน้อยบางประการ และ WebAssembly [ 77 ] [ 57 ] [ 78 ]ใช้ตัวแปล VM แบบรีจิสเตอร์ |
| ออตโต้ | เอ็มไอที | อีเอส5 | เลขที่ | เลขที่ | ไป | เอ็นจิ้น JavaScript ที่เขียนด้วยภาษา Go บริสุทธิ์ รองรับ ES5 แต่ใช้เอ็นจิ้น regex ที่ไม่สอดคล้องกับมาตรฐานของ Go |
| โกจา | เอ็มไอที | ES2023 (บางส่วน) | เลขที่ | เลขที่ | ไป | เอ็นจิ้น JavaScript ในภาษา Go บริสุทธิ์ ได้รับแรงบันดาลใจจาก otto โดยใช้งาน ES5 อย่างสมบูรณ์และบางส่วนของมาตรฐานใหม่กว่า ใช้โดยการใช้งาน Go อย่างเป็นทางการของEthereum (Geth) [ 79 ] |
| งูเหลือม | MIT , ไม่ได้รับอนุญาต | อีเอสเน็กซ์ | เลขที่ | เลขที่ | สนิม | เอ็นจิ้น JavaScript ที่เขียนด้วย Rust [ 80 ] [ 81 ] |
| คีเซล | เอ็มไอที | อีเอสเน็กซ์ | เลขที่ | เลขที่ | ซิก | เอ็นจิ้น JavaScript โดย Linus Groh ที่เขียนด้วยภาษาZig [ 82 ] [ 83 ] [ 84 ] [ 85 ] |
| เครื่องยนต์ 262 | เอ็มไอที | อีเอสเน็กซ์ | เลขที่ | เลขที่ | ไทป์สคริปต์ | เอ็นจิ้น JavaScript ที่เขียนด้วย TypeScript สำหรับการพัฒนาและการสำรวจ โดยมีจุดประสงค์หลักเพื่อใช้เป็นตัวอย่างอ้างอิงของภาษา[ 41 ] |
เครื่องยนต์ประวัติศาสตร์
เอนจิ้นเหล่านี้เลิกผลิตไปแล้ว และส่วนใหญ่จึงน่าสนใจในแง่ของประวัติศาสตร์ บางส่วนอาจยังคงใช้งานอยู่ในปัจจุบันเพื่อวัตถุประสงค์ด้านความเข้ากันได้กับระบบเก่า (โดยเฉพาะเอนจิ้นเก่าของ Microsoft ที่ยังคงมาพร้อมกับWindows )
| เครื่องยนต์ | ใบอนุญาต | มาตรฐาน | จิท | เขียนเป็น | คำอธิบาย |
|---|---|---|---|---|---|
| มอคค่า | กรรมสิทธิ์ | JS1.1 (≈ES1) | เลขที่ | ซี++ | เอ็นจิ้น JavaScript ตัวแรก ต้นแบบโดยBrendan Eichในช่วงเวลา 10 วันในเดือนพฤษภาคม พ.ศ. 2538 และวางจำหน่ายในเดือนกันยายน พ.ศ. 2538 ในNetscape Navigator 2.0b1 [ 86 ] เนื่องจากการหยุดพัฒนาฟีเจอร์ในเดือนสิงหาคม พ.ศ. 2538 จึงไม่สมบูรณ์เมื่อเทียบกับการออกแบบภาษาที่วางแผนไว้ เวอร์ชัน 1.1 ได้รับการเผยแพร่พร้อมกับ Navigator 3.0 ในปี พ.ศ. 2539 ซึ่งเป็นการพัฒนาภาษาในขั้นต้นเสร็จสมบูรณ์ และเป็นพื้นฐานสำหรับ มาตรฐาน ECMAScript ฉบับแรก ในปี พ.ศ. 2540 เอ็นจิ้นนี้มีตัวแยกวิเคราะห์แบบเรียกซ้ำ ที่สร้าง ไบต์โค้ดโดยตรงเครื่องเสมือนแบบใช้สแต็ก ใช้การนับการอ้างอิงแทนGCและแสดงค่าพื้นฐานเป็นยูเนียนแบบแยกแยะแทนที่จะเป็นพอยเตอร์แบบแท็ก ซอร์สโค้ดซึ่งเป็นส่วนหนึ่งของ Navigator 3.0.2 สามารถดูได้จากInternet Archive [ 87 ]สำหรับ Navigator 4.0 เอ็นจิ้นได้รับการเขียนใหม่ทั้งหมดและเปลี่ยนชื่อเป็น SpiderMonkey [ 88 ] |
| เคเจเอส | LGPL-2.0+ | อีเอส5 | เลขที่ | ซี++ | เอ็นจิ้นที่ใช้ในKonqueror เดิม และเป็นส่วนประกอบหนึ่งของKHTMLเป็นรุ่นก่อนหน้าของ JavaScriptCore ซึ่งแยกตัวออกมาในปี 2001 และมีความแตกต่างกันอย่างมากตั้งแต่นั้นมา เดิมทีเป็นตัวแปลแบบ AST-walking ได้รับการอัปเกรดเป็นตัวแปลแบบไบต์โค้ด (FrostByte) ในปี 2008 [ 89 ]การพัฒนาส่วนใหญ่หยุดลงเมื่อ Konqueror เปลี่ยนจาก KHTML เป็น QtWebKit (JavaScriptCore) ก่อน แล้วจึงเป็น QtWebEngine (V8) ในที่สุด KDE Plasma 6ก็ได้ลบเอ็นจิ้น KJS/KHTML ออกไปทั้งหมด[ 90 ] |
| เจสคริปต์ | กรรมสิทธิ์ | อีเอส3 | เลขที่ | C++ [ 91 ] | เอ็นจิ้น JavaScript ของInternet Explorerเวอร์ชัน 3.0 - 8.0 เป็นส่วนประกอบหนึ่งของเอ็นจิ้นเบราว์เซอร์MSHTML (Trident) |
| เจสคริปต์ .NET | กรรมสิทธิ์ | อีเอส4 | ผ่านทาง CLR | เอ็นจิ้น JavaScript สำหรับ.NET Framework 1.0 - 4.x ที่พัฒนาโดยMicrosoftใช้ในASP.NETโดยอิงตามCommon Language RuntimeและCOM Interopเดิมทีเปิดตัวในชื่อ JScript .NET ในปี 2000 [ 92 ]โดยมีเวอร์ชันต่อมาเรียกว่า JScript 7.0, JScript 8.0 [ 93 ]และสุดท้ายคือ JScript 10.0 ใน .NET Framework 4.0 [ 94 ]อย่างไรก็ตาม มันไม่เกี่ยวข้องกับทั้งเอ็นจิ้น JScript (หรือที่รู้จักกันในชื่อ JScript 1.0 - 5.8) และ JScript9 [ 93 ]มันรองรับ ES3 คุณสมบัติหลายอย่างที่เสนอสำหรับ ES4 [ 88 ]รวมถึงภาษาเฉพาะที่เกี่ยวข้องกับ .NET อีกมากมาย[ 95 ] [ 96 ]ถูกยกเลิกจาก.NET Coreและแพลตฟอร์ม . NET สมัยใหม่ | |
| จักระ (JScript9) | กรรมสิทธิ์ | อีเอส5 | ใช่ | ซี++ | เอ็นจิ้น JavaScript ของInternet Explorer 9.0 - 11.0 เปิดตัวครั้งแรกในงานMIX 10เมื่อ ปี 2553 [ 97 ]ยังคงมีอยู่ใน Windows 11 ในชื่อ JScript9Legacy.dll ซึ่งเป็นตัวทดแทนที่เข้ากันได้กับเอ็นจิ้น JScript ดั้งเดิม (jscript.dll) [ 98 ] [ 99 ] |
| ลิเนียร์ เอ, ลิเนียร์ บี, ฟูทาร์ค | กรรมสิทธิ์ | อีเอส3 | เลขที่ | ซี++ | ชุดของเอนจิ้น JavaScript รุ่นแรกๆ ของ เบราว์เซอร์ Operaเอนจิ้นที่ไม่มีชื่อใน Opera 3 (1997–2000) Linear A ใน Opera 4–6 (2000–2002) Linear B ใน Opera 7–9.27 (2002–2007) – รองรับ ECMAScript อย่างสมบูรณ์ Futhark ใน Opera 9.50-10.20 (2007–2010) [ 100 ] |
| คารากัน | กรรมสิทธิ์ | อีเอส5 | ใช่ | ซี++ | เอ็นจิ้น JavaScript ของOpera 10.50 - 12.x (2010–2013) [ 13 ] [ 101 ]มีคุณสมบัติไบต์โค้ดแบบใช้รีจิสเตอร์และ JIT [ 13 ]การเปิดตัวเวอร์ชันหลักถัดไป Opera 15 ได้เปลี่ยนจาก Presto ไปใช้ เอ็นจิ้นเบราว์เซอร์ WebKit / Blinkพร้อมกับเอ็นจิ้น JavaScript V8 [ 26 ] |
| คิวทสคริปต์ | LGPL , GPL , Qt | อีเอส5 | เลขที่ | ซี++ | เดิมทีพัฒนาโดย Trolltech ซึ่งปัจจุบันเป็นของThe Qt Companyปรากฏครั้งแรกในQt 4.3 ถูกยกเลิกการใช้งานใน Qt 5.5 โดยเปลี่ยนไปใช้QML V4 แทน และถูกยกเลิกอย่างถาวรใน Qt 6.5 มีพื้นฐานมาจากเอนจิน JavaScriptCore และมีส่วนขยาย ECMAScript เฉพาะของ Qt อยู่บ้าง เช่น การเชื่อมต่อสัญญาณและสล็อตแบบ QObject |
| เอพิเมเทอุส | MPL-1.1 GPL-2.0+ LGPL-2.1+ | อีเอส4 | เลขที่ | ซี++ | การใช้งาน "JavaScript 2.0" แบบทดลองของNetscape ตาม ข้อเสนอES4 [ 88 ] [ 102 ] |
| มะขาม | เอ็มพีแอล-2.0 | อีเอส4 | ใช่ | ซี++ | ใช้เอนจิน ActionScriptและ ECMAScript ในAdobe Flash Player 9และนำมาตรฐาน ES4 มาใช้ |
| นาร์ซิสซัส | MPL-1.1+ GPL-2.0+ LGPL-2.1+ | อีเอส5 | เลขที่ | โค้ด JavaScript | เอนจิน JavaScript ที่นำมาใช้ใน JavaScript ( ตัวประเมินแบบเมตาเซอร์คิวลาร์ ) โดยBrendan Eichผู้สร้าง JavaScript ใช้สำหรับการทดลองคุณสมบัติภาษาใหม่สำหรับความพยายามของ ES6 [ 88 ] |
| ลิงก์ | จีพีแอล-2.0+ | เลขที่ | เลขที่ | ซี | เบราว์เซอร์ ลิงก์มีการใช้งาน JavaScript พื้นฐานจนถึงเวอร์ชัน 2.1pre28 ถูกลบออกในเวอร์ชัน 2.1pre29 เนื่องจาก "มีข้อบกพร่องมาก" [ 103 ] |
| วอยเอเจอร์ | จีพีแอล-3.0 | อีเอส3 | เลขที่ | ซี | Voyagerซึ่งเป็นเว็บเบราว์เซอร์อีกตัวสำหรับAmigaในช่วงปลายทศวรรษ 1990 ถึงต้นทศวรรษ 2000 มีเอนจิน JavaScript เป็นของตัวเอง |
| สคริปต์อีส | กรรมสิทธิ์ | ES3 [ 104 ] | เลขที่ | ซี++ | เอ็นจิ้นที่เป็นกรรมสิทธิ์แบบเก่าที่ได้รับการปรับปรุงครั้งสุดท้ายในปี 2546 โดดเด่นเฉพาะการใช้งานในกล้องโทรทรรศน์อวกาศเจมส์ เวบบ์[ 105 ] |
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ รายชื่อเครื่องมือ JavaScript
เอนจิ้นJavaScript รุ่นแรกๆเป็นตัวแปลรหัสต้นฉบับแต่เอนจิ้นสมัยใหม่ใช้การคอมไพล์แบบทันทีเพื่อปรับปรุงประสิทธิภาพโดยทั่วไปแล้ว เอนจิ้น JavaScript ได้รับการพัฒนาโดย ผู้ผลิต
ประวัติศาสตร์
เอนจิน JavaScript ตัวแรกถูกสร้างขึ้นโดย Brendan Eich ในปี 1995 สำหรับ เว็บเบ ราว์เซอร์ Netscape Navigator [ 5 ] มัน เป็น ตัวแปลภาษา พื้นฐาน สำหรับภาษาที่ Eich คิดค้นขึ้น [ 6 ] (ซึ่งต่อมาได้พัฒนาเป็น เอนจิน SpiderMonkey ซึ่งยังคงใช้โดยเบราว์เซอร์ Firefox [ 5 ]...
รายการ
เครื่องยนต์ ใบอนุญาต มาตรฐาน จิท วาสม์ เขียนเป็น คำอธิบาย วี8 BSD-3-Clause อีเอสเน็กซ์ ใช่ ใช่ ซี++ JavaScript เป็นเอนจิน JavaScript ของ Google Chrome และ เบราว์เซอร์ที่ใช้ Chromium / Blink เช่น Microsoft Edge นอกจากนี้ยังใช้ใน รันไทม์ Node.
เครื่องยนต์ประวัติศาสตร์
เอนจิ้นเหล่านี้เลิกผลิตไปแล้ว และส่วนใหญ่จึงน่าสนใจในแง่ของประวัติศาสตร์ บางส่วนอาจยังคงใช้งานอยู่ในปัจจุบันเพื่อวัตถุประสงค์ด้านความเข้ากันได้กับระบบเก่า (โดยเฉพาะเอนจิ้นเก่าของ Microsoft ที่ยังคงมาพร้อมกับ Windows )