Mi è stato detto che HTML è un linguaggio di markup, C ++ è un linguaggio di programmazione, cosa potrebbe fare la differenza?


22

I miei amici di programmazione mi dicono sempre che HTML è un linguaggio di markup e C ++ è un linguaggio di programmazione. Quando chiedo loro qual è la differenza, non mi danno mai una risposta ragionevole.

Cosa potrebbe rendere una chiamata C ++ un linguaggio di programmazione e HTML no?


5
Intendi altro che essere Turing completo?
Manoj R,

1
@ManojR Non tutti i linguaggi completi di Turing sono considerati linguaggi di programmazione, ad esempio XSLT.
yannis,

Per quanto riguarda la chiusura, vedere il Q / A in meta all'indirizzo meta.programmers.stackexchange.com/q/5397/70298
miraculixx,

1
Grande modifica @gnat, grazie. Domanda riaperta, rimossi commenti obsoleti.
yannis,

1
@YannisRizos Ho appena copiato i chiarimenti forniti dall'OP nei commenti . Mi chiedo perché così tanti utenti inseriscano cose importanti sui propri post nei commenti, anziché modificarli; anch'io modifico quasi sempre i miei post in casi del genere
moscerino del

Risposte:


45

Un linguaggio di programmazione è una notazione progettata per passare istruzioni a una macchina. In base a tale definizione, sia C ++ che HTML sono linguaggi di programmazione, così come la notazione che Joseph Marie Jacquard usò nel 1801 per programmare i suoi telai .

Tuttavia, con la proliferazione di linguaggi utilizzati per strutturare e / o descrivere i dati, la definizione di un linguaggio di programmazione si è spostata per includere solo linguaggi in grado di esprimere algoritmi. Questa è la definizione più comune oggi ed esclude linguaggi come HTML o XML.

Al centro dell'attuale definizione c'è il concetto di completezza di Turing . La maggior parte dei linguaggi di programmazione sono completi di Turing e la completezza di Turing viene spesso citata come l'unica caratteristica critica che separa un linguaggio di programmazione da qualsiasi altro linguaggio del computer. Questo è abbastanza buono come regola generale, ma non del tutto accurato:

  1. Alcuni linguaggi completi non Turing sono considerati linguaggi di programmazione, ad esempio Beneficenza .
  2. Alcuni linguaggi che non sono generalmente considerati linguaggi di programmazione sono Turing completi, ad esempio XSLT .
  3. La completezza di Turing da sola non dice molto sull'utilità di una lingua .

A seconda del contesto, è possibile selezionare qualsiasi definizione desiderata.

Modificare:

Sia ulteriormente noto, un'implementazione di una lingua non conferisce caratteristiche alla lingua stessa, ad esempio: le specifiche di una lingua possono definire un linguaggio completo turing, qualcuno potrebbe implementarlo a casaccio lasciando fuori completezza turing. Questa implementazione essendo non turing completa non significa tuttavia che il linguaggio stesso non sia completo (piuttosto significa probabilmente che l'implementazione non è conforme). I dettagli di una lingua e i dettagli di una particolare implementazione di una lingua devono essere riconosciuti come cose separate, per questo non è corretto definire una lingua interpretata o compilata ecc.


6
Potresti approfondire il "XSLT non considerato un linguaggio di programmazione". Non l'ho mai visto e IMO metterei persino in dubbio la conoscenza o la competenza di qualcuno con i PL quando lo pronunciano. Non riesco nemmeno a pensare ad alcun motivo per cui XSLT non debba essere considerato un PL (XSLT potrebbe essere un caso lieve di turing tarpit ma questo è un altro problema).
bhaak,

@bhaak Non sto dicendo che non dovrebbe essere considerato un linguaggio di programmazione. I linguaggi di trasformazione dei dati non sono generalmente pensati come linguaggi di programmazione, che non dicono assolutamente nulla se lo sono o non sono linguaggi di programmazione. Ho visto la logica di business in XSLT e personalmente la considero un linguaggio di programmazione. Ma probabilmente non lo farei, se non l'avessi visto per la prima volta al lavoro. In ogni caso, a chi importa?
yannis,

È possibile aggiungere una o due frasi su ciò che significa completare il turing.
phant0m


@ think123 Non credo di poter dare una definizione più semplice di quella di Wikipedia, e ho già collegato l'articolo pertinente nella risposta.
yannis,

5

La frase "Lo so quando lo vedo" è un'espressione colloquiale in base alla quale un oratore tenta di classificare un fatto o un evento osservabile, sebbene la categoria sia soggettiva o priva di parametri chiaramente definiti. La frase fu notoriamente usata dal giudice della Corte Suprema degli Stati Uniti Potter Stewart per descrivere il suo test di soglia per l'oscenità in Jacobellis v. Ohio (1964).

- Articolo di Wikipedia "Lo so quando lo vedo"

Come l'oscenità, penso che tutti conosciamo un linguaggio di programmazione quando ne vediamo uno. Chiaramente l'OP fa, dal momento che hai già giudicato C ++ come un linguaggio di programmazione e HTML non lo è.

Allora, qual è esattamente l'obiettivo di perseguire una definizione formale? Yannis ha già dato una grande panoramica del perché la definizione più popolare, completezza di Turing, è errata: porta alla categorizzazione che sfidano il test "Lo so quando lo vedo".

Ti ho detto che qualsiasi definizione che puoi trovare porterà ad alcune lingue che tutti noi riteniamo non siano linguaggi di "programmazione" che saranno classificati come tali; o ad alcune lingue che tutti riteniamo essere "programmanti", le lingue saranno classificate come non così.

Perché non andare semplicemente con il tuo intestino? Uso una semplice euristica: un linguaggio di programmazione è un linguaggio il cui scopo principale, secondo me e secondo le mie osservazioni, è scrivere programmi. Non contrassegnare il contenuto. Non trasformare XML. Per scrivere programmi per scopi generici. Preferirei solo conoscerlo quando lo vedo piuttosto che cercare di inchiodare una definizione formale, e non vedo alcun valore genuino che può venire dal tentativo di tale definizione.


Ma ora stai limitando "linguaggi di programmazione" a "linguaggi di programmazione per scopi generici". Quest'ultimo è ciò che le persone generalmente intendono quando dicono "linguaggio di programmazione", ma perseguire esattamente quali sono le caratteristiche distintive di un "linguaggio di programmazione" ha anche senso capire quali sono i linguaggi di programmazione, come funzionano e quali sono i loro limiti. Ad esempio, qualsiasi programmatore esperto deve riconoscere il problema di arresto quando lo incontrano, il che sarebbe difficile senza studiare i confini teorici dei linguaggi di programmazione.
JesperE,

@JesperE: Sono felice di limitare il mio giudizio "Lo so quando lo vedo" a linguaggi di programmazione che sono almeno abbastanza generici. Inoltre, non sono d'accordo sul fatto che "qualsiasi programmatore esperto" abbia bisogno di qualsiasi conoscenza del problema di arresto - so che la mia conoscenza di esso dalla mia educazione informatica formale non è mai stata rilevante per me in quasi due decenni di sviluppo professionale.
Carson63000,

1
Se non hai dovuto sollevarlo, probabilmente è buono. Ciò non significa che non sia importante saperlo. Non giudichi la qualità della tua cintura di sicurezza dalla frequenza con cui è stata utilizzata, vero?
JesperE,

Secondo la tua euristica, elisp è un linguaggio di programmazione?
Brian,

@Brian: interessante! Immagino di aver sempre pensato a elisp come un'implementazione di Lisp, che chiaramente è un linguaggio di programmazione, anche se questa particolare implementazione è molto più specifica nel suo scopo.
Carson63000,

2

I linguaggi di markup riguardano principalmente il modo in cui le informazioni vengono visualizzate e in genere mancano nell'infrastruttura di programmazione di variabili, matematica, confronto, processo decisionale (se ... quindi), loop (per, mentre), ecc.

HTML da solo è statico; cioè, proprio come un elaboratore di testi, ha lo scopo di presentare le informazioni così come sono. Solo con l'aggiunta di una sorta di linguaggi di programmazione (di solito linguaggi di scripting come JavaScript, PHP, ecc.) Le pagine Web HTML possono avere un contenuto "mutevole". I linguaggi di scripting forniscono le possibilità di "programmazione" con variabili, matematica, confronti, processi decisionali, loop, ecc.


0

HTML è un linguaggio dichiarativo. Non fa molto da solo, descrive solo un documento e il suo contenuto (usando tag che hanno un significato semantico).

Il C ++ invece fa qualcosa. Definisce funzioni e classi, ma descrive anche come queste funzioni dovrebbero lavorare insieme, come i loro input e output siano collegati in modo significativo e come l'applicazione dovrebbe funzionare nel suo insieme.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.