Saya ingin tahu tentang kelahiran kompiler. Bagaimana pemrograman dimulai? Apakah orang pertama kali membangun perangkat keras yang mengenali serangkaian perintah tertentu, atau apakah orang menentukan bahasa dan kemudian membangun perangkat keras di sekitarnya? Dan pada catatan terkait, apa bahasa pemrograman pertama?
programming-languages
history
compiler
assembly
David Cowden
sumber
sumber
Jawaban:
Ini memiliki jawaban yang sangat jelas, sebenarnya: Kode sumber datang lebih dulu - dengan margin besar.
Sebelum memberikan rincian teknis, sedikit perspektif:
Bahasa pemrograman pertama semuanya diterjemahkan ke dalam bahasa mesin atau assembler dengan tangan . Gagasan menggunakan perangkat lunak untuk mengotomatisasi terjemahan ini (baik melalui kompiler atau evaluator) selalu muncul kemudian, dan jauh dari intuitif.
Pertimbangkan kutipan artikel Wikipedia ini tentang FORTRAN yang menggambarkan keengganan yang harus dihadapi penyusun:
=> Pada saat kompiler FORTRAN memasuki pasar (1957), orang sudah dengan senang hati memprogram baik dalam bahasa assembly maupun FORTRAN.
Kasusnya serupa untuk LISP (dari Peretas & Pelukis ):
Sekali lagi, tidak hanya kode sumber (dalam LISP) mendahului penerjemah, yang terakhir bahkan tidak tersirat dalam yang sebelumnya.
Namun perkembangan ini relatif terlambat. Meskipun tidak mempertimbangkan Mesin Analitik Charles Babbage dan program pertama terkait Ada Lovelace , ada bahasa pemrograman pada abad ke-20 yang mendahului penyusun:
Plankalkül Konrad Zuse dan konstruksi matematis λ-calculus yang diperkenalkan oleh Gereja Alonzo. Keduanya merupakan bahasa pemrograman yang ditentukan secara formal, tetapi tidak ada yang memiliki kompiler pada saat itu.
Untuk menempatkan ini ke dalam perspektif, λ-kalkulus adalah dari tahun 1930-an, dan Plankalkül dikembangkan sekitar tahun 1945. Sebaliknya, kompiler FORTRAN pertama keluar pada tahun 1957 (tetapi sekali lagi tiga tahun setelah FORTRAN ditentukan).
sumber
Pemrograman dimulai dengan orang-orang menulis kode mesin langsung ke memori, ke kartu berlubang dan pita kertas atau bahkan hubungan arus pendek pada panel patch. Apakah perangkat keras dibangun di sekitar kebutuhan perangkat lunak atau sebaliknya sulit untuk diceritakan. Tentu saja desain yang paling awal untuk komputer turing lengkap yang dapat diprogram, mesin Analitik Babbage , pra-tanggal program terdokumentasi pertama Ada Lovelace .
Mengenai bahasa pemrograman pertama, saya berpendapat bahwa itu adalah bahasa mesin mesin analitik Babbage (dari pertanyaan. Apa bahasa pemrograman pertama yang ditulis untuk komputer? )
Untuk menjawab pertanyaan dalam judul pertanyaan Anda, karena bahasa rakitan adalah kode sumber , dan bahasa rakitan bahasa tingkat tinggi pra-tanggal yang dapat dikompilasi menjadi assembler, kode sumber datang terlebih dahulu.
Juga, kompiler tidak pernah diperlukan , hanya nyaman.
Sangat mungkin untuk menulis perangkat lunak secara langsung ke dalam memori jika Anda telah menghafal tabel op-code yang sesuai . Bahkan, beberapa komputer awal mengharuskan pengguna untuk memasukkan kode bootstrap pada keypad hex panel depan untuk mem-boot-nya, tetapi Anda dapat memanfaatkan kode yang Anda suka dan itu akan dijalankan.
Diakui karena CPU menjadi lebih kompleks, ini menjadi lebih sulit, tetapi set instruksi sederhana seperti 6809 , atau Z80 (mengabaikan semua mode indeks yang aneh) relatif mudah diprogram bahkan tanpa assembler , apalagi kompiler dari bahasa tingkat tinggi.
Jika mesin analitik Babbage pernah dibuat, saya yakin akan ada Mel steampunk , yang menulis program yang dioptimalkan langsung ke kartu alat tenun.
sumber
movl $0, -20(%rbp)
, sedangkan kode mesin adalahC745EC00000000
, dan itu yang terakhir (baik, sesuatu seperti itu) yang pertama kali secara manual masuk atau membaca dari pita kertas. Mengenai apakah kode mesin dianggap sebagai kode sumber , saya cenderung mengatakan "apa pun yang mengapung perahu Anda". Jika Anda mengaktifkannya secara manual, maka ya, saya akan mengatakan itu penting.Kompiler adalah yang pertama . Itu langsung ditulis dalam kode mesin, karena sumber tidak dapat dikompilasi tanpa kompiler.
Artikel Wikipedia seperti ini tentang Bahasa Komputer dapat menjawab sebagian besar pertanyaan. Jika tidak, pilih saja salah satu buku karya Tanenbaum, seperti Structured Computer Organization , yang dapat menjawab lebih banyak pertanyaan daripada yang dapat Anda tanyakan :)
Saya tidak bisa mengatakan sesuatu yang lebih spesifik, karena pertanyaan Anda terlalu luas.
sumber
Penerjemah ada sebelum kompiler sehingga kode sumber ada sebelum kompiler.
Ada beberapa makalah yang sangat menarik tentang sejarah komputasi di sini . Kode sumber untuk kompiler FORTRAN II seharusnya tersedia, tetapi tautan tersebut rusak.
Makalah ini , dari tahun 1954, menggambarkan penerjemah Whirlwhind.
sumber
Pertanyaan ini sangat penting pada interpretasi semantik kami tentang 'kode sumber'. Jika kita mendefinisikannya sebagai 'instruksi komputer berbasis teks yang dikompilasi', maka mungkin kompilator yang lebih dulu.
Saya lebih cenderung untuk pergi dengan sesuatu yang lebih otoritatif, seperti makalah Mark Harman "Mengapa Analisis Kode Sumber dan Manipulasi Akan Selalu Penting" dipresentasikan pada Konferensi Kerja Internasional IEEE Kesepuluh tentang Analisis Kode Sumber dan Manipulasi
Dan saya pikir jawaban Anda tersirat dalam definisi itu - kode sumber pasti datang lebih dulu.
sumber
Algoritma dipilah di atas kertas, kemudian alus dihubungkan secara fisik / mekanis (kabel bergerak). untuk mengubah program, Anda memindahkan kabel dan menjalankan lagi.
Kemudian bahasa assembly disortir di atas kertas, diterjemahkan ke kode mesin dengan tangan, kemudian menggunakan sakelar, dll untuk memasukkannya ke ram. Atau kartu punch, dll. Pada akhirnya Anda dapat membuat assembler, kemudian Anda dapat memprogram dalam assembly bukan kode mesin, lalu Anda dapat membuat compiler. Akhirnya Anda bisa bootstrap kompiler itu. Dan membuat bahasa baru dan kompiler baru, dll.
Bahasa pertama bukan bahasa, kemudian bahasa pertama adalah bahasa rakitan. untuk setiap prosesor bahasa pertama adalah bahasa rakitan (berasal dari kode mesin). Set instruksi dirancang terlebih dahulu kemudian perangkat keras untuk mengimplementasikannya kemudian assembler, kemudian kompiler.
sumber