Langage de programmation vs Langage de balisage vs Langage de script


38

Jusqu'à présent, je ne connais pas les différences essentielles entre ces trois. Quand quelqu'un me pose des questions à ce sujet, je leur dis simplement que C # est un langage de programmation, HTML et XML sont des langages de balisage, et que JavaScript et VBScript sont des langages de script. Mais quelles sont les différences clés qui les distinguent les uns des autres?


N'oubliez pas d'interroger les langues!
Kyle Delaney

Réponses:


38

Permettez-moi d'essayer de trouver une ligne de démarcation entre ces trois types de langage. Bien entendu, il y aura de nombreuses exceptions et contre-exemples, car ce n’est que mon opinion.

  • Un langage de balisage est utilisé pour contrôler la présentation des données, comme "représente ces noms d'utilisateurs sous forme de liste à puces ou de tableau".

  • Un langage de script est utilisé pour assurer la médiation entre les programmes afin de générer des données. Ceci est particulièrement vrai pour les langages de script shell comme bash, mais si vous réfléchissez à cela, Python ou Perl sont également venus de la nécessité d'accomplir des tâches sous UNIX sans écrire de programme en C. Le programme que vous contrôlez la plupart du temps dans ces langages est l'interprète de la langue elle - même , qui accomplit des tâches générales pour vous. Les autres programmes typiques avec lesquels vous interagissez sont les serveurs de base de données ou les serveurs Web.

    Pour revenir à la métaphore de la liste d'utilisateurs, dans un langage de script, vous demandez à la base de données "donnez-moi tous les noms d'utilisateur", puis au serveur Web "envoyez cette liste d'utilisateurs à ce demandeur".

  • Un langage de programmation est utilisé pour transformer les données . Pour ce faire, il crée des instructions de la CPU qui réécrivent les données d'entrée dans la sortie. J'espère que la sortie souhaitée . Des exemples de transformation de données consistent à calculer une somme parmi un certain nombre d’addends, ou à résoudre un système d’équations différentielles à partir d’un ensemble de conditions, ou à écrire et lire à partir d’une structure arborescente de manière cohérente, à partir d’une séquence de requêtes simultanées éventuelles. .

    Pour revenir à la métaphore de la liste des utilisateurs, vous écrivez dans un langage de programmation comment parcourir une table d'enregistrements, extraire de chaque enregistrement le champ "nom" et les renvoyer au demandeur.

Notez que les langages de script sont un sous-ensemble des langages de programmation, c’est-à-dire qu’un langage peut être à la fois "script" et "programmation": Python est régulièrement utilisé pour "faire la médiation entre les programmes", ainsi que pour "transformer les données". Il existe d’autres langages, comme Java, qui sont rarement utilisés pour "faire la médiation entre programmes", non pas parce que cela est impossible, mais parce qu’ils ne sont pas conçus pour rendre cela facile. La principale caractéristique d'un langage de script est qu'il peut orchestrer d'autres programmes, tout comme un script donne à un acteur le moyen de commencer sa partie.


7
Les langages de script sont formellement une sous-classe de langages de programmation. (J'ai aussi vu des langages comme C et Java être interprétés intégralement, avec un REPL; la barrière fuit dans les deux sens…)
Donal Fellows

1
@DonalFellows: vous avez raison. J'ai répondu avec cela à l'esprit, mais je n'ai pas explicitement utilisé l'expression "l'une est un sous-ensemble de l'autre". En outre, je n'ai pas laissé entendre qu'une catégorie est interprétée et l'autre non, car je savais que la distinction était faible.
logc

1
@DonalFellows: J'ai modifié ma réponse pour mentionner explicitement que l'un est un sous-ensemble de l'autre.
logc

1
Je soutiens cette réponse comme étant le seul (jusqu'à présent) qui affirme que les langages de balisage sont des langages décrivant la structure des données.
Idan Arye

3
@ JörgWMittag: Je savais qu'il y aurait des exceptions, c'est pourquoi j'ai commencé par "il y aura de nombreuses exceptions" :) Sinon, où dans ma réponse est-ce que je sous-entends qu'un langage de script n'est pas compilé? J'ai essayé de me concentrer sur le but des langues précisément pour éviter cet écueil ...
logc

11

Un langage de balisage est un langage utilisé pour représenter des données structurées. Par exemple, HTML permet de spécifier qu'une partie du document est un titre ou qu'une autre partie est une liste, par comparaison avec un document à texte plat.

Les langages de balisage ne sont pas considérés comme des langages de programmation¹.

La différence avec les langages de programmation n'est pas toujours évidente. Par exemple, XSLT est un langage complet de Turing², mais est basé sur XML, un langage de balisage.

Wikipedia lui-même fait des efforts importants pour éviter de qualifier XSLT de langage de programmation ou de langage de balisage. Il dit seulement que c'est un langage déclaratif et qu'il utilise «des techniques d'optimisation trouvées dans les langages de programmation fonctionnels et les langages de requête de bases de données».

Un langage de script est un langage de programmation interprété plutôt que compilé, ce qui signifie que les langages de script représentent un sous-ensemble de tous les langages de programmation.

Il n'est pas toujours évident de savoir si un langage de programmation est un langage de script, tout comme il n'est pas toujours évident de savoir si un langage est compilé ou interprété. Par exemple, PHP peut être compilé en un bytecode intermédiaire3 puis traduit en code machine par le compilateur JIT, tout en restant considéré comme un langage de script.

Voir aussi: Splitting Meta-Hairs de Steven Lott.


¹ “XML n'est pas un langage de programmation”. Voir XML en 10 points .

² “XSLT est un langage complet de Turing” Voir XSLT sur Wikipedia

³ “HHVM compile Hack et PHP en un bytecode intermédiaire. Ce bytecode est ensuite traduit dynamiquement au code machine x64 au moment de l'exécution par un compilateur juste-à-temps (JIT). »Voir HHVM .

Languages Langages de script dans Liste des langages de programmation par type sur Wikipedia.


16
Les langues ne sont jamais compilées ou interprétées. Les langues sont juste . La compilation et l'interprétation sont des traits du compilateur ou interprète (duh!) Utilisé pour implémenter le langage. Les termes "langage compilé" ou "langage interprété" n'ont même pas de sens, ils appartiennent à différents niveaux d'abstraction. Si Englisch était une langue dactylographiée, "langue compilée" serait une TypeError! Chaque langue peut être implémentée par un interprète, chaque langue peut être implémentée par un compilateur.
Jörg W Mittag

@ JörgWMittag "Chaque langage peut être implémenté par un interprète, chaque langage peut être implémenté par un compilateur" - 100% vrai?
Spartacus

@spartacus J'appelle ça un hésitant "non". Je pense que toute langue pouvant être compilée peut aussi être interprétée (il suffit d'exécuter l'instruction au lieu de la sauvegarder), mais j'ai entendu dire que l' homoiconicité restreint sévèrement les possibilités de compilation
Izkata

@Izkata Je ne dirais pas que l'homoiconicity en soi change la possibilité de compilation, mais plutôt que la métaprogrammation qu'elle permet signifie que beaucoup de compilation doit être différée à l'exécution, voire pas du tout.
Mark Hurd

1
La partie "Langage de script" est totalement fausse, comme l'a déjà souligné "Jörg W Mittag". Et en plus, il n’existe aucune explication concernant le "langage de programmation".
David Raab

2

Pour produire une taxonomie quelconque, vous devez d’abord vous poser quelques questions:

  • Est-ce que les objets que je vais mettre dans les relations définies correctement?
  • Si oui, existent-ils réellement?
  • Est-ce que je me limite à un type spécifique de relations entre objets ou le système doit-il uniquement utiliser des relations légitimes?

Généralement, lorsque vous entendez une question comme celle que vous avez posée, la réponse attendue repose sur plusieurs hypothèses. Par exemple, il est naturel de supposer que puisque toutes ces langues sont des langues, elles doivent former une hiérarchie sous un concept plus général de langue, ou qu'elles partitionnent l'espace de toutes les langues, ou qu'elles sont des sous-ensembles les unes des autres.

Langages de programmation

Malheureusement, rien de ce qui précède ne semble être vrai. Peut-être que seuls les langages de programmation ont une définition la plus commune. Les langages de programmation sont des langages qui codent des programmes. Le codage signifie qu'un mot dans la langue peut être interprété comme un programme (une séquence d'actions). Les langages de programmation informatique sont un sous-ensemble de ceux-ci. Exemples de langages de programmation non informatiques: une liste d'épicerie, interprétée comme des instructions pour un acheteur dans un supermarché, un ADN interprété par transcription de peptides, un enregistrement musical analogique servant de programme pour un magnétophone.

Ce sont donc les langages de programmation informatique qui programment les ordinateurs.

Langages de script

Ne sont pas bien définis. Le sens de ce terme est ouvert à interprétation. Historiquement, il semblerait que les langages de programmation ne disposant pas d'un compilateur pour produire du code machine s'appellent ainsi. Selon les normes actuelles, cela inclurait tous les langages de programmation populaires sans assembleurs dans cette catégorie. Même les langages de bas niveau, tels que C, nécessitent un environnement d'exécution avec des procédures préexistantes. Ainsi, les fichiers binaires obtenus en compilant un programme C ne sont pas entièrement du code machine, mais appellent également le moteur d'exécution de temps en temps.

Langages de balisage

Ne sont pas bien définis. Chaque fois que le terme est utilisé, l’intention semble être de décrire un langage de programmation avec un lexique très limité, principalement utilisé pour générer une image visuelle ou audio. Il peut être difficile de voir XML comme une programmation programmée, mais si vous regardez le balisage Man ou TexInfo, vous verrez que les caractères "spéciaux" sont en réalité des instructions de l'interpréteur.

Il est également possible de donner une interprétation "de programmation" pour le langage XML, ce qui pourrait ressembler à ceci:

< := 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
...

En bout de ligne: cette division à partir d’aujourd’hui ne semble pas très significative, elle ne peut que vous donner une idée du type de langage auquel vous êtes confronté, mais elle ne vous fournira pas de définition rigoureuse.


1

Les trois concepts se chevauchant quelque peu, vous pouvez donc avoir des arguments sans fin, que XSLT soit un langage de programmation ou que Python soit un langage de script ou non.

Un langage de balisage est un langage qui représente des données structurées dans un format textuel . HTML est le plus connu, mais il existe de nombreux formats à des fins diverses, comme SVG pour les graphiques, WSDL pour décrire les interfaces de service Web, resx pour les fichiers de recherche. net et ainsi de suite. En règle générale, un langage de balisage ne décrit pas un processus ou un algorithme (comme le fait un langage de programmation), mais des données pures. Mais c’est aussi une idée fondamentale de CS: il existepas de différence fondamentale entre le code et les données. Certains langages de balisage tels que XSLT ont des boucles et des conditions comme un "vrai" langage de programmation, et certains langages de programmation tels que Prolog sont des données presque pures sans processus spécifié dans le code. Et Lisp rend la ligne tellement floue qu'elle traite son propre code comme un format de données structuré.

En ce qui concerne la distinction entre langage de programmation et langage de script , il s’agit d’une distinction historique presque obsolète aujourd’hui. Autrefois, nous avions compilé des programmes autonomes écrits en C, puis des langages de script tels que les scripts shell ou Word Basic, interprétés et conçus pour manipuler d'autres programmes et outils. Aujourd'hui, la ligne est assez floue avec beaucoup de compromis, car nous avons différents niveaux de compilation et d'interprétation (compilation de code intermédiaire, compilation JIT, etc.) et diverses API indépendantes du langage. Donc, la distinction n'est pas utile.


0

Un langage de balisage est utilisé pour décrire des données plutôt que de la logique. Une utilisation typique d’eux est de décrire la mise en forme de documents, HTML est conçu pour cela par exemple. Mais ils sont aussi parfois utilisés comme formats de données généraux. XML est un langage de balisage souvent utilisé pour décrire simplement des données.

La différence entre la programmation et les langages de script est très floue, les deux ont tendance à être complète en ce sens que vous pouvez résoudre tous les problèmes informatiques qui peuvent en résulter. Il existe des «astuces» générales que vous pouvez rechercher pour savoir si un langage est un langage de programmation ou non.

  • Les langages de script sont souvent interprétés plutôt que compilés, ou du moins offrent la possibilité d'être interprétés.
  • Les langages de script sont souvent conçus pour fonctionner rapidement plutôt que pour fonctionner rapidement.
  • Les langages de script ont tendance à venir avec des bibliothèques standard très étendues. Beaucoup de langages de programmation le font aussi, mais c'est plus optionnel pour eux.

Mais au final, si un langage est un langage de script ou un langage de programmation, il s’agit davantage d’une convention que de critères stricts. Même les astuces ci-dessus ne sont que des tendances, vous trouverez des langages de programmation qui répondent à tous les critères d'un langage de script mais qui sont toujours considérés comme des langages de programmation.


4
Les langues ne sont jamais compilées ou interprétées. Les langues sont juste . La compilation et l'interprétation sont des traits du compilateur ou interprète (duh!) Utilisé pour implémenter le langage. Les termes "langage compilé" ou "langage interprété" n'ont même pas de sens, ils appartiennent à différents niveaux d'abstraction. Si Englisch était une langue dactylographiée, "langue compilée" serait une TypeError! Chaque langue peut être implémentée par un interprète, chaque langue peut être implémentée par un compilateur. Il est même possible de générer automatiquement un compilateur à partir d'un interprète et inversement.
Jörg W Mittag

@ JörgWMittag, il est vrai qu'aucun langage n'est compilé ou interprété de manière inhérente. Mais il existe souvent des conventions sur la manière dont il est généralement exécuté, ce dont je parle principalement ici.
Pierre Andersson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.