Sejauh pengetahuan saya, sejauh ini, saya berpikir bahwa C # adalah dan selalu merupakan bahasa yang dikompilasi. Saya baru-baru ini mulai mempelajari Unity3d dan memperhatikan bahwa mereka memberikan C # sebagai opsi untuk scripting dan berinteraksi dengan objek game melalui API mereka (bersama dengan JavaScript dan beberapa alternatif lain).
Bagaimana ini dilakukan? Apakah C # benar-benar dieksekusi atau ini abstraksi yang sedang dikonversi ke bahasa skrip lain di bawah sampul? Tampaknya bagi saya bahwa ada semacam penafsiran yang terjadi untuk fungsi ini.
Jawaban:
Unity menggunakan Mono di belakang layar. Setiap kali Anda membuat perubahan pada skrip C # / UnityScript Anda mengkompilasi ulang kode hampir secara instan.
Jika Anda melihat di direktori data pemain persatuan yang berdiri sendiri, Anda dapat melihatnya telah mengkompilasi semua skrip ke Assembly-CSharp.dll, atau serupa.
Jadi ya, C # sedang dikompilasi.
sumber
Pertama, bahasa scripting tidak harus ditafsirkan bahasa. Beberapa bahasa scripting seperti Lua dan Python dapat dikompilasi atau ditafsirkan JIT.
Dan, untuk pertanyaan itu sendiri: karena C # adalah bahasa scripting, tetapi Microsoft melakukan pekerjaan yang baik untuk membuatnya tidak terlihat seperti itu.
C # memiliki semua yang dibutuhkan bahasa scripting: pengetikan dinamis, kompilasi JIT, bukan kompilasi statis, berjalan di mesin virtual ...
sumber