Saya telah diberitahu bahwa HTML adalah bahasa markup, C ++ adalah bahasa pemrograman, apa yang bisa membuat perbedaan itu?

22

Teman pemrograman saya selalu memberi tahu saya bahwa HTML adalah bahasa markup dan C ++ adalah bahasa pemrograman. Ketika saya bertanya kepada mereka apa bedanya, mereka tidak pernah memberi saya jawaban yang masuk akal.

Apa yang bisa membuat satu panggilan C ++ bahasa pemrograman, dan HTML tidak?

Lucas - Akademi Pengkodean yang Lebih Baik
sumber
5
Apakah maksud Anda selain Turing yang lengkap?
Manoj R
1
@ManojR Tidak semua bahasa lengkap Turing dianggap sebagai bahasa pemrograman, misalnya XSLT.
yannis
Kembali ditutup, lihat T / A dalam meta di meta.programmers.stackexchange.com/q/5397/70298
miraculixx
1
Sunting @gnat, terima kasih. Pertanyaan dibuka kembali, komentar usang dihapus.
yannis
1
@YannisRizos Saya baru saja menyalin klarifikasi yang diberikan oleh OP dalam komentar . Bertanya-tanya mengapa begitu banyak pengguna menaruh hal-hal penting tentang posting mereka dalam komentar, alih-alih mengedit; sendiri saya hampir selalu mengedit posting saya dalam kasus-kasus seperti itu
agas

Jawaban:

45

Bahasa pemrograman adalah notasi yang dirancang untuk meneruskan instruksi ke mesin. Dengan definisi itu baik C ++ dan HTML adalah bahasa pemrograman, seperti notasi Joseph Marie Jacquard yang digunakan pada 1801 untuk memprogram alat tenunnya .

Namun dengan menjamurnya bahasa yang digunakan untuk menyusun dan / atau mendeskripsikan data, definisi bahasa pemrograman bergeser untuk memasukkan hanya bahasa yang mampu mengekspresikan algoritma. Ini adalah definisi yang lebih umum saat ini dan tidak termasuk bahasa seperti HTML atau XML.

Inti dari definisi saat ini adalah konsep kelengkapan Turing . Sebagian besar bahasa pemrograman Turing lengkap, dan kelengkapan Turing sering dikutip sebagai satu sifat kritis yang memisahkan bahasa pemrograman dari bahasa komputer lainnya. Ini cukup baik sebagai aturan umum, tetapi tidak sepenuhnya akurat:

  1. Beberapa bahasa non-Turing yang lengkap dianggap sebagai bahasa pemrograman, misalnya Charity .
  2. Beberapa bahasa yang secara umum tidak dianggap sebagai bahasa pemrograman Turing lengkap, misalnya XSLT .
  3. Turing kelengkapan saja tidak banyak bicara tentang kegunaan bahasa .

Tergantung pada konteksnya, Anda dapat memilih definisi yang Anda inginkan.

Edit:

Lebih jauh diketahui, implementasi bahasa tidak memberikan karakteristik ke bahasa itu sendiri, misalnya: Spesifikasi bahasa dapat menentukan bahasa lengkap turing, seseorang dapat mengimplementasikannya dengan sembarangan meninggalkan kelengkapan turing. Implementasi ini menjadi non-turing complete tidak berarti bahasa itu sendiri tidak turing lengkap (melainkan kemungkinan implementasi itu tidak sesuai). Detail suatu bahasa dan detail implementasi tertentu dari suatu bahasa harus diakui sebagai hal yang terpisah, inilah mengapa tidak akurat untuk menyebut bahasa yang ditafsirkan atau dikompilasi dll.

yannis
sumber
6
Bisakah Anda menguraikan "XSLT tidak dianggap sebagai bahasa pemrograman". Saya tidak pernah melihat ini dan IMO saya bahkan akan mempertanyakan pengetahuan atau kompetensi seseorang dengan PL ketika mengucapkan ini. Saya bahkan tidak bisa memikirkan alasan mengapa XSLT tidak boleh dianggap sebagai PL (XSLT mungkin merupakan kasus ringan turing tarpit tapi itu masalah lain).
bhaak
@haak saya tidak mengatakan itu tidak boleh dianggap sebagai bahasa pemrograman. Bahasa transformasi data umumnya tidak dianggap sebagai bahasa pemrograman, yang sama sekali tidak mengatakan apa-apa untuk itu, atau bukan bahasa pemrograman. Saya telah melihat logika bisnis dalam XSLT dan saya pribadi menganggapnya sebagai bahasa pemrograman. Tapi saya mungkin tidak akan, jika saya belum melihatnya di tempat kerja. Bagaimanapun, siapa yang peduli?
yannis
Anda bisa menambahkan satu atau dua kalimat tentang apa artinya menjadi turing lengkap.
phant0m
@ think123 Saya rasa saya tidak bisa memberikan definisi yang lebih sederhana daripada yang ada di Wikipedia, dan saya sudah ditautkan ke artikel yang relevan di jawabannya.
yannis
5

Frasa "Saya tahu ketika saya melihatnya" adalah ungkapan sehari-hari yang digunakan oleh pembicara untuk mengkategorikan fakta atau peristiwa yang dapat diamati, meskipun kategorinya subjektif atau tidak memiliki parameter yang jelas. Ungkapan ini terkenal digunakan oleh Hakim Agung Mahkamah Agung Amerika Serikat Potter Stewart untuk menggambarkan tes ambang batas untuk kecabulan di Jacobellis v. Ohio (1964).

- "Saya tahu ketika saya melihatnya" Artikel Wikipedia

Seperti kecabulan, saya pikir kita semua tahu bahasa pemrograman ketika kita melihatnya. Jelas OP melakukannya, karena Anda sudah menilai C ++ sebagai bahasa pemrograman, dan HTML bukan menjadi bahasa pemrograman.

Jadi apa sebenarnya tujuan mengejar definisi formal? Yannis telah memberikan ringkasan yang bagus tentang mengapa definisi paling populer, kelengkapan Turing, cacat: mengarah ke kategorisasi yang menentang tes "Saya tahu kapan saya melihatnya".

Saya katakan kepada Anda bahwa definisi apa pun yang dapat Anda buat akan mengarah ke beberapa bahasa yang kita semua anggap bukan bahasa "pemrograman" akan dikategorikan demikian; atau untuk beberapa bahasa yang kita semua rasakan sebagai "pemrograman" bahasa akan dikategorikan tidak begitu.

Mengapa tidak pergi saja dengan naluri Anda? Saya menggunakan heuristik sederhana: bahasa pemrograman adalah bahasa yang tujuan utamanya, menurut pendapat saya dan menurut pengamatan saya, adalah menulis program. Tidak menandai konten. Tidak mengubah XML. Untuk menulis program tujuan umum. Saya lebih suka mengetahuinya ketika saya melihatnya daripada mencoba untuk mendefinisikan definisi formal, dan saya tidak melihat nilai asli yang dapat datang dari mencoba definisi tersebut.

Carson63000
sumber
Tetapi sekarang Anda membatasi "bahasa pemrograman" menjadi "bahasa pemrograman tujuan umum". Yang terakhir adalah apa yang biasanya orang maksud ketika mereka mengatakan "bahasa pemrograman", tetapi mengejar apa karakteristik mendefinisikan dari "bahasa pemrograman" juga memiliki titik dalam memahami apa bahasa pemrograman, bagaimana mereka bekerja, dan apa keterbatasan mereka. Sebagai contoh, setiap programmer yang terampil harus mengenali masalah penghentian ketika mereka menemukannya, yang akan sulit tanpa mempelajari batas-batas teoritis bahasa pemrograman.
JesperE
@JesperE: Saya senang membatasi penilaian "Saya tahu ketika saya melihatnya" untuk bahasa pemrograman yang setidaknya memiliki tujuan cukup umum. Saya juga tidak setuju bahwa "programmer yang terampil" membutuhkan pengetahuan apa pun tentang masalah penghentian - Saya tahu bahwa pengetahuan saya tentang hal itu dari pendidikan ilmu komputer formal saya tidak pernah memiliki relevansi dengan saya dalam hampir dua dekade pengembangan profesional.
Carson63000
1
Jika Anda tidak perlu membahasnya, itu mungkin bagus. Itu tidak berarti bahwa itu tidak penting untuk diketahui. Anda tidak menilai kualitas sabuk pengaman Anda dengan seberapa sering menggunakan sabuk pengaman yang sebenarnya, bukan?
JesperE
Dengan heuristik Anda, apakah Elisp bahasa pemrograman?
Brian
@ Brian: yang menarik! Saya kira saya selalu selalu menganggap elisp sebagai implementasi Lisp, yang jelas merupakan bahasa pemrograman, meskipun implementasi khusus ini jauh lebih spesifik dalam cakupan tujuannya.
Carson63000
2

Bahasa markup terutama berurusan dengan bagaimana informasi ditampilkan dan mereka umumnya kurang dalam infrastruktur pemrograman variabel, matematika, perbandingan, pengambilan keputusan (jika ... maka), loop (untuk, sementara), dll.

HTML dengan sendirinya statis; artinya, seperti pengolah kata, ini dimaksudkan untuk menyajikan informasi apa adanya. Hanya dengan penambahan semacam bahasa pemrograman (biasanya bahasa scripting seperti JavaScript, PHP, dll) halaman web HTML dapat memiliki konten yang "berubah". Bahasa scripting menyediakan kemungkinan "pemrograman" dengan variabel, matematika, perbandingan, pengambilan keputusan, loop, dll.

hekimgil
sumber
0

HTML adalah bahasa deklaratif. Itu tidak berbuat banyak dengan sendirinya, itu hanya menggambarkan dokumen dan kontennya (menggunakan tag yang memiliki makna semantik).

C ++ di sisi lain melakukan sesuatu. Itu mendefinisikan fungsi dan kelas, tetapi juga menjelaskan bagaimana fungsi-fungsi ini harus bekerja bersama, bagaimana input dan output mereka diikat bersama-sama dengan cara yang bermakna dan bagaimana aplikasi harus berjalan secara keseluruhan.

Radu Potop
sumber