Saya sedang mencari bootstrapping compiler, dan saya melihat bagaimana Golang mengimplementasikan bootstrap dari sumber , yaitu, dengan membangun versi terakhir Golang yang diimplementasikan dalam C dan menggunakan executable yang dihasilkan untuk mengompilasi rilis Go yang lebih baru. Hal ini membuat saya penasaran bagaimana hal yang sama dapat dilakukan dengan C. Dapatkah Anda membuat kompiler C di komputer yang benar-benar tidak ada apa-apanya? Jika tidak, lalu bagaimana saya bisa percaya bahwa biner kompiler yang saya gunakan tidak secara otomatis mengisi biner yang dikompilasi dengan spyware?

Pertanyaan terkait, sejak compiler C pertama ditulis dalam B dan B ditulis dalam BCPL, dalam apa BCPL ditulis?

0
Monke 16 Januari 2021, 18:47

2 jawaban

Anda dapat menulis kompiler C yang sangat lemah dalam kode perakitan atau mesin, lalu bootstrap dari sana.

Sebelum bahasa pemrograman ada, Anda baru saja menulis kode mesin. Itu hanya bagaimana hal itu dilakukan.

Kemudian muncul assembler, yang seperti kode mesin "mode mudah", dan dari sana berkembang bahasa tingkat tinggi seperti Fortran dan BCPL. Ini dipisahkan dari arsitektur mesin dengan memiliki kompiler yang tepat untuk melakukan terjemahan.

Hari ini Anda mungkin akan menulis sesuatu dalam C dan pergi dari sana, apa pun yang dikompilasi cocok, meskipun "dikompilasi" adalah definisi longgar sekarang karena LLVM ada dan Anda bisa mengeluarkan kode IR LLVM alih-alih kode mesin yang sebenarnya. Rust dimulai di OCaml dan sekarang "dihosting sendiri" di atas LLVM, misalnya.

1
tadman 16 Januari 2021, 15:50

Seperti yang dinyatakan oleh beberapa programmer dude dalam komentar, karena C adalah bahasa pemrograman portabel, Anda dapat menggunakan kompiler untuk platform yang berbeda untuk menghasilkan kompiler silang yang pada platform itu akan menghasilkan executable untuk platform target.

Anda kemudian mengompilasi kompiler C yang sama untuk platform target pada platform host tersebut sehingga hasilnya dapat dieksekusi untuk platform target.

Kemudian Anda menyalin biner kompiler itu ke mesin target dan dari sana menjadi hosting sendiri.

Secara alami di beberapa titik dalam sejarah awal seseorang benar-benar harus menulis sesuatu dalam assembler atau kode mesin di suatu tempat. Saat ini, itu bukan lagi kebutuhan tetapi "pilihan hidup".


Adapun "bagaimana saya bisa percaya bahwa biner dari kompiler yang saya gunakan tidak secara otomatis mengisi binari yang dikompilasi dengan spyware?" masalah telah dipecahkan - Anda dapat menggunakan dua kompiler independen untuk kompilasi kompiler silang dari basis sumber yang sama dan target dan kedua kompiler silang tersebut harus menghasilkan hasil yang identik bitwise untuk target yang dapat dieksekusi.

1
Antti Haapala 16 Januari 2021, 16:24