Saya melihat kode sumber di http://referencesource.microsoft.com/ , dan tampaknya semua kode sumber ada di C #.
Saya juga melihat kode sumber untuk platform C # compiler baru ( Roslyn ), dan juga dalam C #. Bagaimana mungkin? Apakah kompiler bahasa C # ditulis dalam bahasa C #? Atau apakah saya melewatkan sesuatu yang jelas? Jika C # compiler ditulis dalam C # lalu bagaimana cara kerjanya?
c#
compiler-construction
roslyn
CriketerOnSO
sumber
sumber
Jawaban:
Compiler C # asli tidak ditulis dalam C #, itu dalam C dan C ++. Kompiler Roslyn baru ditulis dalam C #, tetapi pada awalnya dikompilasi dengan kompiler lama. Setelah kompiler baru selesai, ia dapat mengkompilasi kode sumbernya sendiri: ini disebut bootstrap .
sumber
Compiler adalah program utilitas - mereka mengubah teks bahasa pemrograman menjadi kode mesin. Jika bahasa pemrograman menjelaskan perangkat lunak yang kebetulan menjadi kompiler .....
Compiler juga dapat menghasilkan kode mesin untuk arsitektur lain. Misalnya, Apple mengkompilasi iOS menggunakan rak server berbasis Intel. Kompiler tidak harus menjalankan kode ARM yang dihasilkannya, cukup tulis ke disk.
Compiler 2.0 harus ditulis dalam bahasa yang dapat diproses oleh kompiler 1.0, tetapi ia dapat membuat compiler 2.0 dengan fitur yang lebih baru seperti optimisasi. Anda kemudian dapat mengkompilasi ulang kode sumber menggunakan kompiler 2.0 dan membuat versi yang lebih baik dari dirinya sendiri. Sekali lagi, kompiler tidak tahu itu membuat versi lain dari dirinya sendiri.
Jika kita pergi cukup jauh kembali ke kabut waktu maka kita mencapai titik di mana kita tidak memiliki kompiler - iterasi pertama dari bahasa tingkat tinggi. Kemudian kita harus mengeluarkan pensil dan buku opcode dan menulis yang pertama dalam pertemuan. Bagaimana kami menulis assembler pertama? Entri kode mesin langsung, mungkin pada pita kertas yang dilubangi, atau membalik saklar di panel depan.
sumber
Kompiler hanyalah sebuah program seperti program lainnya. Tidak ada yang magis atau istimewa tentang hal itu. Dibutuhkan beberapa input dan menghasilkan beberapa output. Dalam kasus khusus ini, input kebetulan C # dan output kebetulan CIL, tapi itu tidak berbeda dari input menjadi serangkaian pengembalian pajak dan output menjadi laporan.
sumber