Apakah tidak ada masalah ayam dan telur sejak GCC ditulis dalam C ++ sendiri?

10

Sejak rilis 4.8, CCC compiler C ++ (bagian G ++ dari itu) ditulis tidak dalam C lagi, tetapi dalam C ++ itu sendiri. Saya punya pertanyaan hipotetis tentang ini.

Saya bertanya-tanya bagaimana cara mengkompilasi kode C ++ dari GCC pada platform baru yang belum memiliki compiler C ++. Tentu saja, Anda bisa menggunakan binari prebuilt yang dikompilasi di komputer lain. Atau Anda dapat menggunakan versi GCC yang lebih lama yang ditulis dalam C dan mengkompilasi versi saat ini.

Namun, tanpa binari prebuilt dan hanya versi terbaru, Anda mandek, kan? Jika tidak, apakah ada implikasi lain pada situasi ini yang ditimbulkan oleh peralihan dari C ke C ++ dari proyek GCC?

danijar
sumber
3
Saya tidak yakin apa yang Anda tanyakan di sini, meskipun Anda mungkin ingin membaca tentang kompilasi silang .
5
Platform yang sepenuhnya baru tidak akan memiliki kompiler C ++ atau kompiler C. Kompilasi silang adalah jawabannya.
doc
1
Anda mungkin harus membaca langkah GCC ke C ++ , Pindah ke C ++ dan mungkin diskusi GCC sekarang akan membutuhkan C ++ untuk membangun reddit. Saya tidak yakin bahwa gccsebelum 4.8 dapat dibangun dengan kompiler C yang dikemas dengan sistem operasi yang sewenang-wenang (dan itu akan membatasi Anda untuk banyak C89).
2
Saya tidak mendapatkan apa yang spesial tentang C ++ untuk pertanyaan ini, masalahnya ada pada C atau bahasa lainnya, bukan?
RemcoGerlich

Jawaban:

16

Ini sebenarnya adalah konsep terkenal yang disebut bootstrap . Pada dasarnya, ada, di suatu tempat, basis kode C minimal untuk membangun versi GCC yang mampu membangun basis kode GCC saat ini. Hosting mandiri telah melakukan hal-hal seperti itu selama beberapa dekade.

Mason Wheeler
sumber
Sebenarnya tidak. Bukan itu masalahnya lagi (dan masalah dengan pertanyaan). gcctidak dapat dibangun oleh kompilator hanya ac lagi. Satu-satunya jaminan dengan kompilasi gcc yang mereka buat adalah bahwa versi gcc N dapat dibangun dengan versi gcc N-1.
9
@MichaelT: Tetapi versi GCC yang lebih lama dapat dibangun dengan kompiler C, yang kemudian dapat mengkompilasi versi selanjutnya yang ditulis dalam C ++, yang adalah apa yang saya katakan.
Mason Wheeler
Saya juga menunjukkan pertanyaan-pertanyaan dalam pertanyaan: However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?- itu mengandaikan Anda tidak memiliki akses ke versi sebelumnya juga tidak membahas implikasi lain dari beralih dari C ke C ++ untuk basis kode.
9

Membuat kompiler yang ditulis dalam bahasa yang sama dengan kompilasi disebut bootstrap . Artikel wikipedia menjelaskan sejumlah cara kompiler dapat di-bootstrap.

Dengan batasan Anda bahwa Anda hanya memiliki kode sumber post-4.8 G ++ dan tidak ada binari yang dibuat sebelumnya untuk platform target Anda (tidak ada kompiler C ++ yang ada), maka bootstrap kompiler G ++ dapat dilakukan dengan cara kompilasi silang .

Ketika bootstrap kompiler menggunakan kompilasi silang, Anda membangun beberapa versi kompiler Anda

  1. Di PC Anda, Anda menginstal kompiler C ++ (bisa berupa kompiler C ++, tidak harus berupa G ++)
  2. Dengan menggunakan kompiler itu, Anda membuat cross-compiler G ++ yang dapat dijalankan pada PC dan menghasilkan kode untuk platform target
  3. Menggunakan kompilator silang G ++ yang baru saja Anda buat, Anda membuat kompiler G ++ asli yang dapat berjalan pada platform target dan membuat kode untuk itu.
  4. Kamu selesai. Anda telah membuat kompiler C ++ untuk platform baru.

Jika Anda juga tidak memiliki PC (atau serupa) untuk melakukan langkah-langkah awal, maka Anda memang terjebak, tetapi kemungkinan berada dalam situasi itu dan mencoba untuk bootstrap kompiler diabaikan.

Bart van Ingen Schenau
sumber