Ini telah menggangguku untuk sementara waktu. Bagaimana GCC dan g ++ mengkompilasi sendiri?
Saya menduga bahwa setiap revisi dikompilasi dengan revisi yang dibangun sebelumnya. Apakah ini benar? Dan jika ya, apakah itu berarti versi g ++ dan GCC tertua ditulis dalam assembly?
c++
c
compiler-construction
pengguna1010005
sumber
sumber
Jawaban:
Versi tertua dari GCC dikompilasi menggunakan kompiler C lain, karena ada yang lain ketika ditulis. Kompiler C pertama yang pernah (ca. 1973, IIRC) diimplementasikan baik dalam perakitan PDP-11 , atau dalam bahasa pemrograman B yang mendahuluinya, tetapi dalam hal apa pun kompiler B ditulis dalam perakitan.
Demikian pula, kompiler C ++ pertama (CPre / Cfront , 1979-1983) mungkin pertama kali diimplementasikan dalam C, kemudian ditulis ulang dalam C ++.Saat Anda mengompilasi GCC atau kompiler self-hosting lainnya, susunan lengkap bangunan adalah:
Proses ini disebut bootstrap . Ini menguji kemampuan kompiler mengkompilasi sendiri dan memastikan bahwa kompiler yang dihasilkan dibangun dengan semua optimisasi yang diimplementasikan sendiri.
EDIT : Drew Dormann, dalam komentar, menunjuk ke akun Bjarne Stroustrup tentang implementasi paling awal dari C ++ . Itu diimplementasikan dalam C ++ tetapi diterjemahkan oleh apa yang disebut Stroustrup "preprocessor" dari C ++ ke C; bukan kompiler penuh menurut definisinya, tetapi masih C ++ telah bootstrap di C.
sumber
__DATE__
dan__TIME__
yang bervariasi bahkan antara pemanggilan kompiler yang sama ) seperti GCC yang dikompilasi dengan [GCC dikompilasi dengan [lain]] - jika tidak, itu bug, dan build bootstrap 3-tahap dirancang untuk menangkapnya.