Stroustrup mengklaim bahwa Cfront, kompiler C ++ pertama, ditulis dalam C ++ ( Stroustrup FAQ ).
Namun, bagaimana mungkin kompiler C ++ pertama ditulis dalam C ++?
Kode yang membentuk kompiler perlu dikompilasi juga, dan dengan demikian kompiler C ++ pertama tidak dapat ditulis dalam C ++, bukan?
Jawaban:
Kuncinya ada di sini:
Jadi versi pertama Cfront tidak ditulis dalam C ++, melainkan dalam bahasa perantara. Kemampuan untuk membuat kompiler C dan preprosesor langsung di C menyebabkan banyak inovasi (dan lubang keamanan besar - besaran ) di C. Jadi Anda menulis preprosessor baru Anda yang mengubah kode "C dengan Kelas" menjadi kode C lurus (karena C langsung dapat melakukan apa pun) dan kemudian Anda menggunakan "C dengan Kelas" untuk menulis kompiler C ++ (bukan bahwa Anda tidak bisa melakukannya di C, hanya saja akan butuh waktu) dan kemudian Anda menggunakan kompiler C ++ untuk menulis kompiler yang lebih efisien / lengkap di C ++. Mengerti?
sumber
Itu bootstrap. Segera setelah fitur C ++ ditambahkan ke cfront, maka cfront juga dapat menggunakan fitur itu sejak saat itu (tetapi tidak untuk mengimplementasikan fitur tersebut). Ini bekerja karena cfront memiliki kemampuan untuk mengkonversi kode C ++ ke kode C. Jadi jika beberapa platform baru keluar, Anda bisa menggunakan cfront pada platform lain untuk mengonversi cfront dari C ++ ke C, dan kemudian menggunakan kompiler C platform baru untuk menyelesaikan kompilasi dari C ke kode objek.
sumber
Saya pikir BS menjawab pertanyaan itu:
Pertama dia menciptakan sesuatu yang dia sebut "C with Classes" diimplementasikan oleh preprocessor sederhana ke dalam C. Itu pada dasarnya C ++, tetapi preprocessor melakukan sedikit atau tidak ada pengecekan. Dia kemudian menggunakannya untuk menulis Cfront, versi yang lebih kuat dari penerjemah C ++ ke C, lengkap dengan pengecekan tipe, tabel simbol, dll.
sumber
Saya akan menambahkan jawaban ini karena tidak ada jawaban yang membahas aspek ini.
Anda secara teknis tidak memerlukan perangkat lunak untuk menyusun kode. Selama Anda memiliki spesifikasi kompiler yang diperlukan, Anda dapat melakukan kompilasi yang sebenarnya secara manual. Ini bukan bagaimana kompiler C ++ pertama dikompilasi. Saya hanya mengatakan itu mungkin.
Bandingkan dengan bahasa assembly. Ketika mereka digunakan di masa-masa awal, tidak ada perangkat lunak assembler untuk mengubah kode perakitan menjadi kode mesin. Itu dilakukan dengan tangan, tetapi bahasa assembly memberi programmer gambaran yang lebih baik.
sumber