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?


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.