มีปัญหาทั่วไปเกี่ยวกับคำถามนี้เพราะมันสมบูรณ์เกินไป ไม่สมเหตุสมผลที่จะพูดว่า "ภาษา X เร็วกว่าภาษา Y" ภาษาคอมพิวเตอร์นั้นไม่ได้ "เร็ว" หรือ "ช้า" เพราะเป็นเพียงวิธีการแสดงอัลกอริทึม คำถามที่แท้จริงควรเป็นสิ่งที่อยู่ในลำดับของ "ทำไมการใช้งาน X1 ของภาษา X เร็วกว่าการใช้ Y1 ของภาษา Y สำหรับโดเมนปัญหานี้โดยเฉพาะ?"
ความแตกต่างของความเร็วบางอย่างจะหลุดออกไปจากภาษาของตัวเองเนื่องจากภาษาบางภาษาสามารถใช้งานโดเมนได้ง่ายกว่าบางโดเมน แต่สิ่งที่ทำให้การติดตั้งใช้งานได้รวดเร็วนั้นไม่ใช่ภาษา ตัวอย่างเช่นคุณไม่สามารถพูดได้ว่า "Python ช้ากว่า Java" โดยไม่พิจารณาว่าคุณกำลังพูดถึง CPython, IronPython หรือ PyPy นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งสำหรับภาษาที่ใช้ VM เนื่องจากความเร็วจะได้รับผลกระทบโดยตรงจากคุณภาพของ VM
นอกจากนี้ฉันทำงานกับระบบที่ด้วยเหตุผลต่าง ๆ ไม่สามารถใช้ JIT บนอุปกรณ์ของเราด้วย JavaScript VM ที่เป็นที่นิยมซึ่งปกติรองรับ ซึ่งหมายความว่า JavaScript ของเราทำงานได้ช้ากว่าที่คิดบนพีซีที่มีโปรเซสเซอร์ที่คล้ายกัน การเปลี่ยนแปลงอย่างหนึ่งซึ่งไม่เกี่ยวข้องโดยตรงกับภาษานั้นทำให้ JavaScript เปลี่ยนจาก "ช้ากว่า C ++ สองเท่า" เป็น "คำสั่งของขนาดช้ากว่า C ++" สำหรับงานที่เราสนใจ
นอกจากนี้ควรพิจารณาว่าภาษาแตกต่างกันในลักษณะของประสิทธิภาพในรูปแบบที่ไม่สามารถเปรียบเทียบได้โดยตรง เกณฑ์มาตรฐานมากเกินไปเพียงแปลโปรแกรมจากภาษา A เป็นภาษา B และไม่คำนึงถึงว่าภาษาแตกต่างกันไปในฟีเจอร์ใดที่รวดเร็ว (คุณสามารถเห็นสิ่งนี้ได้ในการเปรียบเทียบเกณฑ์เปรียบเทียบที่สมเหตุสมผลเช่นที่คุณลิงก์ไปเนื่องจากพวกเขามักจะมีโน้ตเช่น "ขอบคุณมาก ๆ ๆ ๆ ที่แสดงให้ฉันเห็นว่าจะใช้มันอย่างไรในภาษา Foo)
ตัวอย่างเช่นใช้รหัส Java นี้:
for(int i=0;i<10;i++) {
Object o = new Object;
doSomething(o);
}
มันจะดึงดูดให้ "เขียน" สิ่งนี้ใน C ++ และเปรียบเทียบเวลาทำงาน:
for(int i=0;i<10;i++) {
Object *o = new Object;
doSomething(o);
delete(o);
}
สิ่งนี้คือโปรแกรมเมอร์ C ++ ที่มีความสามารถทุกคนจะเห็นทันทีว่าใน C ++ นี่ไม่ใช่วิธีที่เร็วที่สุดที่จะทำอะไรบางอย่าง คุณสามารถเร่งความเร็วได้อย่างง่ายดายโดยเปลี่ยนให้เหมาะสมกับ C ++:
for(int i=0;i<10;i++) {
Object o;
doSomething(&o);
}
ประเด็นก็คือไม่ใช่ว่า C ++ จะเร็ว แต่แทนที่จะเขียนมาตรฐานเพื่อเปรียบเทียบภาษานั้นยากจริงๆ ในการดำเนินการอย่างเหมาะสมคุณต้องเป็นผู้เชี่ยวชาญทั้งสองภาษาและเขียนตั้งแต่ต้นทั้งสองภาษา ถึงแม้คุณจะสามารถวิ่งเข้าไปในพื้นที่ที่มีภาษาใดงานหนึ่งได้อย่างยอดเยี่ยม ตัวอย่างเช่นฉันสามารถเขียนเวอร์ชันของ Towers of Hanoi ใน C ++ ที่จะทำงานได้เร็วกว่า Java ในคอมไพเลอร์ที่สมเหตุสมผล ฉันสามารถทำได้โดยการโกงโดยใช้เทมเพลต C ++ ประเมินที่เวลาคอมไพล์ (http://forums.devshed.com/c-programming-42/c-towers-of-hanoi-using-templates-424148.html)
ประเด็นก็คือไม่ใช่ว่าฉันจะบอกว่า "C ++ เร็วกว่า Java" เพราะโปรแกรมของฉันกลับมาทันทีในขณะที่รุ่น Java ทำงานนานหลายนาที (และหวังว่าจะไม่มีใครสังเกตเห็นว่าโปรแกรมของฉันใช้เวลาครึ่งชั่วโมงในการสร้าง) ประเด็นก็คือ ตัวพิมพ์เล็กแคบแตกต่างกัน C ++ เร็วกว่า สำหรับกรณีที่แคบอื่น ๆ อาจเป็นวิธีอื่น ดังนั้นมันจึงไม่ใช่ "C ++ เร็วกว่า" แต่ก็เป็น "C ++ เร็วกว่าในกรณีที่คุณสามารถประเมินนิพจน์ ณ เวลาที่สร้างโดยใช้เทมเพลต" พอใจน้อยกว่า แต่จริง
ความแตกต่างของความเร็วในภาษาส่วนใหญ่เกี่ยวกับการใช้งาน ภาษาที่รวบรวมจะเร็วกว่าภาษาที่ตีความ การคอมไพล์โค้ดเนทีฟจะเร็วกว่าการคอมไพล์โค้ดไบต์ สิ่งนี้จะมีผลมากกว่าคำถามเช่นว่าพิมพ์ภาษาแบบคงที่หรือไม่ และแน่นอนว่าการติดตั้งที่ดีนั้นจะเร็วกว่าระบบที่ไม่ดี
และอย่าลืมว่าโปรแกรมเมอร์ที่ดีจะสร้างโค้ดได้เร็วกว่าโปรแกรมเมอร์ที่ไม่ดีบ่อยครั้งที่ค่อนข้างจะมีค่ามากกว่าความแตกต่างของภาษา