มีหลายเหตุผลที่อาจถูกพิจารณาให้เลือกภาษา X แทนภาษา Y การอ่านโปรแกรม, ความง่ายในการโปรแกรม, ความสะดวกในการพกพาไปยังหลาย ๆ แพลตฟอร์ม, การมีอยู่ของสภาพแวดล้อมการเขียนโปรแกรมที่ดี อย่างไรก็ตามฉันจะพิจารณาเฉพาะความเร็วของการดำเนินการตามที่ร้องขอในคำถาม คำถามดูเหมือนจะไม่ได้พิจารณาตัวอย่างเช่นความเร็วของการพัฒนา
สองภาษาสามารถคอมไพล์ด้วยรหัสไบต์เดียวกัน แต่ไม่ได้หมายความว่าจะสร้างรหัสเดียวกัน
bytecode จริง ๆ แล้วเป็นรหัสสำหรับเครื่องเสมือนเฉพาะเท่านั้น มันมีข้อได้เปรียบทางวิศวกรรม แต่ไม่ได้แนะนำความแตกต่างพื้นฐานด้วยการรวบรวมโดยตรงสำหรับฮาร์ดแวร์ที่เฉพาะเจาะจง ดังนั้นคุณอาจพิจารณาเปรียบเทียบสองภาษาที่คอมไพล์เพื่อประมวลผลโดยตรงบนเครื่องเดียวกัน
สิ่งนี้กล่าวว่าปัญหาความเร็วของภาษาค่อนข้างเก่าโดยย้อนหลังไปถึงคอมไพเลอร์ตัวแรก
ในช่วงเวลาหลายปีที่ผ่านมาผู้เชี่ยวชาญคิดว่ารหัสที่เขียนด้วยมือนั้นเร็วกว่าการรวบรวมรหัส กล่าวอีกนัยหนึ่งภาษาเครื่องถูกพิจารณาว่าเร็วกว่าภาษาระดับสูงเช่น Cobol หรือ Fortran และมันก็เร็วกว่าและเล็กกว่าปกติ ภาษาระดับสูงยังคงพัฒนาเพราะพวกเขาใช้งานได้ง่ายขึ้นสำหรับคนจำนวนมากที่ไม่ใช่นักวิทยาศาสตร์คอมพิวเตอร์ ค่าใช้จ่ายในการใช้ภาษาระดับสูงยังมีชื่อ: อัตราส่วนการขยายซึ่งอาจเกี่ยวข้องกับขนาดของรหัสที่สร้างขึ้น (ปัญหาที่สำคัญมากในช่วงเวลาเหล่านั้น) หรือจำนวนคำสั่งที่ดำเนินการจริง แนวความคิดส่วนใหญ่เป็นการทดลอง แต่อัตราส่วนมากกว่า 1 ในตอนแรกเนื่องจากคอมไพเลอร์ทำงานค่อนข้างง่ายตามมาตรฐานในปัจจุบัน
ดังนั้นภาษาเครื่องจึงเร็วกว่าคำว่า Fortran
แน่นอนว่าการเปลี่ยนแปลงในช่วงหลายปีที่ผ่านมาเมื่อคอมไพเลอร์เริ่มมีความซับซ้อนมากขึ้นจนถึงจุดที่การเขียนโปรแกรมในภาษาแอสเซมบลีตอนนี้หายาก สำหรับแอปพลิเคชันส่วนใหญ่โปรแกรมภาษาแอสเซมบลีจะแข่งขันกันไม่ดีกับรหัสที่สร้างโดยการปรับคอมไพเลอร์
สิ่งนี้แสดงให้เห็นว่าปัญหาสำคัญประการหนึ่งคือคุณภาพของคอมไพเลอร์ที่มีให้สำหรับภาษาที่พิจารณาความสามารถในการวิเคราะห์ซอร์สโค้ดและเพื่อปรับปรุงให้เหมาะสม
ความสามารถนี้อาจขึ้นอยู่กับคุณสมบัติของภาษาเพื่อเน้นคุณสมบัติเชิงโครงสร้างและคณิตศาสตร์ของแหล่งข้อมูลเพื่อให้การทำงานง่ายขึ้นสำหรับคอมไพเลอร์ ตัวอย่างเช่นภาษาอาจอนุญาตให้มีการรวมคำสั่งเกี่ยวกับคุณสมบัติพีชคณิตของฟังก์ชั่นที่ผู้ใช้กำหนดเพื่อให้คอมไพเลอร์ใช้คุณสมบัติเหล่านี้เพื่อวัตถุประสงค์ในการปรับให้เหมาะสม
กระบวนการรวบรวมอาจจะง่ายขึ้นดังนั้นการสร้างรหัสที่ดีขึ้นเมื่อกระบวนทัศน์การเขียนโปรแกรมของภาษาใกล้เคียงกับคุณสมบัติของเครื่องที่จะแทรกรหัสไม่ว่าจะเป็นเครื่องจริงหรือเสมือนจริง
อีกประเด็นหนึ่งคือว่ากระบวนทัศน์ที่นำมาใช้ในภาษานั้นใกล้เคียงกับประเภทของปัญหาที่กำลังโปรแกรมหรือไม่ เป็นที่คาดหวังว่าภาษาการเขียนโปรแกรมเฉพาะสำหรับกระบวนทัศน์การเขียนโปรแกรมเฉพาะจะรวบรวมคุณสมบัติที่มีประสิทธิภาพมากที่เกี่ยวข้องกับกระบวนทัศน์นั้น ดังนั้นการเลือกภาษาการเขียนโปรแกรมอาจขึ้นอยู่กับความชัดเจนและความเร็วของการเลือกภาษาการเขียนโปรแกรมที่ปรับให้เข้ากับชนิดของปัญหาที่โปรแกรม
ความนิยมของ C สำหรับการเขียนโปรแกรมระบบอาจเป็นเพราะความจริงที่ว่า C อยู่ใกล้กับสถาปัตยกรรมของเครื่องและการเขียนโปรแกรมของระบบนั้นเกี่ยวข้องโดยตรงกับสถาปัตยกรรมนั้นด้วย
บางปัญหาอื่น ๆ จะถูกโปรแกรมได้อย่างง่ายดายมากขึ้นด้วยการดำเนินการได้เร็วขึ้นโดยใช้โปรแกรมตรรกะและภาษามติ จำกัด
ระบบรีแอคทีฟที่ซับซ้อนสามารถตั้งโปรแกรมได้อย่างมีประสิทธิภาพด้วยภาษาการเขียนโปรแกรมแบบซิงโครนัสพิเศษเช่นEsterelซึ่งรวบรวมความรู้พิเศษเกี่ยวกับระบบดังกล่าวและสร้างโค้ดที่รวดเร็วมาก
หรือเพื่อยกตัวอย่างสุดขีดบางภาษามีความเชี่ยวชาญสูงเช่นภาษาคำอธิบายไวยากรณ์ที่ใช้ในการแยกวิเคราะห์โปรแกรม กำเนิด parserคืออะไร แต่คอมไพเลอร์สำหรับภาษาดังกล่าว แน่นอนว่ามันไม่ได้เป็นทัวริงที่สมบูรณ์ แต่คอมไพเลอร์เหล่านี้ดีมากสำหรับความพิเศษของพวกเขา: การผลิตโปรแกรมการแยกวิเคราะห์ที่มีประสิทธิภาพ ขอบเขตของความรู้ถูก จำกัด เทคนิคการปรับให้เหมาะสมนั้นมีความพิเศษและปรับได้อย่างประณีต เครื่องมือสร้างคำแยกวิเคราะห์เหล่านี้มักจะดีกว่าสิ่งที่สามารถรับได้โดยการเขียนโค้ดในภาษาอื่น มีหลายภาษาที่มีความเชี่ยวชาญสูงพร้อมคอมไพเลอร์ที่สร้างโค้ดที่ยอดเยี่ยมและรวดเร็วสำหรับปัญหาที่ จำกัด
ดังนั้นเมื่อเขียนระบบขนาดใหญ่อาจไม่แนะนำให้ใช้ภาษาเดียว แต่ควรเลือกภาษาที่ดีที่สุดสำหรับส่วนประกอบต่าง ๆ ของระบบ ซึ่งแน่นอนว่าปัญหานี้เกิดจากความเข้ากันได้
อีกประเด็นที่สำคัญคือการมีห้องสมุดที่มีประสิทธิภาพสำหรับหัวข้อที่กำลังตั้งโปรแกรม
ในที่สุดความเร็วไม่ได้เป็นเพียงแค่เกณฑ์และอาจขัดแย้งกับเกณฑ์อื่น ๆ เช่นความปลอดภัยของรหัส (สำหรับตัวอย่างที่เกี่ยวกับอินพุตที่ไม่ดีหรือความยืดหยุ่นต่อข้อผิดพลาดของระบบ) การใช้หน่วยความจำความสะดวกในการเขียนโปรแกรม ) ขนาดรหัสวัตถุความสามารถในการบำรุงรักษาโปรแกรม ฯลฯ
ความเร็วไม่ใช่พารามิเตอร์ที่สำคัญที่สุดเสมอไป นอกจากนี้อาจใช้วิธีการที่แตกต่างกันเช่นความซับซ้อนซึ่งอาจเป็นความซับซ้อนโดยเฉลี่ยหรือความซับซ้อนของกรณีที่แย่กว่านั้น นอกจากนี้ในระบบขนาดใหญ่เช่นเดียวกับในโปรแกรมขนาดเล็กมีชิ้นส่วนที่ความเร็วเป็นสิ่งสำคัญและส่วนอื่น ๆ ที่สำคัญน้อย และไม่ใช่เรื่องง่ายที่จะตัดสินล่วงหน้า