Salah satu profesor saya mengatakan "sintaksnya adalah UI dari bahasa pemrograman", bahasa seperti Ruby memiliki keterbacaan yang tinggi dan terus berkembang, tetapi kami melihat banyak programmer produktif dengan C \ C ++, sehingga ketika programmer benar-benar peduli bahwa sintaksis harus bisa diterima?
Saya ingin mengetahui pendapat Anda tentang hal itu.
Penafian: Saya tidak mencoba memulai argumen. Saya pikir ini adalah topik diskusi yang bagus.
Pembaruan: Ini ternyata menjadi topik yang bagus. Saya senang Anda semua berpartisipasi di dalamnya.
programming-languages
syntax
Saif al Harthi
sumber
sumber
Jawaban:
Ya itu. Jika Anda ragu, gunakan APL , atau J , atau Brainfuck , atau bahkan Lisp atau Forth yang sederhana dan sederhana, dan cobalah untuk memahami program yang tidak sepenuhnya sepele di dalamnya. Kemudian bandingkan dengan eg Python.
Kemudian bandingkan Python yang sama (atau Ruby, atau bahkan C #) dengan hal-hal seperti Cobol atau VB6.
Saya tidak mencoba mengatakan bahwa sintaksis rambut itu buruk dan sintaksis seperti bahasa alami itu baik dalam semua keadaan. Tapi sintaksis obrolan memang membuat perbedaan besar. Semua dalam semua, semua yang dapat Anda tulis dalam bahasa pemrograman yang paling indah, Anda juga dapat menulis sebagai program mesin Turing - tetapi Anda biasanya tidak mau, bukan?
sumber
Dalam praktiknya saya pikir itu penting. Keterbacaan sudah dibahas di atas. Masalah lain mungkin berapa banyak penekanan tombol yang diperlukan untuk mengekspresikan ide / algotithm? Namun masalah lain adalah betapa mudahnya untuk kesalahan ketik yang sederhana menjadi sulit bagi mata manusia untuk ditangkap, dan berapa banyak kerusakan yang dapat ditimbulkannya.
Saya juga merasa berguna dalam beberapa konteks untuk menganalisis, dan / atau untuk menghasilkan fragmen kode melalui program komputer lain. Kesulitan menguraikan bahasa, dan / atau menghasilkan kode yang benar maka secara langsung berdampak pada berapa banyak upaya yang diperlukan untuk membuat / memelihara alat tersebut.
sumber
Saya percaya profesor Anda mengacu pada gula sintaksis .
Jadi apa yang disiratkan profesor Anda, adalah bahwa kode / sintaksis apa pun yang ditulis dalam satu bahasa pemrograman, dapat diekspresikan dalam bahasa lain yang sama - atau bahkan bahasa yang sama.
Robert Martin, menarik dari teorema Pemrograman Terstruktur , mengabstraksikan apa yang dilakukan oleh para programmer secara mendasar dengan bahasa pemrograman pada keynote utamanya di RailsConf 2010: Robert Martin (video youTube, lihat setelah tanda 14 menit, meskipun saya merekomendasikan semuanya):
Itulah yang dilakukan oleh semua programmer, dari satu bahasa pemrograman ke yang lain, hanya dalam sintaks yang berbeda atau antarmuka pengguna (UI). Ini yang saya duga adalah maksud profesor Anda, jika dia berbicara secara abstrak tentang bahasa pemrograman.
Jadi intinya , sintaksis tidak masalah . Tetapi jika Anda ingin lebih spesifik, maka jelas bahasa dan sintaksis tertentu lebih cocok untuk tugas-tugas tertentu daripada yang lain, di mana Anda bisa berpendapat bahwa sintaksis penting.
sumber
Iya dan tidak.
Ada beberapa aspek berbeda untuk sintaksis.
Keterbacaan telah disebutkan.
Ekspresivitas adalah kasus yang menarik. Saya akan menggunakan fungsi-lewat sebagai contoh, karena itu semacam titik belok rasa sakit semantik / sintaksis.
Mari kita ambil C ++ sebagai contoh. Saya dapat membuat fungsi urutan pertama setelah mode ini:
Ungkapan khusus ini biasanya digunakan dalam Elemen - elemen Pemrograman Stepanov .
Di sisi lain, saya bisa meniru itu di Common Lisp dengan sesuatu seperti ini :
Atau, di Perl -
Atau, dengan Python -
Ini semua memiliki - pada dasarnya - konten semantik yang sama, meskipun contoh C ++ membawa beberapa jenis metadata. Bahasa mana yang mengekspresikan ide untuk melewati fungsi tingkat tinggi yang terbaik? Lisp umum nyaris tidak membuat variasi sintaksis. C ++ membutuhkan kelas yang akan dibuat hanya untuk 'membawa' fungsi. Perl cukup mudah membuat beberapa tingkat diferensiasi. Begitu juga dengan Python.
Pendekatan mana yang paling sesuai dengan domain masalah? Pendekatan mana yang terbaik yang bisa mengekspresikan pikiran di kepala Anda dengan paling sedikit 'ketidakcocokan impedansi'?
Parsability adalah - dalam pikiran saya - masalah besar. Secara khusus, saya merujuk pada kemampuan IDE untuk mengurai dan memotong bahasa tanpa membuat kesalahan. Memformat ulang bermanfaat. Bahasa yang dibatasi tanda cenderung mengurai dengan baik - ruby / c / pascal, dll.
Pertimbangkan juga - sistem utama dari segala jenis telah dibuat dengan setiap bahasa yang serius untuk menyelesaikan masalah dunia nyata. Meskipun sintaks adalah penghalang untuk mengekspresikan beberapa hal, itu adalah penghalang yang bisa diatasi. Turing kesetaraan dan semua itu.
sumber
Sintaks jelas penting, meskipun Anda cenderung lebih memperhatikannya ketika itu tidak intuitif dan mendorong bug. Misalnya, lelucon "bug terakhir dunia" yang terkenal:
sumber
if(RED = AlertCode)
tidak boleh dikompilasi karena RED konstan (atau seharusnya!)LaunchNukes
prosedur, dan tidak pernah memohonnya. Krisis dihindari!RED
. Jika 0, makaLaunchNukes()
tidak akan pernah dipanggil.Sintaks memang penting, dan saya bisa memberi Anda dua contoh pendukung: Dylan, yang merupakan Lisp dengan sintaksis yang lebih konvensional, dan Liskell, yang Haskell dengan sintaks mirip Lisp. Dalam setiap kasus, varian bahasa diusulkan yang memiliki semantik yang sama persis, tetapi sintaksisnya sangat berbeda.
Dalam kasus Dylan, dianggap bahwa menjatuhkan ekspresi-s demi sesuatu yang lebih konvensional akan membantu menarik lebih banyak programmer. Ternyata sintaksis bukan satu-satunya hal yang mencegah programmer menggunakan Lisp.
Dalam kasus Liskell, diperkirakan bahwa menggunakan ekspresi-s akan memungkinkan penggunaan makro yang lebih mudah. Ternyata makro benar-benar tidak diperlukan di Haskell, sehingga percobaan tidak berhasil.
Begini masalahnya: jika sintaks tidak masalah bagi siapa pun, percobaan tidak akan dicoba.
sumber
Jawabannya mungkin dalam memisahkan apa yang "penting" menjadi faktor komputer dan faktor manusia . Ada banyak faktor manusia dalam sintaksis:
Sejauh menyangkut komputer, satu-satunya masalah sintaksis adalah apakah ada ambiguitas yang perlu diselesaikan, dan berapa banyak waktu yang diperlukan untuk tokenize / parse kode pada saat kompilasi / interpretasikan - dan itu hanya dalam kasus ini dari yang terakhir di mana overhead parsing adalah masalah yang signifikan.
Mungkin itulah sebabnya Anda akan selalu mendapat jawaban "ya dan tidak" untuk pertanyaan ini - karena ada dua aspek di dalamnya.
sumber
Tanpa sintaksis, kita tidak akan memiliki "templat" yang sama untuk berkomunikasi, pada tingkat manusia, maksud dari blok kode. Sintaks menyediakan kerangka kerja umum dari mana penyusun dapat distandarisasi; metode dapat dibagikan; pemeliharaan dapat disederhanakan.
sumber
Saya pikir apa yang benar-benar penting adalah akses API , dan ketersediaan fungsi tingkat rendah (seperti kontrol memori dan penguncian) bila diperlukan. Sebagian besar bahasa lain dilengkapi dengan fitur-fitur ini. Masalahnya adalah, ketika Anda membutuhkan fungsionalitas tambahan, Anda sering harus menggunakan bahasa seperti C untuk mengimplementasikannya. Dan itu adalah antarmuka C rumit dengan bahasa yang Anda gunakan.
Untuk semuanya kecuali pengembangan web (dan matematika) saya telah menemukan bahwa C / C ++ masih merupakan bahasa sistem operasi dan aplikasi. Inilah yang didukung sebagian besar waktu untuk pengembangan aplikasi lintas-platform multi-threaded, preforming, dan benar. Dan sintaks C tidak apa-apa. Sangat sederhana dan relatif bertele-tele. Sintaks yang luar biasa tidak terlalu penting. Ketersediaan daya dan API tidak. Kita semua perlu berinteraksi dengan kode orang lain (yang sebagian besar waktu ditulis dalam C atau turunannya).
sumber
Sintaks jelas penting. Ini sangat berharga jika sintaks bahasanya cukup fleksibel untuk memungkinkan Anda membuat Bahasa Khusus Domain yang mudah dibaca untuk aplikasi Anda. Jika Anda meragukan hal ini, bayangkan saja melakukan masalah aljabar dalam bahasa Latin prosa, seperti yang dilakukan sebelum abad ke-18, atau bayangkan melakukan kalkulus tanpa notasi Leibniz yang sekarang dikenal. Tentu, teks kalkulus tidak dapat dibaca oleh seorang pemula, tetapi dengan latihan kita dapat menggunakan kalkulus dan notasi Leibniz untuk dengan cepat menyelesaikan kelas masalah yang membutuhkan halaman matematika dengan metode klasik. Pemrograman hanyalah sedikit matematika. Notasi yang mudah digunakan, dekat dengan domain masalah, dapat membuat perbedaan besar dalam produktivitas.
sumber
Berikut adalah program yang menghitung fakultas 6:
Sintaksnya minimal:
Tampaknya ada kepercayaan umum bahwa sintaks yang membuat bahasa sulit. Seperti yang sering dipercaya oleh orang banyak, justru kebalikannya yang benar.
Perhatikan bahwa sintaks LISP hanya dapat dibaca (jika ada) karena memiliki lebih banyak sintaks daripada yang di atas. Jadi, jika penggemar LISP memberi tahu Anda bahwa "sintaksis tidak penting", minta mereka untuk konsekuen dan coba kalkulus SKI. Mereka harus mengakui bahwa sintaks sedikit tidak terlalu buruk.
sumber
Saya tidak berpikir itu penting di luar preferensi pribadi. Semua hal (kinerja, kemampuan, dll) sama, maka saya bisa melihat mengapa orang lebih menekankan sintaksis bahasa tetapi memilih untuk melewati kinerja bahasa seperti c / c ++ atau bahasa lain yang lebih cocok untuk pekerjaan itu hanya karena sintaks akan tampak seperti ide yang buruk di sekitar.
sumber
Ya, sintaks penting, meskipun sebenarnya hanya untuk keterbacaan. Membandingkan:
(Ya itu Python) dengan
(Ya, itu bahasa yang baru saya buat) Keduanya akan melakukan hal yang persis sama, dengan cara yang sama, tetapi sintaksnya berbeda, dan Python lebih mudah dibaca. Jadi ya, sintaks jelas penting. Bahkan "gula sintaksis" penting.
Lebih mudah dibaca daripada
sumber
Ya tentu.
Jika Anda ingin menyalakan api besar, tanyakan pada orang-orang, di mana mereka meletakkan gelang pembuka dalam bahasa C-like. maksudku
VS
atau bahkan VS
Dan ini hanya bahasa yang sama! Juga, tanyai mereka tentang spasi, tempat mereka meletakkannya (nama fungsi dan gelang, operator, dll.).
1000 jawaban dijamin!
sumber
Sintaks memang penting. Namun di hari ini dan usia saya akan mengatakan itu penting hampir seluruhnya karena keterbacaan dan tidak benar-benar dalam hal jumlah penekanan tombol yang dibutuhkan. Mengapa?
Yang mengatakan, jika terlalu bertele-tele maka itu bisa sampai pada titik di mana itu mempengaruhi keterbacaan. Saya lebih suka melihat sesuatu seperti:
Untuk:
... kapan saja!
sumber
Sintaks penting bagi mereka yang mempelajarinya, semakin rendah penghalang untuk masuk bahasa yang lebih populer mungkin awalnya. Tetapi jika bahasa itu sulit atau tidak mungkin untuk mengekspresikan diri Anda dengan kaya dan ringkas itu akan mulai layu dalam popularitas.
Sangat singkat dan buram (Perl) sama buruknya dengan terlalu banyak bertele-tele dan bertele-tele (AppleScript).
Perlu ada keseimbangan, hambatan masuk yang lebih rendah, produktivitas tinggi, dan perawatan yang mudah.
sumber
Hal lain yang perlu dipertimbangkan adalah bahwa bahasa pemrograman dengan sintaksis yang lebih baik lebih mudah diurai, sehingga membuat kompiler lebih mudah untuk menulis, lebih cepat, dan lebih tidak rentan terhadap bug.
sumber
parse.y
di dalam Ruby tidak setuju. Ada alasan mengapa setiap satu dari 7 implementasi Ruby siap-pakai atau segera produksi menggunakan parser yang sama , dan setiap implementasi Ruby tunggal yang pernah mencoba mengembangkan parser mereka sendiri telah gagal.Sederhananya: sintaksis seperti itu tidak masalah. Semantik yang bisa Anda ungkapkan lewat itu penting.
sumber