ดังนั้นฉันจะพูดได้ไหมว่าส่วนที่ตีความนั้นเป็นข้อกำหนดในข้อกำหนดภาษาหรือทำให้เข้าใจผิดว่าภาษานั้นเป็นภาษาโปรแกรมที่ถูกตีความเมื่อเคารพความแตกต่างระหว่างภาษาและการใช้งานหลายอย่าง?
EcmaScript language geeks มักใช้คำว่า "ES interpreter" เพื่ออ้างถึงการนำ EcmaScript มาใช้ แต่สเป็คไม่ได้ใช้คำนั้น ภาพรวมของภาษาโดยเฉพาะภาษาที่อธิบายในแง่ล่ามไม่เชื่อเรื่องพระเจ้าไปนี้:
ECMAScript เป็นแบบวัตถุ: ภาษาพื้นฐานและเครื่องมืออำนวยความสะดวกสำหรับโฮสต์นั้นจัดทำโดยวัตถุและโปรแกรม ECMAScript เป็นกลุ่มของวัตถุที่ใช้ในการสื่อสาร
ดังนั้น EcmaScript จึงถือว่า "สภาพแวดล้อมของโฮสต์" ซึ่งถูกกำหนดให้เป็นผู้ให้คำจำกัดความของวัตถุรวมถึงสิ่งที่อนุญาตให้ I / O หรือลิงค์อื่น ๆ ไปยังโลกภายนอก แต่ไม่ต้องการล่าม
ความหมายของคำพูดและการแสดงออกในภาษาที่กำหนดไว้ในแง่ของข้อกำหนดเสร็จซึ่งนำมาใช้เล็กน้อยในล่าม แต่ข้อกำหนดไม่ได้ต้องการที่
8.9 ประเภทข้อกำหนดเสร็จสมบูรณ์
ประเภทแล้วเสร็จจะใช้ในการอธิบายพฤติกรรมของงบ ( break
, continue
, return
และthrow
) ที่ดำเนินการถ่ายโอนต่างแดนของการควบคุม ค่าประเภทแล้วเสร็จเป็นอเนกประสงค์ของรูปแบบ ( ชนิด , คุ้มค่า , เป้าหมาย ) ที่ประเภทเป็นหนึ่งในปกติ , ทำลาย , คง , การกลับมาหรือโยน , ค่าใดค่าภาษา ECMAScript หรือที่ว่างเปล่าและเป้าหมายเป็นตัวระบุ ECMAScript ใด ๆ หรือว่างเปล่า
คำว่า“เสร็จสิ้นทันทีทันใด” หมายถึงเสร็จสิ้นการใด ๆ กับประเภทอื่น ๆ กว่าปกติ
การถ่ายโอนการควบคุมที่ไม่ใช่ในท้องถิ่นสามารถแปลงเป็นอาร์เรย์ของคำสั่งด้วยการข้ามซึ่งอนุญาตให้ทำการคอมไพล์โค้ดเนทีฟหรือไบต์
"EcmaScript Engine"อาจเป็นวิธีที่ดีกว่าในการแสดงแนวคิดเดียวกัน
ไม่มีคอมไพเลอร์สแตติกสำหรับ JavaScript อย่างเห็นได้ชัด
นี่ไม่เป็นความจริง. V8 "ล่าม" รวบรวมรหัสท้องถิ่นภายใน Rhino เลือกที่จะรวบรวม Java bytecode ภายในและล่าม Mozilla ต่างๆ ({Trace, Spider, Jager} Monkey) ใช้คอมไพเลอร์ JIT
V8 :
V8 เพิ่มประสิทธิภาพโดยการรวบรวม JavaScript เป็นรหัสเครื่องก่อนที่จะดำเนินการกับการดำเนินการ bytecode หรือตีความมัน
แรด :
public final void setOptimizationLevel(int optimizationLevel)
ตั้งค่าระดับการปรับให้เหมาะสมปัจจุบัน คาดว่าระดับการปรับให้เหมาะสมจะเป็นจำนวนเต็มระหว่าง -1 ถึง 9 ค่าลบใด ๆ จะถูกตีความว่าเป็น -1 และค่าใด ๆ ที่มากกว่า 9 จะถูกตีความเป็น 9 ระดับการเพิ่มประสิทธิภาพของ -1 หมายถึงโหมดการแปลจะเป็นเสมอ มือสอง ระดับ 0 ถึง 9 บ่งชี้ว่าไฟล์คลาสอาจถูกสร้างขึ้น ระดับการปรับให้เหมาะสมที่สูงขึ้นจะเป็นการแลกเปลี่ยนประสิทธิภาพเวลาคอมไพล์สำหรับประสิทธิภาพรันไทม์ ไม่สามารถตั้งค่าระดับของเครื่องมือเพิ่มประสิทธิภาพได้มากกว่า -1 ถ้าไม่มีแพคเกจโปรแกรมเพิ่มประสิทธิภาพ ณ เวลาทำงาน
TraceMonkey :
TraceMonkey เพิ่มการรวบรวมรหัสเนทีฟในเอนจินJavaScript®ของ Mozilla (รู้จักในชื่อ“ SpiderMonkey”) มันขึ้นอยู่กับเทคนิคที่พัฒนาขึ้นที่ UC Irvine ที่เรียกว่า "trace trees" และการสร้างโค้ดและแนวคิดที่แชร์กับโครงการ Tamarin Tracing ผลลัพธ์สุทธิคือความเร็วที่เพิ่มขึ้นอย่างมากทั้งในเบราว์เซอร์ chrome และเนื้อหาของหน้าเว็บ