Saya tidak benci menggunakan bahasa assembly, karena saya telah menulis beberapa di kursus os saya. Tapi jelas, bahasa assembly kurang abstraksi, Anda harus lebih memperhatikan detail.
Apakah bahasa assembly benar-benar penting untuk menulis TAOCP?
Saya tidak benci menggunakan bahasa assembly, karena saya telah menulis beberapa di kursus os saya. Tapi jelas, bahasa assembly kurang abstraksi, Anda harus lebih memperhatikan detail.
Apakah bahasa assembly benar-benar penting untuk menulis TAOCP?
Jawaban:
Dia tidak hanya menggunakan MIXAL, bahasa rakitannya untuk MIX, tetapi juga MIX, model untuk komputer sederhana (seperti yang digunakan pada tahun enam puluhan). Ini adalah model untuk mengajar yang dengannya, sampai taraf tertentu, terlepas dari perkembangan di lapangan.
Jika dia menggunakan bahasa pemrograman lain (yang mana, omong-omong, apakah menurut Anda akan cocok?), Katakanlah NPL (bahasa pemrograman yang bagus), ia harus meninggalkan ide untuk menggunakan MIX atau untuk memperkenalkan kompiler dari beberapa bahasa komputer pilihan (yang merupakan hal yang jauh lebih kompleks daripada apa yang dia hadapi di Vol 1). Dengan begitu tidak akan menjadi TAOCP tetapi TAONPLP. Yang pertama tidak tergantung pada pilihan semacam itu dan, karena alasan ini, tidak lekang oleh waktu dalam beberapa buku tentang pemrograman. Yang kedua mungkin akan dilupakan sekarang ...
Juga, selama komputer pada prinsipnya bekerja seperti MIX-nya, adalah hal yang baik untuk memperhitungkannya jika Anda benar-benar tertarik mempelajari cara bekerja dengannya.
Kalian para penculik muda terkadang membuatku takjub. Anda terlalu sering tidak tahu bahwa sesuatu terjadi sebelum Anda mulai sekolah. (Saya memiliki masalah yang sama. Butuh waktu lama untuk memahami bahwa 15 tahun sebenarnya adalah waktu yang sangat singkat, dari sudut pandang orang dewasa. Itu kira-kira rentang dari Hiroshima ke Krisis Misil Kuba. Bagi saya, Perang Dunia II hanyalah sejarah, tetapi ayah saya berjuang di dalamnya, dan ibu saya masih di SMP selama itu.)
TAOCP, vol. 1, "Algoritma Fundamental", edisi 1, pertama kali dicetak pada tahun 1968. Itu 45 tahun yang lalu. Knuth mulai merencanakan seri dengan baik sebelum itu.
Untuk referensi: Intel 8086 pertama kali muncul pada 1978, sepuluh tahun kemudian. Bahasa PASCAL pertama kali muncul pada tahun 1971; Jensen & Wirth buku, tentang versi kedua bahasa, keluar pada tahun 1974. pengembangan awal dari C adalah 1969-1973: K & R diterbitkan pada tahun 1978.
Knuth bermaksud seri untuk menutupi lapangan. Dia mengatur gaya, MAKA, untuk berguna bagi para praktisi MAKA. Dia tidak pernah berharap seri itu secara harfiah menjadi karya hidupnya, atau tulisannya untuk merentang apa yang mungkin akan lebih dari setengah abad ketika dia akhirnya selesai.
Bahasa assembly bisa dibilang tidak sepenting hari ini seperti dulu, tetapi masih jauh lebih penting daripada Java / C ++ / Javascript / Python / Perl para pakar ingin Anda semua percaya.
Sekarang, MATIKAN HUKUM SAYA!
Knuth membahas alasannya di Pendahuluan. Saya akan mengutip hanya beberapa bagian:
... Saya perlu memutuskan apakah akan menggunakan bahasa aljabar seperti ALGOL atau FORTRAN, atau menggunakan bahasa berorientasi mesin untuk tujuan ini. Mungkin banyak ahli komputer saat ini akan tidak setuju dengan keputusan saya untuk menggunakan bahasa yang berorientasi pada mesin, tetapi saya menjadi yakin bahwa itu jelas pilihan yang tepat, karena alasan berikut:
- Bahasa aljabar lebih cocok untuk masalah numerik daripada masalah non-numerik yang dipertimbangkan di sini. [...]
- ... Dengan menulis dalam bahasa berorientasi mesin, programmer akan cenderung menggunakan metode yang jauh lebih efisien; itu jauh lebih dekat dengan kenyataan.
- Program yang kami butuhkan adalah, dengan beberapa pengecualian, semua agak pendek ...
- Seseorang yang lebih dari sekadar tertarik pada komputer harus dididik dengan baik dalam bahasa mesin ...
- Beberapa bahasa mesin akan diperlukan ...
Meskipun dia tidak menunjukkannya secara langsung, saya pikir penyebutan ALGOL dan FORTRAN menunjukkan masalah lain yang dia hindari yang mungkin lebih penting. Mari kita asumsikan dia telah memilih Algol (jelas lebih cocok untuk program non-numerik daripada Fortran). Saya berpendapat bahwa Algol mungkin akan lebih asing bagi kebanyakan programmer saat ini daripada bahasa assembly yang dia pilih.
Untuk edisi ketiga, ia mendesain ulang MIX agar lebih cocok dengan prosesor modern, dan harus menulis ulang kode untuk itu. Saya berpendapat, bahwa jika dia menggunakan bahasa tingkat yang lebih tinggi, penulisan ulang akan jauh lebih besar - dan semua alasan yang dia berikan akan tetap ada juga.
Knuth juga memperbarui pemikirannya :
Mengapa memiliki bahasa mesin?
Banyak pembaca yang berpikir, `` Mengapa Knuth menggantikan MIX dengan komputer lain alih-alih hanya menggunakan bahasa pemrograman tingkat tinggi? Hampir tidak ada yang menggunakan assembler hari ini. ''
Orang-orang seperti itu berhak atas pendapat mereka, dan mereka tidak perlu repot membaca bagian-bagian bahasa mesin dari buku-buku saya. Tetapi alasan untuk bahasa mesin yang saya berikan dalam kata pengantar Volume 1, yang ditulis pada awal 1960-an, tetap berlaku hingga hari ini:
- Salah satu tujuan utama buku saya adalah untuk menunjukkan bagaimana konstruksi tingkat tinggi benar-benar diimplementasikan dalam mesin, bukan hanya untuk menunjukkan bagaimana mereka diterapkan. Saya menjelaskan hubungan coroutine, struktur pohon, pembuatan angka acak, aritmatika presisi tinggi, konversi radix, pengemasan data, pencarian kombinatorial, rekursi, dll., Dari bawah ke atas.
- Program-program yang dibutuhkan dalam buku saya pada umumnya sangat singkat sehingga poin utama mereka dapat dipahami dengan mudah.
- Orang yang lebih dari sekadar tertarik pada komputer harus memiliki setidaknya beberapa gagasan tentang seperti apa perangkat keras yang mendasarinya. Kalau tidak, program yang mereka tulis akan sangat aneh.
- Bagaimanapun juga, bahasa mesin diperlukan, karena keluaran dari banyak program perangkat lunak yang saya jelaskan.
- Mengekspresikan metode dasar seperti algoritma untuk menyortir dan mencari dalam bahasa mesin memungkinkan untuk melakukan studi yang bermakna tentang efek cache dan ukuran RAM dan karakteristik perangkat keras lainnya (kecepatan memori, pipelining, beberapa masalah, buffer lookaside, ukuran blok cache, dll) ketika membandingkan berbagai skema.
Selain itu, jika saya memang menggunakan bahasa tingkat tinggi, bahasa apa yang seharusnya? Pada 1960-an saya mungkin akan memilih Algol W; pada tahun 1970-an, saya kemudian harus menulis ulang buku-buku saya menggunakan Pascal; pada 1980-an, saya pasti akan mengubah segalanya menjadi C; pada 1990-an, saya harus beralih ke C ++ dan mungkin ke Jawa. Pada tahun 2000-an, bahasa lain tidak diragukan lagi adalah de rigueur. Saya tidak punya waktu untuk menulis ulang buku-buku saya karena bahasa keluar-masuk mode; bahasa bukan poin dari buku saya, intinya adalah apa yang dapat Anda lakukan dalam bahasa favorit Anda. Buku-buku saya fokus pada kebenaran abadi.
Oleh karena itu saya akan terus menggunakan bahasa Inggris sebagai bahasa tingkat tinggi dalam TAOCP, dan saya akan terus menggunakan bahasa tingkat rendah untuk menunjukkan bagaimana mesin benar-benar menghitung. Pembaca yang hanya ingin melihat algoritma yang sudah dikemas dengan cara plug-in, menggunakan bahasa yang trendi, harus membeli buku orang lain.
Berita baiknya adalah pemrograman untuk mesin RISC menyenangkan dan sederhana, ketika mesin RISC memiliki desain bersih yang bagus. Jadi saya tidak perlu memikirkan hal-hal kecil, detail kecil yang mengalihkan perhatian dari poin utama. Dalam hal ini MMIX akan jauh lebih baik daripada MIX.