Sebuah dokumen spesifikasi baru untuk S-expressions telah memperkenalkan ekstensi kontroversial yang secara fundamental menantang konvensi sintaks pemrograman tradisional. Library S-expr mengusulkan penambahan string multi-baris, komentar, dan yang paling menonjol, blok transposisi yang memungkinkan kode ditulis dalam tata letak dua dimensi dengan orientasi vertikal dan horizontal.
Dokumen tersebut, yang ditujukan untuk pemula dalam pemrograman, menyarankan bahwa ekstensi ini dapat meningkatkan keterbacaan kode dengan mengatasi masalah umum tanda kurung bersarang dalam bahasa bergaya Lisp. Namun, respons komunitas pemrograman sangat skeptis.
Perbandingan Sintaks String
Tipe | S-expr Tradisional | Ekstensi S-expr |
---|---|---|
String satu baris | "text" |
"text" |
String multi-baris | Tidak didukung | ***\ntext\n*** |
Komentar | ;comment |
//comment// atau ///\ncomment\n/// |
Blok 2D | Tidak didukung | *\nvertical\ntext\n* |
Prinsip S-Expression Tradisional Diserang
Ekstensi yang diusulkan melanggar prinsip-prinsip inti yang telah membuat S-expressions sukses selama beberapa dekade. S-expressions tradisional mengabaikan sebagian besar whitespace dan dapat diurai secara linear tanpa backtracking. Struktur 2D yang baru secara fundamental merusak model ini dengan mengharuskan parser melompat secara vertikal melalui kode dan membaca sepenuhnya blok multi-baris sebelum melanjutkan dengan elemen yang berdekatan.
Programmer Lisp berpengalaman sangat kritis terhadap pendekatan ini. Komunitas menunjukkan bahwa alat-alat yang ada dan optimisasi selama beberapa dekade telah dibangun di sekitar model parsing linear, membuat ekstensi ini tidak praktis untuk penggunaan dunia nyata.
Pertanyaan Keterbacaan
Mungkin aspek yang paling kontroversial adalah apakah sintaks yang diusulkan benar-benar meningkatkan keterbacaan. Spesifikasi mengubah ekspresi sederhana seperti (eq (mul (a a)) (pow (a 2)))
menjadi tata letak 2D yang kompleks yang mencakup beberapa baris dengan simbol asterisk yang menandai wilayah transposisi.
Anggota komunitas telah menyarankan alternatif yang jauh lebih sederhana untuk meningkatkan keterbacaan S-expression. Beberapa mengusulkan indentasi seperti pohon dasar atau bahkan notasi matematika seperti x*x = x^2
untuk contoh yang diberikan. Alternatif ini mempertahankan kesederhanaan esensial S-expressions sambil mengatasi masalah keterbacaan.
Solusi Keterbacaan Alternatif yang Disarankan oleh Komunitas
- Notasi pohon: Struktur indentasi sederhana yang menunjukkan hierarki
- Notasi matematika:
x*x = x^2
alih-alih(eq (mul (a a)) (pow (a 2)))
- Gaya Wisp: Sintaks berbasis indentasi tanpa tanda kurung
- Ekstensi Clojure: Vektor
[]
, hash map{}
, set{}
- Sweet-expressions: Pendekatan hibrida dengan penghapusan tanda kurung secara selektif
Solusi yang Ada Sudah Tersedia
Diskusi mengungkapkan bahwa fungsi serupa sudah ada dalam bentuk yang lebih praktis. Ekstensi sintaks 2D Racket menyediakan pemrograman berbasis tabel untuk kasus penggunaan tertentu, sementara Clojure telah berhasil memperluas S-expressions dengan vektor, hash map, dan set sambil mempertahankan kesederhanaan parsing.
Beberapa anggota komunitas mencatat bahwa berbagai upaya untuk meningkatkan S-expressions telah dicoba selama bertahun-tahun, tetapi pengembang secara konsisten kembali ke format asli karena keseimbangan optimal antara kesederhanaan dan kekuatan.
Vonis Komunitas
Meskipun beberapa orang menganggap pendekatan eksperimental ini menarik dari perspektif akademis, konsensus yang luar biasa adalah bahwa ekstensi yang diusulkan menciptakan lebih banyak masalah daripada yang mereka selesaikan. Kompleksitas yang diperkenalkan oleh parsing 2D, pelanggaran dari konvensi yang mapan, dan peningkatan keterbacaan yang dipertanyakan telah membuat sebagian besar orang menolak proposal tersebut.
Perdebatan ini menyoroti kekuatan abadi S-expressions tradisional dan kesulitan meningkatkan format yang telah membuktikan dirinya selama beberapa dekade penggunaan praktis. Untuk saat ini, tampaknya komunitas pemrograman akan tetap menggunakan pendekatan yang telah teruji untuk ekspresi simbolik.
Referensi: S-expr