Apa perbedaan antara bahasa pemrograman dan bahasa scripting? Sebagai contoh, pertimbangkan C versus Perl.
Apakah satu-satunya perbedaan bahwa bahasa scripting hanya membutuhkan penerjemah dan tidak memerlukan kompilasi dan penautan?
programming-languages
SS Hegde
sumber
sumber
A
dalam bahasa, kemudian menulis penerjemahB
dalam bahasa yang interpreterA
dapat mengeksekusi, maka seorang penerjemahC
dalam bahasa yang interpreterB
dapat mengeksekusi , dll. Pada dasarnya, itu semua masalah tipuan, yang kurang karena dasar teori perhitungan dan lebih berkaitan dengan masalah rekayasa praktis.Jawaban:
Saya pikir perbedaannya lebih terkait dengan penggunaan bahasa yang dimaksudkan.
Sebagai contoh, Python ditafsirkan, dan tidak memerlukan kompilasi dan penautan, seperti halnya Prolog. Saya akan mengklasifikasikan keduanya sebagai bahasa pemrograman.
Bahasa pemrograman dimaksudkan untuk menulis perangkat lunak. Mereka dirancang untuk mengelola proyek-proyek besar. Mereka mungkin dapat memanggil program, membaca file, dll., Tetapi mungkin tidak sebagus itu sebagai bahasa scripting.
Bahasa scripting tidak dimaksudkan untuk pengembangan perangkat lunak skala besar. Sintaks, fitur, pustaka, dll. Mereka lebih terfokus pada menyelesaikan tugas-tugas kecil dengan cepat. Ini berarti mereka kadang-kadang lebih "retas" daripada bahasa pemrograman, dan mungkin tidak memiliki semua fitur bagus yang sama. Mereka dirancang untuk membuat tugas yang biasa dilakukan, seperti iterasi melalui banyak file atau melakukan tugas sysadmin, untuk diotomatisasi.
Sebagai contoh, Bash tidak melakukan aritmatika dengan baik, yang mungkin akan membuat menulis perangkat lunak skala besar di dalamnya menjadi mimpi buruk.
Sebagai semacam patokan: Saya tidak akan pernah menulis pemutar musik di perl, meskipun saya mungkin bisa. Demikian juga, saya tidak akan pernah mencoba menggunakan C ++ untuk mengganti nama semua file dalam folder yang diberikan.
Baris ini menjadi blurrier dan blurrier. JavaScript, menurut definisi, "scripting" langauge, semakin banyak digunakan untuk mengembangkan "aplikasi web" yang lebih di bidang perangkat lunak. Demikian juga, Python awalnya sesuai dengan banyak sifat bahasa scripting tetapi melihat semakin banyak perangkat lunak yang dikembangkan menggunakan Python sebagai platform utama.
sumber
Artikel klasik tentang bahasa scripting adalah John K. Ousterhout's Scripting: Pemrograman tingkat tinggi untuk Abad ke-21 , diterbitkan dalam Computer 31 (3), 1998. Dia menggambar perbedaan antara bahasa scripting, di satu sisi, dan bahasa pemrograman sistem pada yang lain.
Ousterhout mengkarakterisasi bahasa pemrograman sistem sebagai telah berevolusi untuk menggantikan bahasa mesin untuk pemrograman. Mereka menyembunyikan detail yang membosankan seperti tugas register dan urutan pemanggilan subrutin, memberikan konstruksi sederhana untuk loop penulisan dan idiom aliran kontrol umum lainnya, dan menegakkan disiplin pengetikan. Mereka biasanya diimplementasikan oleh kompiler (di depan waktu). Bahasa-bahasa ini dimaksudkan untuk menulis perangkat lunak dari bawah ke atas. Contohnya adalah C, C ++, dan Java.
Sebaliknya, bahasa scripting, menurut Ousterhout, mulai dari premis bahwa sudah ada program yang berguna di luar sana, biasanya ditulis dalam bahasa pemrograman sistem. Bahasa scripting, seperti Perl, Python, Tcl, Visual Basic, dan shell Unix, menyediakan alat untuk menggabungkan program yang ada ini ke dalam program baru. Ousterhout mengkarakterisasi bahasa scripting sebagai "tanpa ketik" (termasuk apa yang oleh banyak orang disebut pengetikan dinamis), dan sebagai penekanan perkembangan cepat; mereka biasanya diimplementasikan oleh penerjemah.
Sekarang, kita harus berhati-hati untuk tidak berasumsi bahwa model konseptual seorang penulis adalah otoritatif. Meskipun kami para ilmuwan komputer suka berpura-pura bahwa kami adalah ahli matematika yang memberikan definisi yang tepat untuk semua istilah, dalam praktiknya kebanyakan terminologi komputasi secara sosial dibangun dengan makna fuzzy dan heterogen; ada konsensus kasar di tingkat yang sangat tinggi tentang sebagian besar istilah, tetapi detail sering bergantung pada siapa yang menulis. Jadi, ambil artikelnya, jawaban saya, dan semua jawaban lainnya di sini dengan banyak garam.
Saya pribadi akan membantah keberadaan bahasa pemrograman "normal", seperti yang Anda sebutkan dalam pertanyaan Anda. Namun, saya pikir konsep yang Anda coba sampaikan kurang lebih sesuai dengan bahasa pemrograman sistem Ousterhout.
sumber
Semua bahasa scripting juga bahasa pemrograman. Kebalikannya tidak benar. Bahasa yang "hanya membutuhkan juru bahasa" adalah bahasa yang ditafsirkan (sebagai lawan dari bahasa yang dikompilasi - perhatikan bahwa beberapa bahasa, seperti Jawa, termasuk dalam kedua kategori).
Bahasa yang dikategorikan sebagai bahasa scripting menyiratkan bahwa bahasa itu berguna sebagai bahasa "lem". Skrip tidak cenderung berupa program dengan fitur lengkap, tetapi sebaliknya mengisi celah di antara bagian-bagian lain dari perangkat lunak.
Skrip biasanya digunakan untuk menghubungkan beberapa program secara bersamaan, untuk melakukan tugas-tugas kasar dengan sangat cepat / mudah, atau bahkan dalam lingkungan yang tertanam di mana masalah kinerja dan keselamatan telah diabstraksikan ke bahasa tingkat yang lebih rendah. Penekanan bahasa scripting cenderung pada pengurangan waktu pengembangan, karenanya alasan sebagian besar ditafsirkan dan tingkat yang sangat tinggi.
sumber
Set 'bahasa scripting' adalah subset dari set 'bahasa pemrograman'. Perbedaan antara C dan Perl adalah perbedaan antara bahasa pemrograman sistem dan bahasa aplikasi dan antara bahasa yang ditafsirkan dan bahasa yang dikompilasi.
Bahasa pemrograman sistem tingkat rendah dan berorientasi pada manajemen memori, IO yang dapat diprediksi, dan sebagainya. Bahasa aplikasi berorientasi pada penyelesaian cepat masalah tingkat yang lebih tinggi, seperti 'pengaturan baca dari file, soket terbuka, dan proses permintaan sesuai pengaturan'.
Dengan demikian, bahasa aplikasi cenderung tingkat yang lebih tinggi, kemudian bahasa sistem, yaitu memberikan sejumlah besar fasilitas abstraksi dan pembantu bawaan dan sering menambahkan semacam manajemen memori otomatis.
Program dalam bahasa yang dikompilasi diproses ke beberapa kode sepenuhnya sebelum eksekusi program. Bahasa scripting diterjemahkan secara dinamis dalam proses eksekusi dan seringkali menyertakan fasilitas untuk pembuatan kode dinamis dan termasuk file dengan kode sumber.
Dengan demikian, semua bahasa skrip adalah bahasa aplikasi, tetapi kebalikannya tidak benar. Bahasa sistem selalu dikompilasi bahasa, karena bahasa scripting biasanya menyertakan fitur, yang tidak pragmatis untuk diterapkan dalam hal bahasa itu sendiri. Perhatikan, bagaimanapun, bahwa perbedaan scripting (ditafsirkan) / dikompilasi lebih tentang implementasi: untuk beberapa bahasa kedua jenis implementasi mungkin ada, seperti untuk haskell.
sumber
Lainnya telah membahas atribut yang cenderung dikaitkan dengan bahasa scripting dan dengan bahasa non-scripting. Itu membantu untuk mendapatkan perasaan tentang apa yang orang maksud ketika mereka menggunakan istilah "bahasa scripting", tapi saya merasa lebih penting untuk memahami bahwa tidak ada batas yang didefinisikan dengan jelas: Dua orang berpengetahuan bisa tidak setuju tentang apakah bahasa tertentu X adalah bahasa scripting. Istilah "bahasa scripting" tetap memiliki kegunaan karena ada kesepakatan luas tentang bahasa yang jauh di dalam, atau jauh di luar, batas.
Bandingkan "mobil keluarga" vs. "mobil sport", atau "majalah" vs. "surat kabar". Saya berani mengatakan bahwa akan sulit untuk menghasilkan aturan 100% andal untuk membedakan setiap mobil keluarga dari setiap mobil sport yang dapat digeneralisasikan (artinya pada dasarnya tidak sama dengan menghitung semua mobil yang ada di setiap kategori) dan setidaknya berpotensi obyektif ( artinya akan diterima oleh semua orang). Tetapi istilah ini masih berguna dalam praktiknya, karena walaupun ada beberapa kasus yang sulit untuk diputuskan, banyak mobil jelas dalam satu kategori dan bukan yang lain.
sumber
Perbedaan yang belum saya lihat disebutkan adalah bahwa ketika digunakan sebagaimana dimaksud, waktu eksekusi sebagian besar skrip akan didominasi oleh operasi "makroskopik", dan kinerja operasi mikroskopis tidak akan memiliki efek signifikan pada waktu eksekusi keseluruhan. Misalnya, jika program animasi penelusuran sinar mungkin menyertakan bahasa scripting dengan pernyataan "render image", skrip untuk menghasilkan 240 frame animasi mungkin menghabiskan empat jam dalam pernyataan "render image", dan total empat detik melakukan yang lainnya. Bahkan jika seseorang mempercepat segalanya di luar mesin rendering dengan faktor sejuta, itu akan memiliki efek yang lebih kecil pada kinerja keseluruhan daripada mempercepat mesin rendering sebesar 0,1%.
sumber