Pertanyaan Anda menarik dalam beberapa cara, karena memerlukan pembedaan yang cermat untuk beberapa masalah. Tetapi visi Anda menurut saya pada dasarnya benar. Saya tidak membaca referensi Anda sebelum menulis sebagian besar jawaban ini untuk menghindari bias jawaban saya.
Pertama, pernyataan Anda Variables are symbolic names for memory
addresses
, itu hampir benar, tetapi membingungkan konsep dan implementasinya yang biasa. Variabel sebenarnya hanya sebuah wadah yang bisa berisi nilai yang bisa diubah. Biasanya, wadah ini diimplementasikan pada komputer sebagai bock ruang memori, ditandai oleh dan alamat dan ukuran karena variabel dapat berisi objek yang memerlukan representasi dengan informasi lebih atau kurang.
Tapi saya akan mempertimbangkan sebagian besar sudut pandang yang lebih abstrak dari semantik bahasa, terlepas dari teknik implementasi.
Jadi variabel hanyalah wadah dari sudut pandang abstrak. Wadah seperti itu tidak perlu memiliki nama. Namun, bahasa sering memiliki variabel yang dinamai dengan mengaitkannya sebagai pengenal, sehingga penggunaan variabel dapat diungkapkan oleh pengenal. Sebuah variabel sebenarnya dapat memiliki beberapa pengidentifikasi melalui berbagai mekanisme aliasing. Variabel juga bisa menjadi sub bagian dari variabel yang lebih besar: contohnya adalah sel variabel array, yang dapat dinamai dengan menentukan variabel array dan indeks sel, tetapi juga bisa juga dikaitkan dengan pengidentifikasi melalui aliasing.
Saya sengaja menggunakan wadah kata yang agak netral, untuk menghindari memanggil kata-kata lain yang mungkin secara teknis dimuat secara semantik. Ini sebenarnya dekat dengan konsep referensi yang dijelaskan dalam wilipedia , yang sering dikacaukan dengan alamat memori. Kata penunjuk itu sendiri sering dipahami sebagai alamat memori, tetapi saya tidak berpikir itu bermakna ketika mempertimbangkan sebagian besar bahasa tingkat tinggi, dan mungkin tidak sesuai dalam makalah diskusi yang Anda rujuk (meskipun alamat dapat digunakan), karena tidak tepat merujuk pada implementasi spesifik. Namun, itu sesuai untuk bahasa seperti C, yang seharusnya lebih dekat dengan konsep implementasi dan arsitektur mesin.
Sebenarnya, jika Anda melihat variabel atau nilai-nilai pada tingkat implementasi, mungkin ada beberapa sistem tipuan yang kompleks, "pointer level mesin", tetapi yang (dan harus) tidak terlihat oleh pengguna, sehingga sudut pandang abstrak Saya mengembangkan bisa valid. Untuk sebagian besar bahasa pemrograman, pengguna tidak perlu khawatir, atau bahkan tahu, tentang implementasi, karena implementasi dapat sangat bervariasi untuk bahasa tertentu. Ini mungkin tidak benar untuk beberapa bahasa, seperti C, yang sengaja dekat dengan arsitektur mesin, sebagai pengganti lanjutan untuk bahasa rakitan yang hampir berhubungan langsung dengan pengkodean biner eksplisit, tetapi tingkat yang terlalu rendah untuk penggunaan yang mudah di sebagian besar situasi.
Apa yang harus diketahui oleh pengguna bahasa, dan kadang-kadang lebih dari itu, adalah apa yang merupakan nilai dan operasi terkait, di mana mereka dapat terkandung, bagaimana mereka dapat dikaitkan dengan nama, cara kerja sistem penamaan, bagaimana cara baru jenis nilai didefinisikan, dll.
612
Asosiasi nilai yang tidak berubah dengan pengenal biasanya disebut konstanta. Litterals adalah konstanta dalam pengertian itu.
"Wadah nilai" juga dapat dianggap sebagai nilai, dan hubungannya dengan pengenal adalah variabel dalam arti "naif" yang biasa Anda gunakan. Jadi, Anda mungkin mengatakan bahwa variabel adalah "konstanta wadah".
Sekarang Anda mungkin bertanya-tanya apa perbedaan antara mengaitkan pengidentifikasi dengan nilai (deklarasi konstan) atau menetapkan nilai ke variabel, yaitu menyimpan nilai dalam wadah yang didefinisikan sebagai konstanta wadah. Pada dasarnya, deklarasi dapat dilihat sebagai operasi yang mendefinisikan notasi, yang mengaitkan pengenal yang merupakan entitas sintaksis dengan beberapa nilai yang merupakan entitas semantik. Tugas adalah operasi semantik murni yang mengubah keadaan, yaitu memodifikasi nilai wadah. Dalam beberapa hal, deklarasi adalah konsep meta tanpa efek semantik, selain menyediakan mekanisme penamaan (yaitu sintaksis) untuk entitas semantik.
Sebenarnya, penugasan adalah operasi semantik yang terjadi secara dinamis ketika program dieksekusi, sedangkan deklarasi memiliki sifat yang lebih sintaksis dan biasanya ditafsirkan dalam teks program, tidak tergantung pada eksekusi. Inilah sebabnya mengapa pelingkupan statis (yaitu pelingkupan tekstual) biasanya merupakan cara alami untuk memahami makna pengidentifikasi.
Setelah semua ini, saya dapat mengatakan bahwa nilai pointer hanyalah nama lain untuk sebuah wadah, dan variabel pointer adalah variabel wadah, yaitu wadah (konstan) yang dapat berisi wadah lain (dengan kemungkinan pembatasan pada permainan yang mengandung yang dikenakan oleh beberapa jenis sistem).
Mengenai kode, Anda menyatakan [pointers] might indicate the entry point
to a section of code and can be used to call that code
. Sebenarnya ini tidak sepenuhnya benar. Bagian kode sering tidak berarti sendirian (dari sudut pandang implementasi atau tingkat tinggi). Dari sudut pandang tingkat tinggi, kode biasanya berisi pengidentifikasi, dan Anda harus menafsirkan pengidentifikasi ini dalam konteks statis di mana mereka dideklarasikan. Tetapi sebenarnya ada duplikasi yang mungkin dari konteks statis yang sama, karena pada dasarnya rekursi yang merupakan fenomena dinamis (run-time), dan kode hanya dapat dieksekusi dalam contoh dinamis yang sesuai dari konteks statis. Ini agak rumit, tetapi konsekuensinya adalah bahwa konsep yang tepat adalah bahwa penutupan yang mengasosiasikan sepotong kode dan lingkungan di mana pengidentifikasi harus ditafsirkan. Penutupan adalah konsep semantik yang tepat, yaitu nilai semantik yang dapat didefinisikan dengan baik. Maka Anda dapat memiliki konstanta penutupan, variabel penutupan,
Fungsi adalah penutupan, biasanya dengan beberapa parameter untuk mendefinisikan atau menginisialisasi beberapa entitasnya (konstanta dan variabel).
Saya melewatkan banyak variasi dalam penggunaan mekanisme ini.
Penutupan dapat digunakan untuk mendefinisikan struktur OO dalam bahasa imperatif atau fungsional. Sebenarnya, pekerjaan awal pada gaya OO (mungkin sebelum nama) dilakukan dengan cara itu.
Makalah yang Anda referensi, yang saya skim dengan cepat, tampaknya menjadi yang menarik, ditulis oleh orang yang kompeten, tetapi mungkin bukan bacaan yang mudah jika Anda tidak memiliki pengalaman yang signifikan dengan berbagai bahasa dan model komputasi yang mendasarinya.
Tetapi ingat: banyak hal yang ada di mata yang melihatnya, selama dia mempertahankan pandangan yang konsisten. Sudut pandang mungkin berbeda.
Apakah ini menjawab pertanyaan Anda?
PS: Ini jawaban yang panjang. Jika Anda menganggap beberapa bagiannya tidak memadai, harap secara eksplisit tentang bagian mana itu. Terima kasih.