English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

tamu
1 / ?
kembali ke pelajaran

Pemrograman dalam Biner Absolut

Pemrogram pertama menulis dalam biner absolut: setiap instruksi & setiap alamat dalam digit biner mentah. Satu instruksi mungkin terlihat seperti 01100101 00001010 — kode instruksi & alamat memori dalam biner.

Masalah Kode Spageti

Ketika kesalahan memerlukan penyisipan instruksi baru, pemrogram menghadapi dilema. Menyisipkan di tempat berarti setiap alamat instruksi berikutnya bergeser satu — memerlukan pemrogram untuk memperbarui setiap referensi alamat di seluruh program. Bencana.

Solusinya: ganti instruksi tepat sebelum titik penyisipan dengan lompatan ke memori kosong. Di lokasi kosong itu: tulis instruksi yang ditimpa, tambahkan instruksi baru, lalu lompat kembali. Ketika kesalahan muncul di perbaikan, terapkan trik yang sama lagi menggunakan memori kosong lainnya.

Hasilnya: jalur eksekusi melalui program melompat ke lokasi yang tampak acak. Hamming menyebut ini 'kaleng spageti.' Jalur alur kontrol, digambar di atas kertas, terlihat persis seperti spageti yang kusut.

Rute Pelolosan

Dua peningkatan langsung: notasi oktal (kelompok digit biner dalam set 3) dan heksadesimal (kelompok 4, menggunakan A–F untuk nilai di luar 9). Ini mengurangi kesalahan penulisan tetapi tidak menyelesaikan masalah alamat fundamental.

Rakitan simbolis (misalnya SAP IBM — Symbolic Assembly Program — dan SOAP — Symbolic Optimizing Assembly Program pada IBM 650) memungkinkan pemrogram menulis nama instruksi (ADD, MOVE) & label alamat simbolis bukan biner. Assembler menerjemahkan ke biner pada waktu masukan, secara otomatis mengelola penugasan alamat.

SOAP melakukan optimasi tambahan: ia mengatur instruksi pada drum yang berputar sehingga instruksi berikutnya tiba di kepala pembaca tepat saat instruksi sebelumnya selesai — coding latensi minimum. SOAP bahkan mengompilasi dirinya sendiri: program A diproses sebagai data untuk menghasilkan B, B berjalan pada A untuk mengukur berapa banyak self-compilation meningkatkannya.

Parse Tree & Language Hierarchy

Perpustakaan & Kode yang Dapat Dipindahkan

Hamming mencatat bahwa ide perangkat lunak yang dapat digunakan kembali (perpustakaan matematika) datang sangat awal — Babbage telah memikirkannya. Masalahnya: perpustakaan dengan alamat absolut memerlukan setiap rutin untuk menempati lokasi memori yang sama setiap kali digunakan. Ketika perpustakaan total tumbuh terlalu besar, program bersaing untuk alamat yang sama.

Solusinya: kode yang dapat dipindahkan. Assembler menghasilkan instruksi yang mereferensikan memori secara relatif — offset dari alamat dasar — bukan alamat absolut. Penaut menyelesaikan alamat akhir pada waktu muat.

Laporan tidak dipublikasikan Von Neumann (beredar luas) menjelaskan trik pemrograman yang diperlukan. Buku pemrograman pertama yang dipublikasikan (Wilkes, Wheeler & Gill, EDSAC, 1951) mengkodifikasi teknik-teknik ini.

Jelaskan mengapa perpustakaan dengan alamat absolut menciptakan masalah skalabilitas, & bagaimana kode yang dapat dipindahkan menyelesaikannya. Properti spesifik apa dari alamat absolut yang menyebabkan tabrakan, & apa arti 'dapat dipindahkan' secara teknis?

Cabang Desain Bahasa

FORTRAN (1957, IBM) dan ALGOL (1958, komite internasional) mewakili dua filosofi desain yang menghasilkan hasil yang radikalis berbeda.

FORTRAN

John Backus memimpin proyek FORTRAN (FORmula TRANslation) di IBM. Tujuan desain: membuat bahasa mudah digunakan oleh ilmuwan & insinyur. FORTRAN menerima notasi matematika yang terasa alami bagi penggunanya: A = B + C * D bukan ADD B, C; STORE T; MULTIPLY T, D; STORE A.

FORTRAN bertahan 60+ tahun. Tetap dalam penggunaan aktif dalam komputasi ilmiah, dinamika fluida, pemodelan iklim, & fisika komputasi. Hamming mencatat daya tahan ini sebagai bukti desain yang sukses.

ALGOL

ALGOL (ALGOrithmic Language) dirancang oleh komite logika & ilmuwan komputer yang bertujuan untuk ketelitian matematis: bahasa yang secara logis bersih, dapat didefinisikan secara formal. Notasi Backus-Naur Form (BNF) untuk mendeskripsikan tata bahasa ditemukan untuk menentukan ALGOL.

ALGOL gagal dalam praktik. Meski elegan secara logis & pengaruhnya sangat besar pada desain bahasa selanjutnya (Pascal, C, & hampir setiap bahasa modern berasal dari konsep tata bahasa ALGOL), ALGOL itu sendiri tidak pernah secara luas diterapkan. Putusan Hamming: dirancang secara logis, tidak dapat digunakan oleh manusia.

Hierarki Bahasa

Hamming menjelaskan layering compiler/interpreter alami: program dapat membaca dalam bahasa tingkat lebih tinggi & menerjemahkannya ke yang lebih rendah. Tumpuk lapisan ini — masing-masing menerjemahkan satu level ke bawah. Di atas: bahasa yang berorientasi pada masalah dekat dengan cara praktisi berpikir tentang domain masalah mereka. Di bawah: kode mesin. Setiap transisi adalah compiler atau interpreter.

Empat Kriteria Desain Bahasa Hamming

Hamming menyaring pelajaran FORTRAN vs ALGOL menjadi empat kriteria untuk bahasa pemrograman yang sukses:

1. Mudah dipelajari — pemula dapat menjadi produktif dengan cepat

2. Mudah digunakan — tugas rutin memerlukan upacara minimal

3. Mudah di-debug — kesalahan menghasilkan pesan yang bermakna & dapat ditemukan

4. Mudah menggunakan subrutin — reuse & abstraksi tidak memerlukan usaha heroik

Dia menambahkan pengamatan struktural: bahasa manusia membawa ~60% redundansi; bahasa tulisan ~40%. Bahasa dengan redundansi rendah (seperti APL) menghasilkan satu-baris yang elegan yang ahli temukan indah & pemula temukan buram — & yang berisi kesalahan yang tidak dapat dideteksi ketika karakter tunggal mengubah makna.

Implikasinya: bahasa yang dirancang untuk elegansi logis mengoptimalkan pembaca yang salah. Pemrogram adalah manusia; manusia membutuhkan redundansi untuk menangkap kesalahan & mengkomunikasikan niat.

Terapkan empat kriteria Hamming ke bahasa pemrograman yang Anda kenal dengan baik. Berikan skor masing-masing kriteria 1–5 (5=luar biasa). Kemudian identifikasi kriteria mana, jika diperkuat, yang paling akan meningkatkan bahasa — & jelaskan apa yang akan terlihat seperti perubahan spesifik.

Desain Bahasa Psikologis vs Logis

Hamming kembali ke kontras FORTRAN/ALGOL sebagai pelajaran tentang dinamika institusional & manusia, bukan hanya desain bahasa.

FORTRAN dirancang secara psikologis — untuk manusia yang akan menggunakannya, khususnya ilmuwan yang berpikir dalam notasi matematika. ALGOL dirancang secara logis — untuk kebenaran formal & elegansi teoretis.

Paradoks yang Hamming identifikasi: bahasa yang secara logis benar yang manusia tolak gagal; bahasa yang dirancang secara pragmatis yang manusia adopsi berhasil, bahkan jika lebih berantakan secara logis.

Dia mengutip APL sebagai kasus ekstrem: secara logis elegan, dapat diekspresikan satu-baris, dengan set karakter khususnya sendiri. Para ahli menyukainya. Pemrogram normal menemukan tidak dapat dibaca. Perubahan karakter tunggal dapat diam-diam mengubah makna program. APL memiliki komunitas penggemar kecil & penggunaan arus utama hampir nol.

Argumen redundansi manusia: bahasa lisan ~60% berlebihan (konteks berulang, kata-kata penjelasan, struktur yang dapat diprediksi). Bahasa tulisan ~40% berlebihan. Redundansi ini berfungsi untuk deteksi kesalahan — manusia tidak dapat diandalkan, jadi bahasa berkembang untuk membawa cukup informasi berulang untuk menangkap & memperbaiki kesalahan. Bahasa dengan redundansi rendah menghilangkan jaring keselamatan ini.

Hierarki Compiler

Hamming menjelaskan layering compiler/interpreter: program dapat membaca dalam bahasa tingkat lebih tinggi & menerjemahkannya ke yang lebih rendah. Tumpuk lapisan ini — masing-masing menerjemahkan satu level ke bawah. Di atas: bahasa spesifik domain yang ahli di bidang (biologi, keuangan, fisika) tulis secara alami. Di bawah: kode mesin. Setiap transisi adalah compiler atau interpreter.

Memprediksi Kelangsungan Bahasa

Pada tahun 1993, Hamming telah menonton banyak bahasa berhasil & gagal. FORTRAN (1957) bertahan. ALGOL (1958) gagal. COBOL (1959) bertahan puluhan tahun dalam komputasi bisnis. LISP (1958) bertahan dalam penelitian AI. PL/I (1964) mencoba untuk menyatukan semuanya & gagal.

Menggunakan perbedaan desain psikologis vs logis Hamming & empat kriteriumnya, jelaskan mengapa satu bahasa yang Anda kenal berkembang & satu gagal (atau sedang gagal). Penjelasan Anda harus mengidentifikasi faktor manusia spesifik yang mendorong adopsi atau penolakan — bukan hanya properti teknis.

Pola Berulang

Bab sejarah perangkat lunak Hamming mengandung struktur berulang:

1. Keterbatasan yang menyakitkan ada (alamat absolut, notasi biner, kode yang tidak dapat dipertahankan)

2. Seseorang menemukan lapisan abstraksi yang menyembunyikan keterbatasan

3. Abstraksi memungkinkan skala baru, yang menciptakan keterbatasan yang menyakitkan baru

4. Ulangi

Biner → oktal/heks → rakitan simbolis → FORTRAN → pemrograman terstruktur → bahasa berorientasi objek → bahasa spesifik domain. Setiap lapisan menyelesaikan masalah paling akut pendahulu sambil memperkenalkan kelas masalah baru.

Masalah kode spageti (alamat absolut) menyebabkan rakitan simbolis. Program rakitan besar menyebabkan FORTRAN. Program FORTRAN besar menyebabkan pemrograman terstruktur & kemudian orientasi objek. Kuliah Hamming berakhir sebelum transisi yang lebih lambat ini, tetapi pola terus berlanjut.

Pelajarannya untuk insinyur: Anda selalu menyelesaikan rasa sakit yang diungkapkan oleh abstraksi sebelumnya. Memahami lapisan yang saat ini berada di atasnya memerlukan mengetahui mengapa lapisan di bawahnya ada.

Identifikasi lapisan abstraksi perangkat lunak yang Anda gunakan secara teratur. Keterbatasan menyakitkan apa di lapisan di bawahnya yang disembunyikannya? & kelas masalah baru apa yang diperkenalkan oleh lapisan saat ini Anda — rasa sakit apa yang akan dibutuhkan oleh lapisan berikutnya untuk diselesaikan?