Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 14293|Jawab: 2

[C] Bahasa C sangat kuat, dalam bahasa apa tulisannya?

[Salin tautan]
Diposting pada 28/09/2019 16.51.21 | | |
"Dalam bahasa apa C itu sendiri ditulis?"

Dari perspektif lain, adalah: sebelum bahasa C berjalan, itu harus dikompilasi, jadi dari mana kompiler bahasa C berasal? Dalam bahasa apa itu ditulis? Jika ditulis dengan C sendiri, apakah ada telur atau ayam terlebih dahulu?

1

Mari kita asumsikan bahwa tidak ada kompiler di dunia, mari kita mulai dengan bahasa mesin dan lihat caranya.

Bahasa mesin dapat dijalankan langsung oleh CPU tanpa memerlukan kompiler.

Lalu ada bahasa perakitan, meskipun bahasa perakitan hanya mnemonik untuk bahasa mesin, tetapi juga perlu dikompilasi ke dalam bahasa mesin untuk dieksekusi, sehingga tidak ada pilihan selain menggunakan bahasa mesin untuk menulis kompiler pertama ini (tidak digunakan di masa mendatang).

Masalah bahasa perakitan terpecahkan, dan ini adalah langkah maju yang besar, saat ini dimungkinkan untuk menggunakan bahasa perakitan untuk menulis kompiler bahasa C, yang kami katakan adalah nenek moyang dari kompiler C.

Dengan nenek moyang ini, Anda dapat mengkompilasi program bahasa C apa pun, jadi dapatkah Anda menulis kompiler dalam bahasa C itu sendiri? Kompilasi saja dengan leluhur.

Oke, setelah lapisan seperti itu, saya akhirnya mendapatkan kompiler yang ditulis dalam C, yang sangat merepotkan.

Pada titik ini, kompiler C yang ditulis oleh paket sebelumnya dapat ditinggalkan.

Tentu saja, jika ada bahasa tingkat tinggi lainnya sebelum C, seperti Pascal, maka Pascal dapat digunakan untuk menulis kompiler C.

Penyusun Pascal pertama dikatakan telah ditulis di Fortran. Sebagai bahasa tingkat tinggi pertama, kompiler Fortran harus ditulis dalam bahasa perakitan.

2

Berikut adalah legenda menarik tentang compiler:

Legenda mengatakan bahwa Ken Thompson, salah satu penemu Unix, dengan angkuh ke mesin Unix mana pun di Bell Labs, memasukkan nama pengguna dan kata sandinya, dan dapat masuk dengan cara root!

Bell Labs penuh dengan bakat, dan beberapa banteng besar lainnya bersumpah untuk menemukan kerentanan ini, mereka membaca kode sumber C Unix, dan akhirnya menemukan pintu belakang login, dan setelah membersihkan pintu belakang, mereka mengkompilasi Unix dan menjalankannya, tetapi Thompson masih bisa masuk.

Beberapa orang berpikir bahwa mungkin ada masalah dengan kompiler, dan backdoor ditanamkan saat mengkompilasi Unix, jadi mereka menulis ulang kompiler di C dan mengkompilasi Unix lagi dengan kompiler baru.

Tapi itu masih tidak berhasil, Thompson masih bisa masuk dengan root, yang benar-benar menghancurkan!

Belakangan, Thompson sendiri yang membuka rahasianya, itu adalah compiler C pertama yang mengalami masalah, compiler ini tentu saja akan ditanamkan di backdoor saat mengkompilasi kode sumber Unix, ini tidak cukup, yang lebih baik lagi, jika Anda menulis compiler baru dalam bahasa C, Anda pasti perlu mengkompilasinya menjadi kode biner, apa yang harus dikompilasi, hanya gunakan compiler pertama yang ditulis oleh Thompson untuk mengkompilasi, oke, compiler yang Anda tulis akan tercemar, compiler Anda akan mengkompilasi Unix lagi, Juga akan menanamkan pintu belakang :-)

Omong-omong, saya teringat pada insiden XcodeGhost beberapa tahun yang lalu, yang berarti bahwa kuda Troya ditanamkan di Xcode (diunduh dari saluran tidak resmi), sehingga aplikasi ios yang dikompilasi oleh XCode terkontaminasi, dan aplikasi ini dapat digunakan oleh peretas untuk melakukan hal-hal ilegal.

Meskipun XCodeGhost ini jauh dari milik Thompson, ini mengingatkan kita bahwa saat mengunduh perangkat lunak, Anda harus menggunakan saluran formal, mengunduh dari situs web resmi, mencari standar HTTPS situs web, dan bahkan memverifikasi checksum.

3

Beberapa orang mungkin bertanya: Saya menggunakan Hui untuk menulis paragraf Hello World, tetapi seseorang dapat menggunakannya untuk menulis kompiler yang kompleks? Apakah ini mungkin?

Tentu saja, ketika generasi pertama Unix dikembangkan, tidak ada bahasa C, dan Ken Thompson dan Dennis Ritchie mengetik Unix dengan jalur perakitan.   Versi pertama WPS ditulis oleh Qiu Bojun di Hui, dan penyusun Turbo Pascal juga ditulis oleh Anders di Hui, dan kemampuan para dewa tidak terbayangkan oleh orang biasa.

Untuk pengkompilasi, dimungkinkan juga untuk mengembangkan dengan cara "bola salju":

Masih mengambil bahasa C sebagai contoh, versi pertama dapat memilih subset bahasa C, seperti hanya mendukung tipe data dasar, pernyataan kontrol proses, dan panggilan fungsi...... Kami menyebut subset ini C0.

Kemudian tulis kompiler dalam bahasa perakitan, dan hanya dapatkan bagian dari bahasa C0 ini, sehingga jauh lebih mudah untuk menulis.

Bahasa C0 berfungsi, dan kemudian kita memperluas subset ini dengan menambahkan struktur, pointer, ......, dan memanggil bahasa baru C1.

Siapa yang menulis kompiler untuk bahasa C1?   Secara alami, itu adalah C0.

Saat C1 berfungsi, perluas fitur bahasa lagi, tulis kompiler dengan C1, dan dapatkan C2.

Lalu ada C3, C4......  Akhirnya, Anda mendapatkan bahasa C lengkap.

Proses ini disebut bootstrapping, dan dalam bahasa Cina disebut bootstrapping.





Mantan:Fitur .NET Core baru merilis file tunggal yang dapat dieksekusi
Depan:Mengapa programmer bekerja lembur tanpa akhir?
Diposting pada 29/09/2019 09.27.54 |
Dalam bahasa apa C itu sendiri ditulis?
Diposting pada 01/10/2019 23.54.34 |
Dalam bahasa apa C itu sendiri ditulis?
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com