Jawaban singkatnya adalah: kita tidak tahu , tanyakan lagi dalam 100 tahun. (Kita mungkin masih belum tahu; mungkin kita tidak akan pernah tahu.)
Secara teori, ini mungkin. Ambil semua program yang pernah ditulis, terjemahkan secara manual ke kode mesin yang paling efisien, dan tulis juru bahasa yang memetakan kode sumber ke kode mesin. Ini dimungkinkan karena hanya sejumlah program terbatas yang pernah ditulis (dan semakin banyak program ditulis, pertahankan terjemahan manual). Ini juga, tentu saja, benar-benar bodoh dalam hal praktis.
Kemudian lagi, secara teori, bahasa tingkat tinggi mungkin dapat mencapai kinerja kode mesin, tetapi mereka tidak akan melampaui itu. Ini masih sangat teoretis, karena secara praktis, kami sangat jarang menggunakan kode mesin. Argumen ini tidak berlaku untuk membandingkan bahasa tingkat yang lebih tinggi: itu tidak menyiratkan bahwa C harus lebih efisien daripada Python, hanya bahwa kode mesin tidak dapat melakukan lebih buruk daripada Python.
Berasal dari sisi lain, dengan istilah yang murni eksperimental, kita dapat melihat bahwa sebagian besar waktu , bahasa tingkat tinggi yang ditafsirkan berkinerja lebih buruk daripada bahasa tingkat rendah yang dikompilasi. Kita cenderung menulis kode non-waktu-sensitif dalam bahasa tingkat tinggi dan loop dalam waktu kritis dalam perakitan, dengan bahasa seperti C dan Python termasuk di antaranya. Meskipun saya tidak memiliki statistik untuk mendukung ini, saya pikir ini memang keputusan terbaik dalam banyak kasus.
Namun, ada contoh yang tidak terbantahkan di mana bahasa tingkat tinggi mengalahkan kode yang akan ditulis secara realistis: lingkungan pemrograman tujuan khusus. Program seperti Matlab dan Mathematica seringkali jauh lebih baik dalam memecahkan beberapa jenis masalah matematika daripada apa yang bisa ditulis oleh manusia biasa. Fungsi pustaka mungkin ditulis dalam C atau C ++ (yang merupakan bahan bakar untuk kamp “bahasa tingkat rendah lebih efisien”), tetapi itu bukan urusan saya jika saya menulis kode Mathematica, perpustakaan adalah kotak hitam.
Apakah secara teori dimungkinkan bahwa Python akan mendapatkan sedekat, atau mungkin bahkan lebih dekat, ke kinerja optimal daripada C? Seperti yang terlihat di atas, ya, tapi kami sangat jauh dari itu hari ini. Kemudian lagi, kompiler telah membuat banyak kemajuan dalam beberapa dekade terakhir, dan kemajuan itu tidak melambat.
Bahasa tingkat tinggi cenderung membuat lebih banyak hal otomatis, sehingga mereka memiliki lebih banyak pekerjaan untuk dilakukan, dan dengan demikian cenderung kurang efisien. Di sisi lain, mereka cenderung memiliki lebih banyak informasi semantik, sehingga lebih mudah untuk menemukan optimasi (jika Anda menulis kompilator Haskell, Anda tidak perlu khawatir bahwa utas lain akan memodifikasi variabel di bawah hidung Anda). Salah satu dari beberapa upaya untuk membandingkan apel dan jeruk dengan bahasa pemrograman yang berbeda adalah Computer Benchmark Game (sebelumnya dikenal sebagai baku tembak). Fortran cenderung bersinar pada tugas-tugas numerik; tetapi ketika harus memanipulasi data terstruktur atau pergantian utas tingkat tinggi, F # dan Scala melakukannya dengan baik. Jangan menganggap hasil ini sebagai Injil: banyak dari apa yang mereka ukur adalah seberapa baik penulis program pengujian dalam setiap bahasa.
Argumen yang mendukung bahasa tingkat tinggi adalah bahwa kinerja pada sistem modern tidak begitu berkorelasi kuat dengan jumlah instruksi yang dieksekusi, dan kurang dari waktu ke waktu. Bahasa tingkat rendah cocok untuk mesin sekuensial sederhana. Jika bahasa tingkat tinggi mengeksekusi instruksi dua kali lebih banyak, tetapi mengelola untuk menggunakan cache lebih cerdas sehingga hanya setengah dari cache yang terlewat, itu mungkin akan menjadi pemenang.
Pada platform server dan desktop, CPU hampir mencapai puncak di mana mereka tidak mendapatkan yang lebih cepat (platform mobile juga ada di sana); ini mendukung bahasa di mana paralelisme mudah dieksploitasi. Banyak prosesor menghabiskan sebagian besar waktu mereka menunggu tanggapan I / O; waktu yang dihabiskan dalam perhitungan sedikit dibandingkan dengan jumlah I / O, dan bahasa yang memungkinkan pemrogram untuk meminimalkan komunikasi adalah menguntungkan.
Secara keseluruhan, sementara bahasa tingkat tinggi dimulai dengan penalti, mereka memiliki lebih banyak ruang untuk perbaikan. Seberapa dekat mereka? Tanyakan lagi dalam 100 tahun.
Catatan akhir: seringkali, perbandingannya bukan antara program yang paling efisien yang dapat ditulis dalam bahasa A dan sama dalam bahasa B, atau antara program paling efisien yang pernah ditulis dalam setiap bahasa, tetapi antara program paling efisien yang dapat ditulis oleh manusia dalam jumlah waktu tertentu dalam setiap bahasa. Ini memperkenalkan elemen yang tidak dapat dianalisis secara matematis, bahkan secara prinsip. Dalam istilah praktis, ini sering berarti bahwa kinerja terbaik adalah kompromi antara seberapa banyak kode tingkat rendah yang Anda perlu tulis untuk memenuhi sasaran kinerja dan berapa banyak kode tingkat rendah yang Anda miliki waktu untuk menulis untuk memenuhi tanggal rilis.