Steve Yegge menulis posting blog yang hebat , yang secara tidak langsung membahas hal ini.
Poin # 1: kompiler mencakup hampir setiap aspek ilmu komputer. Mereka kursus tingkat atas karena Anda perlu mengetahui semua hal lain yang Anda pelajari dalam kurikulum ilmu komputer hanya untuk memulai. Struktur data, pencarian dan penyortiran, kinerja asimptotik, pewarnaan grafik? Semuanya ada di sana.
Ada alasan mengapa Knuth telah mengerjakan "Pemrograman Komputer" yang monumental (dan tidak pernah berakhir) selama beberapa dekade, meskipun itu dimulai sebagai (hanya) buku teks kompiler. Dengan cara yang sama seperti yang dikatakan Carl Sagan, "Jika Anda ingin membuat pai apel dari awal, Anda harus terlebih dahulu menciptakan alam semesta", jika Anda ingin menulis kompiler, Anda harus terlebih dahulu berurusan dengan hampir setiap aspek ilmu komputer.
Itu berarti jika kompiler di-host-sendiri, maka cukup yakin untuk dapat melakukan apa yang saya butuhkan, apa pun yang saya lakukan. Sebaliknya, jika Anda tidak menulis kompiler dalam bahasa Anda, ada kemungkinan ia melewatkan sesuatu yang benar-benar penting bagi seseorang, karena para pelaksana bahasa tidak pernah harus menulis sebuah program yang mengharuskan mereka untuk memikirkan semua masalah itu.
Poin besar # 2: dari 30.000 kaki, sejumlah masalah yang mengejutkan terlihat seperti kompiler.
Compiler mengambil aliran simbol, mencari tahu struktur mereka sesuai dengan beberapa aturan yang telah ditentukan domain-spesifik, dan mengubahnya menjadi aliran simbol lain. Kedengarannya cukup umum, bukan? Yah begitulah.
Apakah Anda berada di tim Visual C ++ atau tidak, Anda akan sering perlu melakukan sesuatu yang terlihat seperti bagian dari kompiler. Saya melakukannya setiap hari.
Tidak seperti kebanyakan profesi lain, pemrogram tidak hanya menggunakan alat, tetapi membangun alat mereka sendiri. Seorang programmer yang tidak dapat (karena kurangnya keterampilan, atau kurangnya alat yang dapat digunakan untuk membangun alat lain) alat tulis akan selamanya cacat, terbatas pada alat yang disediakan orang lain.
Jika suatu bahasa "tidak cocok untuk membuat" program yang dapat mengambil aliran simbol, menerapkan aturan kepadanya, dan mengubahnya menjadi aliran simbol lain, yang terdengar seperti bahasa yang sangat terbatas, dan bukan bahasa yang akan berguna untuk saya.
(Untungnya, saya tidak berpikir ada banyak bahasa pemrograman yang tidak cocok untuk mengubah simbol. C mungkin adalah salah satu bahasa terburuk yang digunakan saat ini, namun kompiler C biasanya di-host-sendiri, sehingga tidak pernah menghentikan siapa pun.)
Alasan ketiga saya akan berakhir dengan, dari pengalaman pribadi, tidak disebutkan oleh Yegge (karena dia tidak menulis tentang "mengapa tuan rumah"): itu menghilangkan bug. Saat Anda menulis kompiler, itu berarti setiap kali Anda membangunnya (bukan hanya setiap kali Anda menjalankannya ), Anda bergantung padanya untuk bekerja, dan untuk bekerja dengan benar terhadap basis kode berukuran layak (kompiler itu sendiri).
Bulan ini saya telah menggunakan kompiler non-self-host yang relatif baru dan terkenal (Anda mungkin bisa menebak yang mana), dan saya tidak bisa pergi 2 hari tanpa membuat kesalahan. Saya bertanya-tanya berapa banyak desainer sebenarnya harus menggunakannya.