Saya pikir istilah sintaksis gula menunjukkan sintaks alternatif untuk mengekspresikan semantik dasar yang sama.
Ambil contoh bahasa pemrograman A yang memiliki operasi sum
yang dapat menambahkan daftar bilangan bulat panjang sewenang-wenang. Dalam bahasa ini kita bisa menulis ungkapan
sum []
sum [3, 4, 5, 1]
sum [2, 7]
yang hasilnya adalah 0, 13, dan 9, masing-masing.
Sekarang, anggaplah kita menyadari bahwa 90% dari waktu yang kita gunakan sum
dengan dua argumen, dan karena itu kami memperkenalkan, untuk kenyamanan, notasi baru
2 + 7
yang hanya gula sintaksis untuk sum [2, 7]
.
Sekarang ambil bahasa kedua B yang tidak memiliki operasi penambahan apa pun. Kami mungkin memiliki operator seperti <
,, =
memungkinkan kami untuk membandingkan angka, tetapi tidak ada cara untuk menambah angka. Dalam rilis 2 bahasa B, kami memperkenalkan operasi penambahan baru dengan sintaks
2 + 7
yang menambahkan angka seperti biasa.
Dalam konteks bahasa A, +
notasi adalah gula sintaksis ( notasi alternatif, disederhanakan, dan ad-hoc yang dapat digunakan sebagai pengganti sum [...]
notasi). Demikian pula, seperti yang telah ditunjukkan dalam jawaban Hoa Long Tam, dalam C notasi p->field
adalah gula sintaksis untuk (*p).field
.
Dalam konteks bahasa B, +
notasi tersebut bukan gula sintaksis (itu adalah satu-satunya sintaks yang valid yang digunakan untuk operasi penjumlahan). Demikian pula, jika C hanya bisa mengakses anggota struct melalui pointer dan jika tidak memiliki notasi (*p).field
, maka notasi p->field
tidak akan menjadi gula sintaksis.
Menurut pendapat saya, ada beberapa kesalahpahaman tentang gula sintaksis yang dapat ditelusuri kembali ke kebingungan tentang semantik bahasa pemrograman. Alasannya seperti ini:
- Semantik suatu program adalah apa yang dihitung oleh suatu program.
- Kekuatan ekspresif bahasa pemrograman diwakili oleh perhitungan yang dapat dijelaskan dalam bahasa itu.
- Dua bahasa pemrograman yang dapat menggambarkan semua fungsi yang dapat dihitung (sebagaimana didefinisikan menggunakan mesin Turing) memiliki kekuatan ekspresif yang sama ...
- ... dan oleh karena itu hanya berbeda dalam sintaksis.
- Akibat wajar: ekstensi apa pun dari bahasa lengkap Turing hanya sintaksis (gula sintaksis) karena Anda tidak mengubah kekuatan ekspresif bahasa tersebut.
Garis penalaran di atas mengarah pada pernyataan umum seperti "gula sintaksis tidak dapat didefinisikan dengan benar", itu adalah "masalah selera", atau "setiap fitur bahasa pemrograman, setelah semua, hanya gula sintaksis".
Saya pikir masalah utama dalam argumen di atas adalah bahwa semantik tidak hanya tentang apa yang dapat dihitung oleh suatu program, tetapi juga tentang bagaimana itu dihitung , yaitu apa konstruksi primitif yang digunakan dan bagaimana mereka digabungkan.
Jadi misalnya, objek bukan gula sintaksis untuk konfigurasi bit yang mendasari dan transformasi bit, mereka adalah konstruk yang memungkinkan untuk memodelkan data dan operasi dan untuk menggambarkan komputasi. Komputasi dengan objek, metode, pemanggilan metode, tidak sama dengan komputasi dengan byte, register prosesor, alamat memori (bahkan jika kedua komputasi memiliki hasil yang sama, dan bahkan jika komputasi kedua digunakan untuk mengimplementasikan yang pertama).
Saya membuat deskripsi ini agak lama tapi saya pikir ini adalah aspek penting yang belum saya lihat dalam jawaban lain.
Intinya: gula sintaksis adalah sintaks alternatif (mungkin lebih mudah) untuk konstruksi yang sudah dalam bahasa dan sudah memiliki sintaks dan semantik yang terdefinisi dengan baik. Sintaksis baru (gula sintaksis) berbeda dari yang ada tetapi memiliki semantik yang sama . Jika Anda memperkenalkan konstruksi baru dalam bahasa dan sintaksis baru untuk itu, maka Anda tidak memiliki gula sintaksis.