ก่อนอื่นชี้แจง, Java ไม่ได้รวบรวมแบบคงที่และเชื่อมโยงในวิธี C ++ มันถูกรวบรวมเป็น bytecode ซึ่งจะถูกตีความโดย JVM JVM สามารถไปและทำการคอมไพล์ทันเวลากับภาษาเครื่องพื้นเมือง แต่ไม่จำเป็นต้องทำ
ประเด็น: ฉันคิดว่าการโต้ตอบเป็นความแตกต่างทางปฏิบัติหลัก เนื่องจากทุกอย่างถูกตีความคุณสามารถใช้ส่วนที่ตัดตอนมาของรหัสแยกวิเคราะห์และเรียกใช้กับสถานะปัจจุบันของสภาพแวดล้อม ดังนั้นหากคุณใช้รหัสที่เริ่มต้นตัวแปรแล้วคุณจะสามารถเข้าถึงตัวแปรนั้นได้ ฯลฯ ซึ่งจริง ๆ แล้วมันให้วิธีการต่าง ๆ เช่นสไตล์การทำงาน
อย่างไรก็ตามการตีความมีค่าใช้จ่ายสูงโดยเฉพาะอย่างยิ่งเมื่อคุณมีระบบขนาดใหญ่ที่มีการอ้างอิงและบริบทจำนวนมาก ตามคำนิยามมันจะสิ้นเปลืองเพราะรหัสที่เหมือนกันอาจจะต้องตีความและปรับให้เหมาะสมสองครั้ง (แม้ว่า runtimes ส่วนใหญ่จะมีการแคชและการปรับให้เหมาะสมที่สุด) ถึงกระนั้นคุณต้องจ่ายค่าใช้จ่ายในการใช้งานจริงและมักจะต้องใช้สภาพแวดล้อมรันไทม์ นอกจากนี้คุณยังมีโอกาสน้อยที่จะเห็นการเพิ่มประสิทธิภาพระหว่างโพรซีเดอร์ที่ซับซ้อนเนื่องจากในปัจจุบันประสิทธิภาพของพวกเขาไม่ได้มีการโต้ตอบที่เพียงพอ
ดังนั้นสำหรับระบบขนาดใหญ่ที่จะไม่เปลี่ยนแปลงมากนักและสำหรับบางภาษามันสมเหตุสมผลกว่าที่จะทำการคอมไพล์และคิดล่วงหน้าทุกอย่างทำการปรับให้เหมาะสมทั้งหมดที่คุณทำได้ สิ่งนี้จบลงด้วยการใช้งานจริงแบบลีนที่ได้รับการปรับให้เหมาะสมสำหรับเครื่องเป้าหมาย
สำหรับการสร้าง executbles นั้นมีส่วนเกี่ยวข้องกับมันเพียงเล็กน้อย IMHO คุณสามารถสร้างไฟล์ที่เรียกทำงานได้จากภาษาที่คอมไพล์ แต่คุณยังสามารถสร้างไฟล์ที่เรียกใช้งานได้จากภาษาที่แปลยกเว้นล่ามและรันไทม์ที่ได้รับการบรรจุไว้ใน exectuable และซ่อนไว้จากคุณ ซึ่งหมายความว่าโดยทั่วไปคุณยังคงต้องจ่ายค่าใช้จ่ายรันไทม์ (แม้ว่าฉันแน่ใจว่าสำหรับบางภาษามีวิธีการแปลทุกอย่างเป็นแบบทรี)
ฉันไม่เห็นด้วยว่าทุกภาษาสามารถโต้ตอบได้ ภาษาบางภาษาเช่น C เชื่อมโยงกับเครื่องและโครงสร้างลิงก์ทั้งหมดซึ่งฉันไม่แน่ใจว่าคุณสามารถสร้างเวอร์ชันอินเทอร์แอคทีฟที่มีความหมายได้อย่างสมบูรณ์