Mari kita kembali ke baris asli: "Bagaimana bahasa yang kompilernya ditulis dalam C bisa lebih cepat daripada C?"
Saya pikir ini benar-benar dimaksudkan untuk mengatakan: bagaimana sebuah program yang ditulis dalam Julia, yang intinya ditulis dalam C, akan lebih cepat daripada sebuah program yang ditulis dalam C? Secara khusus, bagaimana mungkin program "mandel" seperti yang ditulis dalam Julia berjalan di 87% dari waktu pelaksanaan program "mandel" yang setara ditulis dalam C?
Risalah Babou adalah satu-satunya jawaban yang benar untuk pertanyaan ini sejauh ini. Semua tanggapan lain sejauh ini kurang lebih menjawab pertanyaan lain. Masalah dengan teks babou adalah bahwa deskripsi teoretis panjang-paragraf-panjang "Apa itu kompiler" ditulis dalam istilah bahwa poster asli mungkin akan mengalami kesulitan memahami. Siapa pun yang memahami konsep yang dirujuk oleh kata "semantik", "denotasional", "realisasi", "dapat dihitung", dan seterusnya akan sudah tahu jawaban atas pertanyaan itu.
Jawaban yang lebih sederhana adalah bahwa baik kode C, maupun kode Julia, tidak langsung dieksekusi oleh mesin. Keduanya harus diterjemahkan, dan proses terjemahan itu memperkenalkan banyak cara agar kode mesin yang dapat dieksekusi bisa lebih lambat atau lebih cepat, tetapi tetap menghasilkan hasil akhir yang sama. Baik C dan Julia melakukan kompilasi, yang berarti serangkaian terjemahan ke bentuk lain. Biasanya, file teks yang dapat dibaca manusia diterjemahkan ke beberapa representasi internal, dan kemudian dituliskan sebagai urutan instruksi yang dapat dipahami komputer secara langsung. Dengan beberapa bahasa, ada lebih dari itu, dan Julia adalah salah satunya - ia memiliki kompiler "JIT", yang berarti seluruh proses penerjemahan tidak harus terjadi sekaligus untuk seluruh program. Tetapi hasil akhirnya untuk bahasa apa pun adalah kode mesin yang tidak memerlukan terjemahan lebih lanjut, kode yang dapat dikirim langsung ke CPU untuk membuatnya melakukan sesuatu. Pada akhirnya, INI adalah "perhitungan", dan ada lebih dari satu cara untuk memberi tahu CPU cara mendapatkan jawaban yang Anda inginkan.
Orang bisa membayangkan bahasa pemrograman yang memiliki operator "plus" dan "multiply", dan bahasa lain yang hanya memiliki "plus". Jika perhitungan Anda membutuhkan perkalian, satu bahasa akan "lebih lambat" karena tentu saja CPU dapat melakukan keduanya secara langsung, tetapi jika Anda tidak memiliki cara untuk menyatakan perlunya mengalikan 5 * 5, Anda harus menulis "5 + 5 + 5 + 5 + 5 ". Yang terakhir akan membutuhkan lebih banyak waktu untuk sampai pada jawaban yang sama. Agaknya, ada beberapa hal yang terjadi dengan Julia; mungkin bahasanya memungkinkan programmer untuk menyatakan tujuan yang diinginkan dari komputasi Mandelbrot diatur dengan cara yang tidak mungkin untuk secara langsung diekspresikan dalam C.
Prosesor yang digunakan untuk benchmark disebutkan sebagai Xeon E7-8850 2.00GHz CPU. Tolok ukur C menggunakan kompilator gcc 4.8.2 untuk menghasilkan instruksi untuk CPU itu, sementara Julia menggunakan kerangka kerja kompiler LLVM. Mungkin saja backend gcc (bagian yang menghasilkan kode mesin untuk arsitektur CPU tertentu) tidak sebagus backend LLVM. Itu bisa membuat perbedaan dalam kinerja. Ada juga banyak hal lain yang terjadi - kompiler dapat "mengoptimalkan" dengan mungkin mengeluarkan instruksi dalam urutan yang berbeda dari yang ditentukan oleh programmer, atau bahkan tidak melakukan beberapa hal sama sekali jika dapat menganalisis kode dan menentukan mereka tidak dituntut untuk mendapatkan jawaban yang benar. Dan programmer mungkin telah menulis bagian dari program C dengan cara yang membuatnya lambat, tetapi tidak
Semua ini adalah cara untuk mengatakan: ada banyak cara untuk menulis kode mesin untuk menghitung set Mandelbrot, dan bahasa yang Anda gunakan memiliki efek besar pada bagaimana kode mesin itu ditulis. Semakin banyak Anda memahami tentang kompilasi, set instruksi, cache, dan sebagainya, semakin lengkap Anda untuk mendapatkan hasil yang Anda inginkan. Hasil utama dari hasil benchmark yang dikutip untuk Julia adalah bahwa tidak ada satu bahasa atau alat yang terbaik dalam segala hal. Faktanya faktor kecepatan terbaik di seluruh bagan adalah untuk Java!