Bahasa Pemrograman vs Bahasa Markup vs Bahasa Scripting

38

Sampai sekarang saya tidak tahu perbedaan KUNCI antara ketiganya. Ketika seseorang bertanya kepada saya tentang ini, saya hanya memberi tahu mereka bahwa C # adalah bahasa pemrograman, HTML dan XML adalah Bahasa Markup, dan JavaScript serta VBScript adalah bahasa scripting. Tetapi apa perbedaan utama yang membedakan mereka dari satu sama lain?

rcadaoa
sumber
Jangan lupa bertanya bahasa!
Kyle Delaney

Jawaban:

38

Biarkan saya mencoba menemukan garis pemisah antara ketiga jenis bahasa ini. Tentu saja, akan ada banyak pengecualian dan contoh tandingan, karena ini hanya pendapat saya.

  • Bahasa markup digunakan untuk mengontrol penyajian data, seperti "mewakili nama pengguna ini sebagai daftar peluru atau sebagai tabel".

  • Bahasa scripting digunakan untuk memediasi antar program untuk menghasilkan data. Ini khususnya berlaku untuk bahasa skrip shell seperti bash, tetapi jika Anda merenungkannya, Python atau Perl juga berasal dari kebutuhan untuk menyelesaikan tugas di UNIX tanpa menulis program dalam C. Program yang Anda kontrol sebagian besar waktu dalam bahasa tersebut adalah penerjemah bahasa itu sendiri , yang menyelesaikan tugas-tugas umum untuk Anda. Program khas lain yang berinteraksi dengan Anda adalah server basis data, atau server web.

    Kembali ke metafora daftar pengguna, dalam bahasa skrip Anda meminta database "beri saya semua nama pengguna", lalu minta server web "kirim daftar pengguna ini ke pemohon ini".

  • Bahasa pemrograman digunakan untuk mengubah data . Ia melakukannya dengan membuat instruksi CPU yang menulis ulang data input ke dalam output; semoga output yang diinginkan . Contoh transformasi data adalah menghitung jumlah dari sejumlah penambahan, atau menyelesaikan sistem persamaan diferensial dari serangkaian kondisi, atau menulis dan membaca dari struktur mirip pohon dengan cara yang konsisten diberikan urutan kemungkinan pertanyaan simultan .

    Kembali ke metafora daftar pengguna, dalam bahasa pemrograman Anda menulis cara melintasi tabel catatan, ekstrak dari setiap rekaman bidang "nama", dan kembalikan semuanya ke pemohon.

Perhatikan bahwa bahasa scripting adalah subset dari bahasa pemrograman yaitu bahasa dapat berupa "scripting" dan "pemrograman": Python secara teratur digunakan untuk "memediasi antar program", dan juga untuk "mengubah data". Ada bahasa lain seperti Java yang jarang digunakan untuk "memediasi antara program", bukan karena ini tidak mungkin tetapi karena mereka tidak dirancang untuk membuatnya mudah. Fitur utama dari bahasa scripting adalah bahwa ia dapat mengatur program lain, seperti halnya skrip memberikan isyarat kepada aktor untuk memulai bagiannya.

logc
sumber
7
Bahasa scripting secara resmi merupakan subkelas dari bahasa pemrograman. (Saya juga telah melihat bahasa seperti C dan Java sepenuhnya ditafsirkan, dengan REPL; penghalang bocor dua arah ...)
Donal Fellows
1
@DonalFellows: Anda benar. Saya menjawab dengan itu dalam pikiran, tetapi saya belum secara eksplisit menggunakan ungkapan "satu adalah bagian dari yang lain". Juga, saya belum menyiratkan bahwa satu kategori ditafsirkan dan yang lainnya tidak, karena saya tahu itu adalah perbedaan yang lemah.
logc
1
@DonalFellows: Saya telah mengedit jawaban saya untuk secara eksplisit menyebutkan bahwa satu adalah bagian dari yang lain.
logc
1
Saya mendukung jawaban ini karena menjadi satu-satunya (sejauh ini) yang mengklaim bahwa bahasa markup adalah bahasa yang menggambarkan struktur data.
Idan Arye
3
@ JörgWMittag: Saya tahu akan ada pengecualian, itu sebabnya saya mulai dengan "akan ada banyak pengecualian" :) Jika tidak, di mana dalam jawaban saya apakah saya menyiratkan bahwa bahasa scripting tidak dikompilasi? Saya mencoba berkonsentrasi pada tujuan bahasa secara tepat untuk menghindari jebakan itu ...
logc
11

Bahasa markup adalah bahasa yang digunakan untuk mewakili data terstruktur. Sebagai contoh, HTML memungkinkan untuk menentukan bahwa beberapa bagian dari dokumen adalah judul atau bagian lain adalah daftar, dengan perbandingan dengan dokumen teks datar.

Bahasa markup tidak dianggap sebagai bahasa pemrograman¹.

Perbedaannya dengan bahasa pemrograman tidak selalu jelas. Misalnya, XSLT adalah bahasa Turing-complete², tetapi didasarkan pada XML yang merupakan bahasa markup.

Wikipedia sendiri melakukan upaya penting untuk menghindari kualifikasi XSLT sebagai bahasa pemrograman atau bahasa markup. Itu hanya mengatakan itu adalah bahasa deklaratif, dan itu menggunakan "teknik optimasi yang ditemukan dalam bahasa pemrograman fungsional dan bahasa query database".

Bahasa scripting adalah bahasa pemrograman yang ditafsirkan, bukan dikompilasi, yang berarti bahwa bahasa scripting mewakili subset dari semua bahasa pemrograman.

Tidak selalu jelas apakah suatu bahasa pemrograman adalah bahasa scripting, seperti tidak selalu jelas apakah suatu bahasa dikompilasi atau ditafsirkan. Sebagai contoh, PHP dapat dikompilasi ke bytecode antara dan kemudian diubah menjadi kode mesin oleh kompiler JIT, sementara masih dianggap sebagai bahasa scripting⁴.

Lihat juga: Memisahkan Meta-Rambut oleh Steven Lott.


¹ “XML bukan bahasa pemrograman”. Lihat XML dalam 10 poin .

² "XSLT adalah bahasa lengkap Turing" Lihat XSLT di Wikipedia

³ “HHVM mengkompilasi Hack dan PHP menjadi bytecode perantara. Bytecode ini kemudian diterjemahkan ke dalam kode mesin x64 secara dinamis saat runtime oleh kompiler just-in-time (JIT). ”Lihat HHVM .

Bahasa skrip dalam Daftar bahasa pemrograman berdasarkan jenis di Wikipedia.

Arseni Mourzenko
sumber
16
Bahasa tidak pernah dikompilasi atau ditafsirkan. Bahasa hanya ada . Kompilasi dan interpretasi adalah sifat dari kompiler atau juru bahasa (duh!) Yang digunakan untuk mengimplementasikan bahasa. Istilah "bahasa yang dikompilasi" atau "bahasa yang ditafsirkan" bahkan tidak masuk akal, mereka termasuk dalam berbagai tingkatan abstraksi. Jika Englisch adalah bahasa yang diketik, "bahasa yang dikompilasi" akan menjadi TypeError! Setiap bahasa dapat diimplementasikan oleh penerjemah, setiap bahasa dapat diimplementasikan oleh kompiler.
Jörg W Mittag
@ JörgWMittag "Setiap bahasa dapat diimplementasikan oleh penerjemah, setiap bahasa dapat diimplementasikan oleh kompiler" - 100% benar?
spartacus
@spacacus Saya menyebutnya ragu-ragu "tidak". Saya pikir bahasa apa pun yang dapat dikompilasi juga dapat diartikan (hanya menjalankan instruksi alih-alih menyimpannya), tapi saya pernah mendengar bahwa homoikonisitas sangat membatasi kemungkinan kompilasi
Izkata
@Izkata Saya tidak akan mengatakan homoiconicity itu sendiri mengubah kemungkinan kompilasi, tetapi metaprogramming memungkinkan banyak kompilasi perlu ditunda untuk runtime, jika sama sekali.
Mark Hurd
1
Bagian "Bahasa scripting" adalah murni salah seperti "Jörg W Mittag" sudah ditunjukkan. Dan di atas tidak ada penjelasan tentang "Bahasa pemrograman".
David Raab
2

Untuk menghasilkan taksonomi apa pun, Anda harus terlebih dahulu bertanya pada diri sendiri beberapa pertanyaan:

  • Apakah objek yang akan saya masukkan ke dalam hubungan apa pun didefinisikan dengan benar?
  • Jika demikian, apakah mereka benar-benar ada?
  • Apakah saya membatasi diri hanya pada jenis hubungan tertentu di antara objek, atau adakah persyaratan yang ditetapkan agar sistem hanya menggunakan hubungan yang sah?

Biasanya, ketika seseorang mendengar pertanyaan seperti yang Anda ajukan, jawaban yang diharapkan membuat beberapa asumsi. Sebagai contoh, adalah wajar untuk mengasumsikan bahwa karena semua ini adalah bahasa, mereka harus membentuk hierarki di bawah konsep bahasa yang lebih umum, atau mereka membagi ruang semua bahasa, atau mereka adalah himpunan bagian dari satu sama lain.

Bahasa pemrograman

Sayangnya, tidak satu pun di atas yang tampaknya benar. Mungkin hanya bahasa pemrograman yang memiliki definisi paling disetujui. Bahasa pemrograman adalah bahasa yang menyandikan program. Pengkodean berarti bahwa suatu kata dalam bahasa dapat diartikan sebagai suatu program (suatu urutan tindakan). Bahasa pemrograman komputer adalah bagian dari ini. Contoh bahasa pemrograman non-komputer: daftar belanjaan, ditafsirkan sebagai petunjuk bagi pembeli di supermarket, DNA ditafsirkan dengan menyalin peptida, rekaman musik analog yang berfungsi sebagai program untuk perekam kaset.

Bahasa pemrograman komputer dengan demikian yang memprogram komputer.

Bahasa scripting

Tidak terdefinisi dengan baik. Ini terbuka untuk interpretasi apa arti istilah ini. Secara historis, akan terlihat bahwa bahasa pemrograman yang tidak memiliki kompiler untuk menghasilkan kode mesin telah dipanggil dengan cara ini. Dengan standar saat ini, ini akan menempatkan setiap bahasa pemrograman populer dan Assemblers ke dalam kategori ini. Bahkan yang disebut bahasa tingkat rendah seperti C memerlukan runtime dengan prosedur yang sudah ada sebelumnya, sehingga binari yang diperoleh dengan mengkompilasi program C tidak sepenuhnya kode mesin, tetapi juga memanggil ke runtime setiap saat dan kemudian.

Bahasa markup

Tidak terdefinisi dengan baik. Setiap kali istilah ini digunakan, maksudnya adalah untuk menggambarkan bahasa pemrograman dengan leksikon yang sangat terbatas, terutama digunakan untuk menghasilkan gambar visual atau audio. Mungkin sulit untuk melihat XML sebagai pemrograman sesuatu, tetapi jika Anda melihat Man atau markup TexInfo, Anda akan melihat bahwa karakter "spesial" sebenarnya adalah instruksi dari penerjemah.

Dimungkinkan juga untuk memberikan interpretasi "pemrograman" untuk bahasa XML, sesuatu yang bisa seperti ini:

< := put interpreter in the reading node mode
! := if reading node, start CData/Comment mode
     else if not in read text mode, signal error
-- := if in start CData/Comment mode, start comment
      else if in comment, put in end comment mode
      else if in end comment mode, signal error
...

Intinya: pembagian ini mulai hari ini, sepertinya tidak terlalu berarti, itu hanya dapat memberi Anda beberapa intuisi tentang jenis bahasa apa yang Anda hadapi, tetapi itu tidak akan memberi Anda definisi yang ketat.

wvxvw
sumber
1

Ketiga konsep agak tumpang tindih, sehingga Anda bisa mendapatkan argumen tanpa akhir apakah XSLT adalah bahasa pemrograman atau apakah Python adalah bahasa scripting atau tidak.

Sebuah bahasa markup adalah bahasa yang mewakili terstruktur data dalam format tekstual , HTML adalah yang paling terkenal, tetapi ada berbagai format untuk berbagai keperluan, seperti SVG untuk grafis, WSDL untuk menggambarkan antarmuka layanan web, resx untuk file resouce di. bersih dan sebagainya. Aturan praktisnya adalah bahwa bahasa markup tidak menggambarkan proses atau algoritma (seperti bahasa pemrograman) tetapi merupakan data murni. Tapi itu juga merupakan CS wawasan mendasar yang ada adalahtidak ada perbedaan mendasar antara kode dan data. Beberapa bahasa markup seperti XSLT memiliki loop dan kondisional seperti bahasa pemrograman "nyata", dan beberapa bahasa pemrograman seperti Prolog hampir merupakan data murni tanpa proses yang ditentukan dalam kode. Dan Lisp mengaburkan garis sehingga memperlakukan kode sendiri sebagai format data terstruktur.

Adapun perbedaan antara bahasa pemrograman dan bahasa scripting , ini adalah perbedaan historis yang hampir usang saat ini. Di masa lalu kami telah menyusun program yang berdiri sendiri ditulis dalam katakanlah C, dan kemudian kami memiliki bahasa scripting seperti mengatakan skrip shell atau Word Basic, yang ditafsirkan dan dirancang untuk memanipulasi program dan alat lain. Saat ini jalurnya cukup kabur dengan banyak jalan tengah, karena kami memiliki berbagai tingkat kompilasi dan interpretasi (kompilasi bytecode, kompilasi JIT, dll.), Dan berbagai API independen-bahasa. Jadi perbedaannya tidak begitu berguna.

JacquesB
sumber
0

Bahasa markup digunakan untuk menggambarkan data dan bukan logika. Penggunaan tipikal dari mereka adalah untuk menggambarkan format dokumen, HTML dirancang untuk ini misalnya. Tapi mereka kadang-kadang digunakan sebagai format data umum juga, XML adalah bahasa markup yang sering digunakan untuk hanya menggambarkan data.

Perbedaan antara bahasa pemrograman dan skrip sangat kabur, keduanya cenderung lengkap karena Anda dapat memecahkan masalah yang dapat dikomputasi dengan mereka. Ada beberapa 'petunjuk' umum yang dapat Anda cari untuk melihat apakah suatu bahasa adalah bahasa pemrograman atau tidak.

  • Bahasa Scripting sering ditafsirkan daripada dikompilasi, atau setidaknya memberikan opsi untuk ditafsirkan.
  • Bahasa Scripting sering dibangun agar lebih cepat bekerja daripada cepat dijalankan.
  • Bahasa Scripting cenderung hadir dengan pustaka standar yang sangat luas. Banyak bahasa pemrograman juga melakukannya, tetapi lebih opsional untuk mereka.

Tetapi pada akhirnya, jika suatu bahasa adalah bahasa scripting atau bahasa pemrograman lebih merupakan masalah konvensi daripada kriteria ketat. Bahkan petunjuk di atas hanyalah tren, Anda akan menemukan bahasa pemrograman yang memenuhi semua kriteria untuk bahasa scripting namun masih dianggap bahasa pemrograman.

Pierre Andersson
sumber
4
Bahasa tidak pernah dikompilasi atau ditafsirkan. Bahasa hanya ada . Kompilasi dan interpretasi adalah sifat dari kompiler atau juru bahasa (duh!) Yang digunakan untuk mengimplementasikan bahasa. Istilah "bahasa yang dikompilasi" atau "bahasa yang ditafsirkan" bahkan tidak masuk akal, mereka termasuk dalam berbagai tingkatan abstraksi. Jika Englisch adalah bahasa yang diketik, "bahasa yang dikompilasi" akan menjadi TypeError! Setiap bahasa dapat diimplementasikan oleh penerjemah, setiap bahasa dapat diimplementasikan oleh kompiler. Bahkan dimungkinkan untuk membuat kompiler secara otomatis dari juru bahasa dan sebaliknya.
Jörg W Mittag
@ JörgWMittag memang benar bahwa tidak ada bahasa yang secara inheren dikompilasi atau ditafsirkan. Tetapi sering ada konvensi tentang bagaimana biasanya dieksekusi, yang terutama apa yang saya maksudkan di sini.
Pierre Andersson