Saya mendengar tentang ayam dan telur serta tali sepatu. Saya punya beberapa pertanyaan.
Apa yang menulis kompiler pertama yang mengubah sesuatu menjadi instruksi biner?
Apakah assembly dikompilasi atau diterjemahkan ke dalam instruksi biner?
... Saya merasa sulit untuk percaya bahwa mereka menulis kompiler dalam biner.
compiler-construction
machine-instruction
Shawn Mclean
sumber
sumber
Jawaban:
Instruksi perakitan adalah (umumnya) pemetaan langsung ke opcodes, yang merupakan (multi) nilai byte kode mesin yang dapat langsung ditafsirkan oleh prosesor. Sangat mungkin untuk menulis sebuah program dalam opcodes secara langsung dengan mencari mereka dari sebuah tabel (seperti ini untuk mikroprosesor 6039 , misalnya) yang mencantumkannya dengan instruksi perakitan yang cocok, dan menentukan alamat / offset memori untuk hal-hal lain. seperti melompat.
Program pertama dilakukan persis seperti ini - opcodes tulisan tangan.
Namun, sebagian besar waktu lebih mudah menggunakan assembler untuk "mengkompilasi" kode perakitan, yang secara otomatis melakukan pencarian opcode ini, serta membantu dalam menghitung alamat / offset untuk label lompat bernama, dan lain-lain.
Perakit pertama ditulis dengan tangan. Perakit tersebut kemudian dapat digunakan untuk merakit perakit yang lebih rumit, yang kemudian dapat digunakan untuk merakit kompiler yang ditulis untuk bahasa tingkat yang lebih tinggi, dan seterusnya. Proses penulisan iteratif alat-alat untuk menyederhanakan penciptaan set alat berikutnya disebut (seperti yang disebutkan oleh David Rabinowitz dalam jawabannya) bootstrap .
sumber
Silakan baca tentang bootstrap kompiler dan sejarah penulisan kompiler
Idenya adalah untuk menulis kompiler yang sangat sederhana secara langsung dalam kode mesin, menggunakannya untuk menulis kompiler yang lebih canggih, gunakan yang kedua untuk membangun yang ketiga dan seterusnya sampai Anda dapat memiliki kompiler berfitur lengkap.
sumber
Telur ayam sebelum lama. Jawaban untuk sebagian besar masalah "ayam dan telur" adalah sama: evolusi. Beberapa orang juga kesulitan mempercayai evolusi biologis, tetapi ketidakpercayaan bukanlah sebuah argumen (google argumentum ad ignorantiam).
Untuk langsung menjawab pertanyaan Anda: kompiler pertama ditulis (oleh manusia) dalam bahasa rakitan - program yang disebut assembler akan menerjemahkan bahasa rakitan menjadi biner; ini adalah proses yang jauh lebih sederhana daripada kompilasi karena bahasa rakitan hanyalah bentuk simbolis dari bahasa mesin yang menggunakan nama opcode alih-alih angka, mewakili alamat dengan simbol, dan sebagainya. Banyak kompiler selanjutnya ditulis dalam bahasa assembly juga. Namun C compiler pertama adalah B compiler dimodifikasi, yang ditulis dalam B . Kompiler B pertama ditulis dalam TMG . Kompiler TMG yang digunakan untuk mengkompilasi bahwa kompiler B ditulis dalam bahasa assembly PDP-7.
sumber
Woz mengatakan dalam salah satu pembicaraan publiknya bahwa ketika dia mulai, dia tidak mampu membeli kompiler sehingga dia dikompilasi ke biner dengan tangan di atas kertas. Jika Anda ingin melihat sesuatu yang lebih liar, baca tentang kondisi di mana Bill Gates dan Paul Allen menulis BASIC untuk Altair 8800.
Mengenai "menulis komputer dalam biner" - mundur selangkah dari menjadi seorang programmer dan berpikir tentang apa itu komputer awal. Barang tingkat tinggi belum ada - Anda memikirkan segala sesuatu di tingkat rendah karena hanya itu yang ada. Anda memiliki perangkat keras yang dapat melakukan logika dasar dan aritmatika yang Anda manipulasi melalui kode mesin (yang hanya dikompilasi perakitan - Amber menjelaskan mengapa bagian ini tidak sulit dilakukan dengan tangan) dan Anda ingin perangkat keras ini melakukan prestasi matematika tertentu. Anda tidak khawatir tentang sistem operasi yang tidak ada, Anda hanya memberi tahu perangkat keras (dalam perakitan) bagaimana cara memanipulasi angka yang Anda berikan. Itu hanya kalkulator besar. Komputer saat ini dibangun satu abstraksi pada suatu waktu.
Jika Anda ingin menjebol penghalang yang membuat komputer terasa seperti sulap, saya SANGAT merekomendasikan membaca KODE oleh Charles Petzold dan / atau Elemen Sistem Komputasi . Hanya dengan pengetahuan dasar pemrograman, buku-buku yang sangat mudah diakses ini akan membuat Anda memahami komputer dari atas ke bawah. Jelas, seseorang tidak bisa mendapatkan komputer. sci. atau gelar EE setelah hanya 2 buku, tapi bisa saya katakan sebagai programmer otodidak yang ketinggalan pelatihan formal: buku-buku ini mengguncang dunia saya!
sumber
Manusia melakukannya. Baca tentang sistem A-0 :
sumber
Program pertama ditulis dalam kode mesin (bukan bahasa rakitan) - angka aktual dicolokkan ke memori komputer menggunakan sakelar. Kami telah datang jauh ...
Kadang-kadang ini masih terjadi sebagian kecil - untuk menambal bit kode kecil atau membuat thunks. Saya ingat meninju angka ke dalam string Dasar yang kemudian dieksekusi sebagai subrutin kecil, cepat pada micros awal. Saya juga ingat toggling switch pada panel depan PDP-11 untuk memasukkan program bootloader ke dalam memorinya untuk kursus universitas.
Program-program ini kadang-kadang digunakan untuk memproses file teks untuk membuat program lain, dan bahasa pemrograman voila dibuat.
sumber