Dalam SICP , penulis menyatakan ( Bagian 1.1 ) bahwa ada tiga "mekanisme" dasar bahasa pemrograman:
ekspresi primitif , yang mewakili entitas paling sederhana yang digunakan bahasa
sarana kombinasi , dimana unsur-unsur majemuk dibangun dari yang lebih sederhana
sarana abstraksi , dengan mana unsur-unsur majemuk dapat dinamai dan dimanipulasi sebagai unit
Bagaimana saya bisa menganalisis bahasa pemrograman utama (Java, misalnya) dalam hal elemen atau mekanisme ini?
Jawaban:
Perbedaan antara ekspresi primitif, sarana kombinasi dan sarana abstraksi sangat berguna ketika memodelkan bahasa pemrograman. Perhatikan bahwa ini bukan properti intrinsik bahasa: Anda tidak dapat menunjukkan definisi bahasa apa pun dan mengatakan "fitur ini jelas merupakan ungkapan primitif, bahwa fitur tersebut jelas merupakan alat kombinasi". Perbedaannya adalah milik model, dan model kompleks dapat menolak klasifikasi.
Contoh buku teks dari ketiga konsep ini adalah kalkulus lambda , yang masing-masing tepat memiliki satu:
Ketika Anda masuk ke bahasa dengan lebih banyak fitur, pemodelan dapat menjadi lebih ambigu. Secara umum, ekspresi primitif adalah ekspresi yang tidak bisa atau tidak akan Anda bagi menjadi komponen primitif. Tapi itu seperti atom : itu primitif sampai ilmu terus berjalan. Sebagai contoh, ada varian dari kalkulus lambda di mana variabel menggunakan angka daripada nama ( indeks de Bruijn ), yang sangat nyaman saat memodelkan istilah lambda untuk bukti komputer; dan dalam bukti komputer, bilangan bulat dipecah menjadi bagian-bagian penyusunnya . Jadi dalam model ini, variabel bukanlah ekspresi primitif.
Dalam (model khas) Java, ekspresi primitif terutama adalah konstanta dan variabel. Sarana kombinasi meliputi banyak operator; lebih tepatnya, "ekspresi aditif" adalah cara kombinasi dengan dua slot (sisi kiri dan sisi kanan), atau dengan tiga slot (dua sisi ditambah operator) jika Anda memasukkan A
+
B dan A-
B dengan nama itu (dalam hal ini operator+
dan-
akan menjadi konstruksi primitif dalam hak mereka sendiri). Sarana kombinasi lainnya termasuk urutan instruksi I;
J , loop constructswhile (…) {…}
, dan seterusnya. Kemudian Anda memiliki konstruksi seperti deklarasi variabel, definisi fungsi, definisi kelas dan sebagainya yang keduanya merupakan kombinasi (mereka menggabungkan nama dan tipe parameter, badan, inisialisasi, ...) dan sarana abstraksi (karena mereka mendefinisikan nama untuk digunakan kembali). Sebenarnya cukup umum bahwa sarana abstraksi juga merupakan sarana kombinasi: mereka menggabungkan nama dengan definisinya.sumber
Tikaman kasar:
Ekspresi hanya itu; apa yang merupakan ekspresi di Jawa. Saya tidak tahu apakah itu akan diperluas untuk memasukkan pernyataan atau tidak.
Kombinasi akan mencakup ekspresi majemuk, (variabel ?,) pernyataan, metode, mekanisme kelas, dan paket. Modul, juga, begitu mereka dalam bahasa.
Di Jawa, cara abstraksi paling sederhana adalah kelas: tidak ada yang mungkin ada di luar kelas. Mungkin ada "lapisan" abstraksi: metode statis bisa dibilang lebih sederhana daripada metode turunan, karena tidak memerlukan turunan.
Generik menawarkan lapisan abstraksi tambahan (dan frustrasi).
sumber
Inilah kategorisasi dasar saya. Saya mencoba menggambar secara paralel dengan LISP.
Ekspresi primitif
Paralel dalam LISP : atom, angka, dan daftar.
Cara Kombinasi (Cara Anda dapat membangun struktur data majemuk)
Paralel dalam LISP : Sel kontra, daftar
Sarana Abstraksi
+
,-
,*
,/
, ...)Paralel dalam LISP : Fungsi, gula sintaksis seperti
let
,define
sumber
Bahasa pemrograman umumnya ditentukan oleh sintaks dan semantiknya . Kedua hal ini akan didefinisikan dalam standar untuk bahasa tersebut.
Sintaksnya menguraikan bagaimana menulis program yang valid dan semantik mendefinisikan apa arti program yang valid.
Dalam kasus Anda, sintaks akan memberi tahu Anda apa primitif Anda, bagaimana Anda menggabungkan mereka, dan bagaimana Anda abstrak mereka. Semantik akan memberi tahu Anda apa arti kombinasi dan abstraksi.
Sebagai contoh, sintaks akan memberi tahu Anda cara menulis
for
loop yang valid . Semantik akan memberi tahu Anda apa yang dilakukan for loop.Jika Anda benar-benar ingin mulai menganalisis bahasa pemrograman, ambil salinan standar dan lihat apa yang ada di sana. Saya benar-benar akan memulai dengan bahasa yang sederhana, seperti C, sebelum mempelajari Jawa. Saya juga akan membaca sisa buku ini. Mempelajari mengapa pemrograman bahasa berfungsi seperti yang mereka lakukan telah menjadikan saya seorang programmer yang lebih baik, walaupun saya tidak mengimplementasikan kompiler.
sumber
x = ++x;
tersebut tidak valid bahkan jika kompiler biasa akan menerimanya.Saya tidak tahu apakah itu benar, tetapi cara saya memahami pembagian ini adalah sebagai berikut:
ekspresi primitif , Ini akan menjadi, hal-hal seperti >>, +, *, /, int, boolean, variabel, metode dll.
sarana kombinasi, Ini bisa diperdebatkan, baik hal-hal seperti + dan concact, atau yang berbicara tentang ide-ide yang lebih maju seperti pewarisan vs komposisi dan metode untuk melakukan itu. Injeksi, operator baru, perpanjangan, dll.
sarana abstraksi, Ini akan menjadi sintaks yang digunakan untuk memberi nama variabel, dan metode, serta sarana untuk menciptakan antarmuka, kelas, kelas statis, metode kelebihan beban dll.
Namun, mungkin Anda perlu memberi kami lebih banyak info dari buku tersebut sehingga kami tahu persis apa yang dimaksud di sana.
sumber
means of combination
- bahwa sulit untuk mencari tahu apa sebenarnya yang ada di sana. Jawaban yang bagus.