Ich habe erfahren, dass HTML eine Auszeichnungssprache und C ++ eine Programmiersprache ist. Was könnte den Unterschied ausmachen?

22

Meine Programmierfreunde sagen mir immer, dass HTML eine Auszeichnungssprache und C ++ eine Programmiersprache ist. Wenn ich sie frage, was der Unterschied ist, geben sie mir keine vernünftige Antwort.

Was könnte C ++ zu einer Programmiersprache machen und HTML nicht?

Lucas - Better Coding Academy
quelle
5
Meinst du etwas anderes als Turing komplett zu sein?
Manoj R
1
@ManojR Nicht alle vollständigen Sprachen von Turing gelten als Programmiersprachen, z. B. XSLT.
Yannis
1
Super edit @gnat, danke. Frage erneut geöffnet, veraltete Kommentare entfernt.
Yannis
1
@YannisRizos Ich habe die Klarstellung von OP in die Kommentare kopiert . Ich frage mich, warum so viele Benutzer wichtige Informationen zu ihren Posts in Kommentaren ablegen, anstatt sie zu bearbeiten. ich mir meine Beiträge in solchen Fällen , dass fast immer bearbeiten
gnat

Antworten:

45

Eine Programmiersprache ist eine Notation, mit der Anweisungen an eine Maschine übergeben werden. Nach dieser Definition sind sowohl C ++ als auch HTML Programmiersprachen, ebenso wie die Notation, mit der Joseph Marie Jacquard 1801 seine Webstühle programmierte .

Mit der Verbreitung von Sprachen, die zum Strukturieren und / oder Beschreiben von Daten verwendet werden, hat sich die Definition einer Programmiersprache dahingehend verschoben, dass nur Sprachen berücksichtigt werden, die Algorithmen ausdrücken können. Dies ist die heute gebräuchlichste Definition und schließt Sprachen wie HTML oder XML aus.

Im Zentrum der aktuellen Definition steht das Konzept der Turing-Vollständigkeit . Die meisten Programmiersprachen sind Turing-vollständig, und die Turing-Vollständigkeit wird oft als das eine entscheidende Merkmal angegeben, das eine Programmiersprache von jeder anderen Computersprache unterscheidet. Dies ist als Faustregel gut genug, aber nicht ganz korrekt:

  1. Einige nicht Turing-vollständige Sprachen gelten als Programmiersprachen, zum Beispiel Charity .
  2. Einige Sprachen, die im Allgemeinen nicht als Programmiersprachen gelten, sind vollständig, beispielsweise XSLT .
  3. Vollständigkeit allein sagt nicht viel über den Nutzen einer Sprache aus .

Je nach Kontext können Sie eine beliebige Definition auswählen.

Bearbeiten:

Es sei ferner angemerkt, dass eine Implementierung einer Sprache der Sprache selbst keine Merkmale verleiht, zum Beispiel: Die Spezifikation einer Sprache kann eine vollständige Sprache definieren, jemand könnte sie zufällig implementieren und dabei die Vollständigkeit der Sprache weglassen. Diese Implementierung, die nicht vollständig ist, bedeutet jedoch nicht, dass die Sprache selbst nicht vollständig ist (vielmehr bedeutet dies wahrscheinlich, dass die Implementierung nicht konform ist). Die Details einer Sprache und die Details einer bestimmten Implementierung einer Sprache sind als separate Dinge zu erkennen. Deshalb ist es ungenau, eine interpretierte oder kompilierte Sprache usw. zu nennen.

yannis
quelle
6
Könnten Sie das Thema "XSLT wird nicht als Programmiersprache angesehen" näher erläutern? Ich habe das noch nie gesehen und IMO würde ich sogar das Wissen oder die Kompetenz von jemandem mit PLs in Frage stellen, wenn ich das ausspreche. Ich kann mir nicht einmal einen Grund vorstellen, warum XSLT nicht als PL angesehen werden sollte (XSLT könnte ein milder Fall sein, bei dem Tarpit aufgerissen wird, aber das ist ein anderes Problem).
Bhaak
@bhaak Ich sage nicht, dass es keine Programmiersprache sein sollte. Datentransformationssprachen werden im Allgemeinen nicht als Programmiersprachen betrachtet, die überhaupt nichts aussagen, wenn sie Programmiersprachen sind oder nicht. Ich habe Geschäftslogik in XSLT gesehen und ich persönlich halte es für eine Programmiersprache. Aber ich würde es wahrscheinlich nicht tun, wenn ich es noch nicht bei der Arbeit gesehen hätte. Wen interessiert das schon?
Yannis
Sie können einen oder zwei Sätze hinzufügen, was es bedeutet, vollständig zu sein.
Phant0m
@ think123 Ich glaube nicht, dass ich eine einfachere Definition geben kann als die in Wikipedia, und ich habe in der Antwort bereits auf den entsprechenden Artikel verlinkt.
Yannis
5

Der Ausdruck "Ich weiß es, wenn ich es sehe" ist ein umgangssprachlicher Ausdruck, mit dem ein Sprecher versucht, eine beobachtbare Tatsache oder ein Ereignis zu kategorisieren, obwohl die Kategorie subjektiv ist oder klar definierte Parameter fehlen. Der Ausdruck wurde von Potter Stewart, dem Richter am Obersten Gerichtshof der Vereinigten Staaten, bekanntermaßen verwendet, um seinen Schwellentest für Obszönität in Jacobellis gegen Ohio (1964) zu beschreiben.

- "Ich weiß es, wenn ich es sehe" Wikipedia-Artikel

Wie Obszönität, ich denke, wir alle kennen eine Programmiersprache, wenn wir eine sehen. Das OP ist eindeutig der Fall, da Sie C ++ bereits als Programmiersprache und HTML nicht als Programmiersprache eingestuft haben.

Was genau ist das Ziel einer formalen Definition? Yannis hat bereits ausführlich dargelegt, warum die populärste Definition, die Turing-Vollständigkeit, fehlerhaft ist: Sie führt zu einer Kategorisierung, die dem Test "Ich weiß es, wenn ich es sehe" widerspricht.

Ich sage Ihnen, dass jede Definition, die Sie erstellen können, zu einigen Sprachen führen wird, von denen wir alle der Ansicht sind, dass sie keine "Programmiersprachen" sind, die als solche eingestuft werden. oder auf einigen Sprachen , die wir alle fühlen sind „Programmierung“ Sprachen werden als kategorisiert werden nicht so zu sein.

Warum gehst du nicht einfach mit deinem Bauch? Ich benutze eine einfache Heuristik: Eine Programmiersprache ist eine Sprache, deren Hauptzweck meiner Meinung nach und nach meinen Beobachtungen darin besteht, Programme zu schreiben. Inhalte nicht kennzeichnen. XML nicht zu transformieren. Programme für allgemeine Zwecke schreiben. Ich würde es lieber einfach wissen, wenn ich es sehe, als zu versuchen, eine formale Definition festzunageln, und ich sehe keinen echten Wert, der sich aus dem Versuch einer solchen Definition ergeben könnte.

Carson63000
quelle
Aber jetzt beschränken Sie "Programmiersprachen" auf "Allzweck-Programmiersprachen". Letzteres ist das, was Menschen normalerweise meinen, wenn sie "Programmiersprache" sagen, aber genau zu verfolgen, was die bestimmenden Merkmale einer "Programmiersprache" sind, hat auch seinen Sinn darin, zu verstehen, was Programmiersprachen sind, wie sie funktionieren und wo ihre Grenzen liegen. Zum Beispiel muss jeder erfahrene Programmierer das Halteproblem erkennen, wenn er darauf stößt, was schwierig wäre, ohne die theoretischen Grenzen der Programmiersprachen zu studieren.
JesperE
@JesperE: Ich bin glücklich, mein Urteil "Ich weiß es, wenn ich es sehe" auf Programmiersprachen zu beschränken, die zumindest einen relativ allgemeinen Zweck haben. Ich bin auch nicht der Meinung, dass "jeder erfahrene Programmierer" Kenntnisse über das Problem des Stillstands benötigt - ich weiß, dass meine Kenntnisse aus meiner formalen Informatikausbildung in fast zwei Jahrzehnten meiner beruflichen Entwicklung für mich nie von Bedeutung waren.
Carson63000
1
Wenn Sie es nicht vorbringen mussten, ist es wahrscheinlich gut. Das heißt nicht, dass es nicht wichtig ist, es zu wissen. Sie beurteilen die Qualität Ihres Sicherheitsgurts nicht danach, wie oft er tatsächlich benutzt wurde, oder?
JesperE
Ist elisp nach Ihrer Heuristik eine Programmiersprache?
Brian
@ Brian: interessant! Ich denke, ich habe elisp immer einfach als eine Implementierung von Lisp gesehen, die eindeutig eine Programmiersprache ist, obwohl diese spezielle Implementierung in ihrem Zweck sehr viel spezifischer ist.
Carson63000
2

Markup-Sprachen befassen sich hauptsächlich mit der Darstellung der Informationen und fehlen im Allgemeinen in der Programmierinfrastruktur für Variablen, Mathematik, Vergleiche, Entscheidungsfindung (wenn ... dann), Schleifen (für, während) usw.

HTML an sich ist statisch; Das heißt, ähnlich wie bei einem Textverarbeitungsprogramm sollen die Informationen so dargestellt werden, wie sie sind. Nur mit der Hinzufügung einer Art Programmiersprache (normalerweise Skriptsprachen wie JavaScript, PHP usw.) können die HTML-Webseiten einen "sich ändernden" Inhalt haben. Die Skriptsprachen bieten die "Programmier" -Möglichkeiten mit Variablen, Mathematik, Vergleichen, Entscheidungsfindung, Schleifen usw.

hekimgil
quelle
0

HTML ist eine deklarative Sprache. Es macht nicht viel für sich allein, es beschreibt nur ein Dokument und seinen Inhalt (unter Verwendung von Tags, die eine semantische Bedeutung haben).

C ++ dagegen macht etwas. Es definiert Funktionen und Klassen, beschreibt aber auch, wie diese Funktionen zusammenarbeiten sollen, wie ihre Ein- und Ausgänge sinnvoll miteinander verknüpft sind und wie die Anwendung als Ganzes ausgeführt werden soll.

Radu Potop
quelle