ฉันถูกบอกแล้วว่า HTML เป็นภาษามาร์กอัป C ++ เป็นภาษาการเขียนโปรแกรมอะไรที่ทำให้เกิดความแตกต่าง?


22

เพื่อนเขียนโปรแกรมของฉันมักจะบอกฉันเสมอว่า HTML เป็นภาษามาร์กอัปและ C ++ เป็นภาษาการเขียนโปรแกรม เมื่อฉันถามพวกเขาว่าอะไรคือความแตกต่างพวกเขาไม่เคยให้คำตอบที่สมเหตุสมผลเลย

สิ่งใดที่ทำให้ C ++ มีภาษาโปรแกรมหนึ่งและ HTML ไม่ได้


5
คุณหมายถึงการอื่นที่ไม่ใช่ทัวริงสมบูรณ์หรือไม่
Manoj R

1
@ManojR ไม่ใช่ว่าทัวริงภาษาทั้งหมดจะถือเป็นภาษาการเขียนโปรแกรมเช่น XSLT
yannis

ปิดอีกครั้งดู Q / A ใน meta ที่meta.programmers.stackexchange.com/q/5397/70298
miraculixx

1
แก้ไข @gnat ได้ดีมากขอบคุณ เปิดคำถามใหม่ความคิดเห็นที่ล้าสมัยแล้ว
yannis

1
@YannisRizos ฉันเพียงแค่คัดลอกชี้แจงให้โดย OP ในความคิดเห็น สงสัยว่าเหตุใดผู้ใช้จำนวนมากจึงใส่ข้อมูลสำคัญเกี่ยวกับโพสต์ไว้ในความคิดเห็นแทนที่จะทำการแก้ไข ตัวฉันเองฉันมักจะแก้ไขโพสต์ของฉันในกรณีเช่นนี้
gnat

คำตอบ:


45

ภาษาการเขียนโปรแกรมเป็นสัญลักษณ์ที่ออกแบบมาเพื่อส่งคำแนะนำไปยังเครื่อง ตามคำนิยามว่าทั้ง C ++ และ HTML มีการเขียนโปรแกรมภาษาที่เป็นสัญกรณ์โจเซฟ Marie Jacquard ใช้ใน 1801 การเขียนโปรแกรม looms

อย่างไรก็ตามด้วยการเพิ่มจำนวนของภาษาที่ใช้ในโครงสร้างและ / หรืออธิบายข้อมูลคำจำกัดความของภาษาการเขียนโปรแกรมจะเลื่อนไปรวมเฉพาะภาษาที่สามารถแสดงอัลกอริทึม นี่เป็นคำจำกัดความที่พบได้ทั่วไปมากขึ้นในวันนี้และไม่รวมภาษาเช่น HTML หรือ XML

ที่เป็นหัวใจของความหมายปัจจุบันคือแนวคิดของทัวริงสมบูรณ์ ภาษาโปรแกรมส่วนใหญ่นั้นทัวริงสมบูรณ์และทัวริงสมบูรณ์มักจะอ้างว่าเป็นหนึ่งในลักษณะที่สำคัญที่แยกภาษาโปรแกรมจากภาษาคอมพิวเตอร์อื่น ๆ สิ่งนี้ดีพอเหมือนกฎทั่วไป แต่ไม่ถูกต้องทั้งหมด:

  1. บางทัวริงที่ไม่ใช่ภาษาที่สมบูรณ์จะถือว่าการเขียนโปรแกรมภาษาเช่นการกุศล
  2. บางภาษาที่ไม่ได้รับการพิจารณาโดยทั่วไปจะมีการเขียนโปรแกรมภาษาทัวริงสมบูรณ์เช่นXSLT
  3. ความสมบูรณ์แบบเพียงอย่างเดียวไม่ได้พูดถึงประโยชน์ของภาษามากนัก

คุณสามารถเลือกคำจำกัดความที่คุณต้องการได้ทั้งนี้ขึ้นอยู่กับบริบท

แก้ไข:

ปล่อยให้มันเป็นที่รู้จักต่อไปการใช้ภาษาไม่ได้ทำให้เกิดลักษณะเฉพาะกับภาษานั้นตัวอย่างเช่น: ข้อมูลจำเพาะของภาษาอาจกำหนดภาษาที่สมบูรณ์แบบทัวริงบางคนสามารถนำมาใช้อย่างสมบูรณ์แบบ การใช้งานนี้ไม่สมบูรณ์ทัวริงไม่ได้หมายความว่าภาษานั้นไม่ได้ทำให้สมบูรณ์ (ค่อนข้างเป็นไปได้ว่าการติดตั้งใช้งานไม่สอดคล้อง) รายละเอียดของภาษาและรายละเอียดของการใช้งานภาษานั้น ๆ จะต้องได้รับการยอมรับว่าเป็นสิ่งที่แยกจากกันนี่คือเหตุผลว่าทำไมจึงไม่ถูกต้องในการเรียกภาษาที่แปลหรือเรียบเรียง ฯลฯ


6
คุณช่วยอธิบายเกี่ยวกับ "XSLT ที่ไม่ถือว่าเป็นภาษาการเขียนโปรแกรม" ได้ไหม ฉันไม่เคยเห็นสิ่งนี้และ IMO ฉันจะถามความรู้ของใครบางคนหรือความสามารถกับ PLs เมื่อพูดนี้ ฉันไม่สามารถคิดด้วยเหตุผลใด ๆ ว่าทำไม XSLT ไม่ควรได้รับการยกย่องว่าเป็น PL (XSLT อาจเป็นกรณีของ tarpit แต่ก็เป็นอีกปัญหาหนึ่ง)
bhaak

@bhaak ฉันไม่ได้บอกว่ามันไม่ควรจะถือว่าเป็นภาษาการเขียนโปรแกรม โดยทั่วไปภาษาการแปลงข้อมูลนั้นไม่ได้คิดว่าเป็นภาษาการเขียนโปรแกรมซึ่งไม่ได้บอกอะไรอย่างแน่นอนว่าจะเป็นหรือไม่ใช่ภาษาโปรแกรม ฉันเห็นตรรกะทางธุรกิจใน XSLT และฉันคิดว่ามันเป็นภาษาโปรแกรม แต่ฉันอาจจะไม่ได้ถ้าฉันไม่ได้เห็นมันในที่ทำงานก่อน ไม่ว่าในกรณีใดใครสนใจ?
yannis

คุณสามารถเพิ่มหนึ่งหรือสองประโยคในความหมายของการทำให้สมบูรณ์
phant0m


@ think123 ฉันไม่คิดว่าฉันจะสามารถให้คำจำกัดความที่ง่ายกว่าคำนิยามใน Wikipedia และฉันได้เชื่อมโยงกับบทความที่เกี่ยวข้องในคำตอบแล้ว
yannis

5

วลี"ฉันรู้ว่าเมื่อฉันเห็นมัน"คือการแสดงออกทางภาษาซึ่งผู้พูดพยายามจัดหมวดหมู่ความเป็นจริงหรือเหตุการณ์ที่สังเกตได้แม้ว่าหมวดหมู่จะเป็นอัตนัยหรือขาดพารามิเตอร์ที่กำหนดไว้อย่างชัดเจน วลีดังกล่าวถูกใช้อย่างมีชื่อเสียงโดยผู้พิพากษาศาลฎีกาแห่งสหรัฐอเมริกาพอตเตอร์สจ๊วตเพื่ออธิบายการทดสอบขีด จำกัด ของเขาสำหรับความลามกในJacobellis v. Ohio (1964)

- "ฉันรู้เมื่อฉันเห็นมัน" บทความ Wikipedia

ฉันคิดว่าเราทุกคนรู้ภาษาการเขียนโปรแกรมเมื่อเราเห็น เห็นได้ชัดว่า OP ทำเพราะคุณได้ตัดสิน C ++ ให้เป็นภาษาการเขียนโปรแกรมแล้วและ HTML นั้นไม่ใช่ภาษานั้น

ดังนั้นเป้าหมายของการใฝ่หาคำจำกัดความที่เป็นทางการคืออะไร? Yannis ได้ให้บทสรุปที่ยอดเยี่ยมว่าทำไมคำจำกัดความที่ได้รับความนิยมมากที่สุดของ Turing ครบถ้วนเป็นข้อบกพร่อง: มันนำไปสู่การจัดหมวดหมู่ซึ่งท้าทายการทดสอบ "ฉันรู้ว่าเมื่อฉันเห็น"

ฉันบอกคุณแล้วว่าคำจำกัดความใด ๆ ที่คุณสามารถนำมาใช้ได้นั้นจะนำไปสู่บางภาษาซึ่งเราทุกคนรู้สึกว่าไม่ใช่ "การเขียนโปรแกรม" ภาษาจะถูกจัดหมวดหมู่เป็นอย่างนั้น หรือบางภาษาที่เราทุกคนรู้สึกว่าเป็น "การเขียนโปรแกรม" ภาษาจะถูกจัดหมวดหมู่ว่าไม่เป็นเช่นนั้น

ทำไมไม่ไปกับอุทรของคุณล่ะ? ฉันใช้ฮิวริสติกแบบง่าย: ภาษาการเขียนโปรแกรมเป็นภาษาที่มีจุดประสงค์หลักตามความเห็นของฉันและจากการสังเกตของฉันคือการเขียนโปรแกรม ไม่ต้องทำเครื่องหมายเนื้อหา ไม่แปลง XML เพื่อเขียนโปรแกรมวัตถุประสงค์ทั่วไป ฉันแค่อยากรู้ว่าเมื่อฉันเห็นมันมากกว่าพยายามที่จะจำกัดความหมายอย่างเป็นทางการและฉันไม่เห็นคุณค่าของแท้ใด ๆ ที่มาจากการพยายามนิยามเช่นนั้น


แต่ตอนนี้คุณกำลัง จำกัด "ภาษาการเขียนโปรแกรม" เป็น "ภาษาโปรแกรมวัตถุประสงค์ทั่วไป" หลังคือสิ่งที่ผู้คนมักจะหมายถึงเมื่อพวกเขาพูดว่า "ภาษาโปรแกรม" แต่การทำตามสิ่งที่กำหนดลักษณะของ "ภาษาโปรแกรม" ก็มีจุดในการทำความเข้าใจว่าภาษาโปรแกรมคืออะไรพวกเขาทำงานอย่างไรและข้อ จำกัด ของพวกเขาคืออะไร ตัวอย่างเช่นโปรแกรมเมอร์ที่มีทักษะจะต้องตระหนักถึงปัญหาการหยุดชะงักเมื่อพวกเขาพบมันซึ่งจะเป็นเรื่องยากโดยไม่ต้องศึกษาขอบเขตทางทฤษฎีของภาษาการเขียนโปรแกรม
JesperE

@JesperE: ฉันมีความสุขที่จะ จำกัด "ฉันรู้ว่าเมื่อฉันเห็นมัน" การตัดสินภาษาการเขียนโปรแกรมที่มีวัตถุประสงค์ทั่วไปอย่างน้อยเป็นธรรม นอกจากนี้ฉันไม่เห็นด้วยที่ "โปรแกรมเมอร์ที่มีทักษะ" ต้องการความรู้เกี่ยวกับปัญหาการหยุดชะงัก - ฉันรู้ว่าความรู้ของฉันจากการศึกษาวิทยาศาสตร์คอมพิวเตอร์อย่างเป็นทางการของฉันไม่เคยมีความเกี่ยวข้องใด ๆ กับฉันในเกือบสองทศวรรษของการพัฒนาอาชีพ
Carson63000

1
หากคุณไม่ได้นำมันขึ้นมานั่นอาจเป็นเรื่องดี ไม่ได้หมายความว่ามันไม่สำคัญที่จะรู้ คุณไม่ได้ตัดสินคุณภาพของเข็มขัดนิรภัยของคุณว่ามันมาถึงการใช้งานจริงหรือไม่?
JesperE

ตามฮิวริสติกของคุณมีภาษาเขียนโปรแกรมไหม?
ไบรอัน

@Brian: หนึ่งที่น่าสนใจ! ฉันคิดว่าฉันมักจะคิดว่า elisp เป็นการใช้ Lisp ซึ่งเห็นได้ชัดว่าเป็นภาษาการเขียนโปรแกรมถึงแม้ว่าการใช้งานเฉพาะนี้จะเฉพาะเจาะจงมากขึ้นในขอบเขตของวัตถุประสงค์
Carson63000

2

ภาษามาร์กอัปส่วนใหญ่จัดการกับวิธีการแสดงข้อมูลและโดยทั่วไปแล้วพวกเขาขาดโครงสร้างพื้นฐานการเขียนโปรแกรมของตัวแปรคณิตศาสตร์การเปรียบเทียบการตัดสินใจ (ถ้า ... จากนั้น) ลูป (สำหรับในขณะที่) ฯลฯ

HTML ด้วยตัวเองเป็นแบบคงที่; นั่นคือเหมือนกับตัวประมวลผลคำมันมีไว้เพื่อนำเสนอข้อมูลตามที่เป็นอยู่ เฉพาะเมื่อมีการเพิ่มภาษาโปรแกรมบางประเภท (โดยปกติแล้วภาษาสคริปต์เช่น JavaScript, PHP และอื่น ๆ ) จะทำให้หน้าเว็บ HTML สามารถมีเนื้อหา "ที่เปลี่ยนแปลง" ได้ ภาษาสคริปต์ให้ความเป็นไปได้ "การเขียนโปรแกรม" กับตัวแปรคณิตศาสตร์การเปรียบเทียบการตัดสินใจลูป ฯลฯ


0

HTML เป็นภาษาที่ประกาศ มันไม่ได้ทำอะไรมากเพียงแค่อธิบายเอกสารและเนื้อหา (ใช้แท็กที่มีความหมายแบบ semantic)

C ++ ในอีกแง่หนึ่งก็ทำอะไรบางอย่าง มันกำหนดฟังก์ชั่นและคลาส แต่มันยังอธิบายถึงวิธีการที่ฟังก์ชั่นเหล่านี้ควรทำงานร่วมกันว่าอินพุตและเอาท์พุทของมันถูกเชื่อมโยงเข้าด้วยกันด้วยวิธีที่มีความหมายและวิธีที่แอพพลิเคชันควรทำงานโดยรวม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.