Saya telah mencari bahasa pemrograman praktis yang tidak memiliki kata kunci yang dicadangkan, tetapi saya belum beruntung menemukannya.
Saya sedang mengerjakan bahasa pemrograman untuk perbaikan dan hiburan saya sendiri dan saya belum perlu memasukkan kata kunci apa pun, itulah yang mendorong saya untuk mencari dan pertanyaan:
Saya tidak melihat kemudahan bagi penulis kompiler sebagai hal penting bagi pengguna akhir bahasa. Komputer sekarang cukup kuat untuk dapat menyimpulkan makna dari konteks. Tidak lebih dari seorang penulis perlu memberi label pada kata benda, kata kerja dan semacamnya saat menulis novel, mengapa seorang programmer harus memberi label fungsi dan variabel dengan function x() {}
atau set x = 1
atau var x = 1
dll; ketika saya dapat menyimpulkan dari konteks pernyataan bahwa itu adalah deklarasi fungsi atau doa atau bahwa label adalah tugas untuk nilai atau referensi ke nilai label?
Berikut ini adalah contoh nyata dari apa yang dilakukan parser saya saat ini, tidak perlu kata kunci yang dipesan untuk mendukung hal-hal umum yang biasanya memiliki banyak suara seperti func
atau function
atau dec
atau tidak.
Deklarasi Fungsi
sum3(a,b,c) -> a + b + c.
Doa Fungsi
x = sum3(1,2,3).
Bernama Fungsi Anonim x
x = (a,b,c) -> a + b + c.
y = x(1,2,3).
Saya ingin tahu mengapa kata kunci yang penting untuk bahasa pemrograman yang sukses?
Jawaban:
MUMPS sangat sukses, digunakan secara luas dalam asuransi dan perawatan kesehatan dan tidak memiliki kata-kata cadangan. Saya akan mengatakan mereka membantu dalam hal menulis kode yang lebih jelas tetapi mereka tidak sepenuhnya diperlukan. APL adalah contoh lain. APL melihat digunakan untuk skrip satu kali di Industri Nuklir antara lain. J , anggota keluarga APL juga tidak memiliki kata kunci.
Kata kunci membantu penulis kompiler menerapkan parsing lebih mudah. APL terkenal asosiatif yang benar. Mereka juga membantu memperkuat konvensi dan meningkatkan keterbacaan. APL tidak dikenal karena sangat mudah dibaca oleh kebanyakan orang.
sumber
Salah satu bahasa yang terkenal tanpa kata kunci adalah Lisp. Hal yang paling dekat dengan kata kunci disebut bentuk khusus - jumlah mereka dapat bervariasi di antara dialek - yang mendapat perlakuan khusus dari penerjemah. Terlepas dari itu mereka tidak dapat dibedakan dari fungsi biasa dalam hal jika mereka digunakan, dengan pengecualian bahwa mereka tidak dapat didefinisikan ulang (setidaknya dalam Lisps saya kenal).
Ini menghasilkan sintaks yang sederhana (tetapi paren-berat), dan merupakan salah satu hal yang memungkinkan Lisp memiliki sistem makro yang kuat. Di sisi lain, Lisp sering dikatakan sulit dibaca. APL dan MUMPS, terlebih lagi, saya telah melihat keduanya digambarkan setengah jalan ke Brainf * ck. Kata kunci memang membantu di departemen ini dan membuat membaca kode lebih mudah bagi kita manusia juga.
Jadi saya tidak akan mengatakan kata kunci diperlukan untuk bahasa yang sukses, tetapi mereka pasti membantu bahasa untuk menjadi sukses.
sumber
if
dalam C akan menjadi pengidentifikasi yang valid jika tidak didefinisikan sebagai khusus (kata kunci). Ini berarti bahwaif
itu bukan pengidentifikasi danif = 10
memberikan kesalahan sintaksis. Jika saya tidak salah, sintaks minimal Lisp ini tidak membedakandefun
darif
,x
,y
dan+
di(defun f (x y) (+ x y))
.if
adalah nama variabel yang valid dalam Common Lisp (dan Lisp-2s lainnya)(defparameter if nil)
tidak akan merusak apa pun dan dapat digunakan dalam bentuk seperti(unless if (setf if t))
(defun if ...)
akan gagal. Mengambil catatan dari komentar ke akun dan mengedit jawabannya. Saya dapat setuju bahwa formulir khusus bukan kata kunci pada tingkat yang sama seperti di C misalnya, masih mereka yang paling dekat dengan Lisp.TCL tidak memiliki kata kunci, dan memang hanya 12 aturan sintaksis. sementara itu tidak sepopuler dulu, ia memiliki ceruk dengan harapan dan tertanam dalam ECAD dan router sehingga tentu dianggap sebagai praktis untuk pikiran saya.
Saya juga berpikir itu mungkin menunjukkan mengapa banyak bahasa tidak mengikuti rute ini. Ya sangat mungkin untuk menulis parser TCL (bisa dibilang lebih mudah daripada banyak bahasa lain) namun Anda tidak dapat menulis tata bahasa BNF yang sangat berguna untuk bahasa tersebut dan banyak orang tampaknya kesulitan mempelajari bahasa tersebut. Saya menduga ini setidaknya sebagian karena kurangnya kata kunci.
sumber
Apakah ini berarti Anda menginginkan tata bahasa yang tidak bebas konteks? Semoga berhasil.
Itu bukan pertanyaan tentang menjadi kuat atau tidak. Ada aturan abadi tentang bahasa yang tidak berubah - aturan matematika. Ini, dan fakta bahwa bahasa pemrograman harus mudah secara sintaksis akan membuat aturan CFG untuk beberapa dekade mendatang.
Btw., Di Haskell seperti sintaks, Anda hanya menulis sesuatu seperti
untuk mendefinisikan suatu fungsi. Tetapi perhatikan bahwa "kata kunci" dalam hal ini adalah '='. Jika Anda melewatkannya, hal-hal buruk akan terjadi di parser.
Tapi ini adalah titik di mana saya setuju dengan Anda, saya menemukan ini jauh lebih intuitif daripada semua kata kunci def, dcl, fun, fn, function atau what-not yang memperkenalkan fungsi dalam bahasa lain.
Namun, tata bahasa ini dapat ditulis dalam LALR tua sederhana (1), tidak ada makna yang "disimpulkan dari konteks" di sini.
sumber
{ int x = 0; x = "HELLO"; }
harus menghasilkan pohon parse tetapi ketika kompiler mencari x dalam tugas kedua ia melihat bahwa ia telah dinyatakan sebagai int dan mengeluarkan kesalahan ketik. Jadi program ditolak bahkan jika struktur CF-nya benar.Sejauh yang saya tahu, Smalltalk adalah bahasa yang memiliki kata kunci paling sedikit (jika saya tidak menghitung bahasa seperti Brainfuck). Smalltalk kata kunci
true
,false
,nil
,self
,super
danthisContext
.Saya telah mendesain bahasa, terinspirasi dengan smalltalk, yang tidak memiliki kata kunci. Tetapi setelah beberapa waktu menggunakannya saya akhirnya menambahkan beberapa kata kunci, sebagian besar untuk gula sintaksis.
Jadi, pendapat saya adalah bahwa bahasa tanpa kata kunci adalah mungkin, tetapi itu tidak terlalu praktis dan itulah alasan mengapa semua bahasa populer memiliki kata kunci.
sumber
true
,false
dannil
dapat didefinisikan sebagai metode pada penerima implisit itu, dan, mengingat kemampuan refleksi, tiga lainnya mungkin juga.true
,false
dannil
merupakan nilai-nilai terkenal yang disediakan oleh lingkungan danself
,super
danthisContext
merupakan variabel yang tidak dapat Anda tetapkan tetapi nilainya berubah akibat eksekusi.Anda tampaknya bekerja di bawah asumsi yang salah, bahwa ada kata kunci untuk mempermudah kompilator. Walaupun mereka membuat segalanya lebih mudah bagi kompiler, mereka memiliki manfaat yang jauh lebih penting: mereka membuat segalanya lebih mudah bagi orang yang membaca kode .
Ya, Anda bisa melihat sekelompok konteks dan mencari tahu bahwa Anda sedang melihat deklarasi fungsi atau deklarasi variabel, tetapi tergantung pada konteks dan kompleksitas kode yang terlibat, yang bisa memakan waktu lama untuk mencari tahu . Atau, Anda dapat memiliki kata kunci yang berguna di sana seperti function atau var , dan Anda segera tahu apa yang Anda lihat.
Ya, mereka membuat kode lebih rumit untuk ditulis , tetapi mengingat bahwa program menghabiskan lebih banyak waktu dalam pemeliharaan daripada dalam produksi, dan bahwa kode mereka dibaca, diperdebatkan dan dipelihara lebih banyak daripada yang dibuat, mencoba merancang bahasa Anda untuk membuatnya mudah untuk menulis daripada mudah dibaca adalah kasus klasik dari optimasi prematur yang berbahaya.
Juga, jangan meremehkan konsep yang membuat pekerjaan kompiler lebih mudah. Semakin mudah mengurai, semakin cepat kode Anda dikompilasi, yang berarti siklus edit-build-debug semakin cepat, yang berarti produktivitas Anda naik.
Ketika Anda memiliki basis kode yang besar dan kompleks, itu bisa menghasilkan perbedaan produktivitas yang tidak sepele. Misalnya, tempat saya bekerja, kami memiliki program di tempat kerja yaitu sekitar 4 juta baris Delphi. Kami memiliki modul lain yang sekitar 300.000 baris C ++. Keduanya membutuhkan waktu yang sama untuk dikompilasi. (Sekitar 3 menit.) Jika kami memiliki 4 juta baris C ++, mungkin diperlukan satu jam untuk membuatnya!
sumber
Ada beberapa contoh langka.
APL hanya menggunakan simbol - tetapi banyak dari mereka! Anda memerlukan keyboard khusus untuk menggunakan bahasa tersebut.
Lihat artikel wikipedia ini
CORAL 66 - memiliki kata kunci tetapi hanya mengenalinya jika dikutip dengan tanda kutip tunggal.
PL / 1 juga memiliki kata kunci - tetapi Anda juga dapat menggunakannya sebagai nama variabel atau prosedur.
Secara keseluruhan pertanyaan Anda sedikit seperti menanyakan "mengapa bahasa yang digunakan memiliki kata-kata?".
sumber
Alasan utamanya adalah lebih mudah bagi manusia dan komputer untuk menguraikan. Membedakan bahasa yang rumit tanpa kata kunci akan membutuhkan banyak simbol sebagai sintaksis, dan itu akan membingungkan secara besar-besaran dan tidak perlu. Jauh lebih mudah dibaca
function
daripada$!{}
. Dan konteks tidak menyelesaikan semua ambiguitas.sumber