On m'a dit que HTML est un langage de balisage, C ++ est un langage de programmation, qu'est-ce qui pourrait faire cette différence?

22

Mes amis de programmation me disent toujours que HTML est un langage de balisage et C ++ est un langage de programmation. Quand je leur demande quelle est la différence, ils ne me donnent jamais de réponse raisonnable.

Qu'est-ce qui pourrait faire que l'on appelle C ++ un langage de programmation, et pas HTML?

Lucas - Better Coding Academy
la source
5
Voulez-vous dire autre que d'être Turing complet?
Manoj R
1
@ManojR Tous les langages complets de Turing ne sont pas considérés comme des langages de programmation, par exemple XSLT.
yannis
Pour refermer, voir le Q / A en méta sur meta.programmers.stackexchange.com/q/5397/70298
miraculixx
1
Grand montage @gnat, merci. Question rouverte, commentaires obsolètes supprimés.
yannis
1
@YannisRizos Je viens de copier la clarification donnée par OP dans les commentaires . Je me demande pourquoi tant d'utilisateurs mettent des informations importantes sur leurs messages dans les commentaires, au lieu de les modifier; moi-même, je modifie presque toujours mes messages dans des cas comme ça
moucher

Réponses:

45

Un langage de programmation est une notation conçue pour transmettre des instructions à une machine. Selon cette définition, C ++ et HTML sont tous deux des langages de programmation, tout comme la notation que Joseph Marie Jacquard a utilisée en 1801 pour programmer ses métiers à tisser .

Cependant, avec la prolifération des langages utilisés pour structurer et / ou décrire les données, la définition d'un langage de programmation s'est déplacée pour n'inclure que les langages capables d'exprimer des algorithmes. C'est la définition la plus courante aujourd'hui et elle exclut les langages comme HTML ou XML.

Au cœur de la définition actuelle se trouve le concept d' exhaustivité de Turing . La plupart des langages de programmation sont Turing complet, et l'intégralité de Turing est souvent cité comme le seul trait critique qui sépare un langage de programmation de tout autre langage informatique. C'est assez bon en règle générale, mais pas tout à fait exact:

  1. Certains langages complets non Turing sont considérés comme des langages de programmation, par exemple Charity .
  2. Certains langages qui ne sont généralement pas considérés comme des langages de programmation sont Turing complets, par exemple XSLT .
  3. Turing l'exhaustivité à elle seule ne dit pas grand-chose sur l'utilité d'une langue .

Selon le contexte, vous pouvez choisir la définition que vous souhaitez.

Modifier:

Qu'on le sache plus loin, une implémentation d'un langage ne confère pas de caractéristiques au langage lui-même, par exemple: les spécifications d'un langage peuvent définir un langage complet de turing, quelqu'un pourrait l'implémenter au hasard en laissant de côté l'intégralité de turing. Cette implémentation n'étant pas complète ne signifie cependant pas que le langage lui-même n'est pas complet (cela signifie plutôt que l'implémentation n'est pas conforme). Les détails d'une langue et les détails d'une implémentation particulière d'une langue doivent être reconnus comme des choses distinctes, c'est pourquoi il est inexact d'appeler une langue interprétée ou compilée, etc.

yannis
la source
6
Pourriez-vous élaborer sur le "XSLT non considéré comme un langage de programmation". Je n'ai jamais vu cela et l'OMI, je remettrais même en question les connaissances ou les compétences de quelqu'un avec les PL quand je profère cela. Je ne peux même pas penser à aucune raison pour laquelle XSLT ne devrait pas être considéré comme un PL (XSLT pourrait être un cas bénin de taruring tarpit mais c'est un autre problème).
bhaak
@bhaak Je ne dis pas qu'il ne devrait pas être considéré comme un langage de programmation. Les langages de transformation de données ne sont généralement pas considérés comme des langages de programmation, ce qui ne dit absolument rien s'ils sont ou ne sont pas des langages de programmation. J'ai vu la logique métier dans XSLT et je le considère personnellement comme un langage de programmation. Mais je ne le ferais probablement pas, si je ne l'ai pas vu au travail pour la première fois. En tout cas, qui s'en soucie?
yannis
Vous pourriez ajouter une phrase ou deux sur ce que signifie être complet.
phant0m
@ think123 Je ne pense pas pouvoir donner une définition plus simple que celle de Wikipedia, et je l'ai déjà lié à l'article pertinent dans la réponse.
yannis
5

L'expression «je le sais quand je le vois» est une expression familière par laquelle un locuteur tente de catégoriser un fait ou un événement observable, bien que la catégorie soit subjective ou manque de paramètres clairement définis. Cette expression a été utilisée par le juge de la Cour suprême des États-Unis, Potter Stewart, pour décrire son critère seuil d'obscénité dans Jacobellis c. Ohio (1964).

- "Je le sais quand je le vois" Article Wikipedia

Comme l'obscénité, je pense que nous connaissons tous un langage de programmation quand nous en voyons un. De toute évidence, l'OP le fait, puisque vous avez déjà jugé que C ++ était un langage de programmation et que HTML n'en était pas un.

Alors, quel est exactement l'objectif de poursuivre une définition formelle? Yannis a déjà donné un grand aperçu des raisons pour lesquelles la définition la plus populaire, l'exhaustivité de Turing, est erronée: elle conduit à une catégorisation qui défie le test «Je le sais quand je le vois».

Je vous suggère que toute définition que vous pouvez trouver conduira à certains langages qui, selon nous, ne sont pas des langages de "programmation" seront classés comme tels; ou à certaines langues que nous ressentons tous sommes « programmation » langues seront classés comme ne l' être.

Pourquoi ne pas simplement aller avec votre instinct? J'utilise une heuristique simple: un langage de programmation est un langage dont le but principal, à mon avis et selon mes observations, est d'écrire des programmes. Ne pas baliser le contenu. Ne pas transformer XML. Pour écrire des programmes à usage général. Je préfère simplement le savoir quand je le vois plutôt que d'essayer de définir une définition formelle, et je ne vois aucune valeur réelle qui puisse résulter de la tentative d'une telle définition.

Carson63000
la source
Mais maintenant, vous limitez les "langages de programmation" aux "langages de programmation à usage général". C'est ce que les gens veulent généralement dire quand ils parlent de "langage de programmation", mais chercher exactement quelles sont les caractéristiques déterminantes d'un "langage de programmation" a aussi son intérêt à comprendre ce que sont les langages de programmation, comment ils fonctionnent et quelles sont leurs limites. Par exemple, tout programmeur qualifié doit reconnaître le problème de l'arrêt lorsqu'il le rencontre, ce qui serait difficile sans étudier les limites théoriques des langages de programmation.
JesperE
@JesperE: Je suis heureux de limiter mon jugement «Je le sais quand je le vois» aux langages de programmation qui sont au moins assez généraux. Je suis également en désaccord avec le fait que "tout programmeur qualifié" a besoin de toute connaissance du problème de l'arrêt - je sais que ma connaissance de celui-ci de ma formation informatique formelle n'a jamais été d'une pertinence pour moi dans près de deux décennies de développement professionnel.
Carson63000
1
Si vous n'avez pas eu à en parler, c'est probablement bien. Cela ne signifie pas qu'il n'est pas important de savoir. Vous ne jugez pas la qualité de votre ceinture de sécurité en fonction de la fréquence d'utilisation, n'est-ce pas?
JesperE
D'après votre heuristique, elisp est-il un langage de programmation?
Brian
@Brian: intéressant! Je suppose que j'ai toujours simplement pensé à elisp comme une implémentation de Lisp, qui est clairement un langage de programmation, même si cette implémentation particulière est beaucoup plus spécifique dans sa portée.
Carson63000
2

Les langages de balisage traitent principalement de la façon dont les informations sont affichées et ils manquent généralement dans l'infrastructure de programmation des variables, des mathématiques, de la comparaison, de la prise de décision (si ... alors), des boucles (pendant, pendant), etc.

Le HTML en lui-même est statique; c'est-à-dire, un peu comme un traitement de texte, il est censé présenter les informations telles quelles. Ce n'est qu'avec l'ajout d'une sorte de langages de programmation (généralement des langages de script comme JavaScript, PHP, etc.) que les pages Web HTML peuvent avoir un contenu "changeant". Les langages de script fournissent les possibilités de "programmation" avec des variables, des mathématiques, des comparaisons, la prise de décision, des boucles, etc.

hekimgil
la source
0

HTML est un langage déclaratif. Il ne fait pas grand-chose à lui seul, il décrit simplement un document et son contenu (en utilisant des balises qui ont une signification sémantique).

C ++ d'autre part fait quelque chose. Il définit des fonctions et des classes, mais il décrit également comment ces fonctions doivent fonctionner ensemble, comment leurs entrées et sorties sont liées de manière significative et comment l'application doit s'exécuter dans son ensemble.

Radu Potop
la source