Ada banyak alasan yang dapat dipertimbangkan untuk memilih bahasa X daripada bahasa Y. Keterbacaan program, kemudahan pemrograman, portabilitas ke banyak platform, keberadaan lingkungan pemrograman yang baik dapat menjadi alasan tersebut. Namun, saya hanya akan mempertimbangkan kecepatan eksekusi seperti yang diminta dalam pertanyaan. Pertanyaannya tampaknya tidak mempertimbangkan, misalnya, kecepatan perkembangan.
Dua bahasa dapat dikompilasi dengan bytecode yang sama, tetapi itu tidak berarti bahwa kode yang sama akan diproduksi,
Sebenarnya bytecode hanya kode untuk mesin virtual tertentu. Itu memang memiliki keunggulan teknik, tetapi tidak memperkenalkan perbedaan mendasar dengan mengkompilasi secara langsung untuk harware tertentu. Jadi, Anda sebaiknya mempertimbangkan membandingkan dua bahasa yang dikompilasi untuk eksekusi langsung pada mesin yang sama.
Ini mengatakan, masalah kecepatan relatif dari bahasa adalah yang lama, dating kembali ke kompiler pertama.
Selama bertahun-tahun, pada masa-masa awal itu, profesional menganggap bahwa kode tulisan tangan lebih cepat daripada kode yang dikompilasi. Dengan kata lain, bahasa mesin dianggap lebih cepat daripada bahasa tingkat tinggi seperti Cobol atau Fortran. Dan itu, lebih cepat dan biasanya lebih kecil. Bahasa tingkat tinggi masih berkembang karena lebih mudah digunakan untuk banyak orang yang bukan ilmuwan komputer. Biaya menggunakan bahasa tingkat tinggi bahkan memiliki nama: rasio ekspansi, yang dapat menyangkut ukuran kode yang dihasilkan (masalah yang sangat penting pada masa itu) atau jumlah instruksi yang benar-benar dieksekusi. Konsep ini terutama eksperimental, tetapi rasionya lebih besar dari 1 pada awalnya, karena kompiler melakukan pekerjaan yang berpikiran sederhana menurut standar saat ini.
Dengan demikian bahasa mesin lebih cepat daripada mengatakan, Fortran.
Tentu saja, itu berubah selama bertahun-tahun, ketika kompiler menjadi lebih canggih, ke titik bahwa pemrograman dalam bahasa assembly sekarang sangat jarang. Untuk sebagian besar aplikasi, program bahasa assembly tidak mampu bersaing dengan kode yang dihasilkan dengan mengoptimalkan kompiler.
Ini menunjukkan bahwa satu masalah utama adalah kualitas kompiler yang tersedia untuk bahasa yang dipertimbangkan, kemampuan mereka untuk menganalisis kode sumber, dan untuk mengoptimalkannya.
Kemampuan ini mungkin bergantung pada beberapa perluasan fitur bahasa untuk menekankan sifat struktural dan matematika dari sumber untuk membuat pekerjaan lebih mudah bagi kompiler. Sebagai contoh, sebuah bahasa dapat memungkinkan penyertaan pernyataan tentang properti aljabar fungsi yang ditentukan pengguna, sehingga memungkinkan kompiler untuk menggunakan properti ini untuk tujuan optimasi.
Proses kompilasi mungkin lebih mudah, maka menghasilkan kode yang lebih baik, ketika paradigma pemrograman bahasa lebih dekat dengan fitur mesin yang akan mengintepret kode, apakah mesin nyata atau virtual.
Poin lainnya adalah apakah paradigma yang diterapkan dalam bahasa tertutup dengan jenis masalah yang diprogram. Diharapkan bahwa bahasa pemrograman yang dikhususkan untuk paradigma pemrograman tertentu akan mengkompilasi fitur yang sangat efisien terkait dengan paradigma itu. Oleh karena itu pilihan bahasa pemrograman dapat bergantung, untuk kejelasan dan kecepatan, pilihan bahasa pemrograman yang disesuaikan dengan jenis masalah yang diprogram.
Popularitas C untuk pemrograman sistem mungkin karena fakta bahwa C dekat dengan arsitektur mesin, dan pemrograman sistem secara langsung terkait dengan arsitektur itu juga.
Beberapa masalah lain akan lebih mudah diprogram, dengan eksekusi lebih cepat menggunakan pemrograman logika dan bahasa resolusi kendala .
Sistem reaktif yang kompleks dapat diprogram dengan sangat efisien dengan bahasa pemrograman sinkron khusus seperti Esterel yang mewujudkan pengetahuan yang sangat khusus tentang sistem tersebut dan menghasilkan kode yang sangat cepat.
Atau untuk mengambil contoh ekstrem, beberapa bahasa sangat khusus, seperti bahasa deskripsi sintaksis yang digunakan untuk memprogram parser. Sebuah parser generator tidak lain adalah sebuah compiler untuk bahasa tersebut. Tentu saja, ini bukan Turing lengkap, tetapi kompiler ini sangat bagus untuk spesialisasi mereka: menghasilkan program parsing yang efisien. Domain pengetahuan dibatasi, teknik pengoptimalan bisa sangat khusus dan disetel dengan sangat halus. Generator parser ini biasanya jauh lebih baik daripada yang bisa diperoleh dengan menulis kode dalam bahasa lain. Ada banyak bahasa yang sangat terspesialisasi dengan kompiler yang menghasilkan kode yang sangat baik dan cepat untuk kelas masalah yang terbatas.
Oleh karena itu, ketika menulis sistem yang besar, mungkin disarankan untuk tidak bergantung pada satu bahasa, tetapi untuk memilih bahasa terbaik untuk berbagai komponen sistem. Ini, tentu saja, menimbulkan masalah kompatibilitas.
Poin lain yang sering penting adalah keberadaan perpustakaan yang efisien untuk topik yang diprogram.
Akhirnya, kecepatan bukan satu-satunya kriteria dan mungkin bertentangan dengan kriteria lain seperti keamanan kode (untuk contoh sehubungan dengan input yang buruk, atau ketahanan terhadap kesalahan sistem), penggunaan memori, kemudahan pemrograman (meskipun kompatibilitas paradigma sebenarnya dapat membantu ), ukuran kode objek, kemampuan pemeliharaan program, dll.
Kecepatan tidak selalu merupakan parameter yang paling penting. Juga mungkin diperlukan kedok yang berbeda, seperti kompleksitas yang mungkin kompleksitas rata-rata atau kompleksitas kasus yang lebih buruk. Juga, dalam sistem besar seperti dalam program yang lebih kecil, ada bagian-bagian di mana kecepatan sangat penting, dan yang lain tidak penting. Dan tidak selalu mudah untuk menentukannya terlebih dahulu.