Mi è stato detto che l'HTML è un linguaggio di marcatura, il C ++ è un linguaggio di programmazione, cosa potrebbe fare questa differenza?

22

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

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

    
posta think123 28.12.2012 - 08:51
fonte

4 risposte

45

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

Tuttavia, con la proliferazione dei linguaggi utilizzati per strutturare e / o descrivere i dati, la definizione di un linguaggio di programmazione è stata spostata per includere solo le lingue che sono in grado di esprimere algoritmi. Questa è la definizione più comune oggi e 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 è completa 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 informatico. Questo è abbastanza buono come regola generale, ma non del tutto accurato:

  1. Alcune lingue complete non di Turing sono considerate linguaggi di programmazione, ad esempio Beneficenza .
  2. Alcune lingue che non sono generalmente considerate linguaggi di programmazione sono completate da Turing, ad esempio XSLT .
  3. La completezza di Turing da sola non dice molto sull'utilità di una lingua .

A seconda del contesto, puoi scegliere qualsiasi definizione tu voglia.

Modifica:

Lasciamo che sia noto, l'implementazione di una lingua non conferisce caratteristiche al linguaggio stesso, ad esempio: le specifiche di una lingua possono definire un linguaggio completo, qualcuno potrebbe implementarlo a casaccio, lasciandone fuori la completezza. Questa implementazione essendo completa non-turing non significa tuttavia che il linguaggio stesso non sia completo (piuttosto probabilmente significa 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, ecco perché è impreciso chiamare una lingua interpretata o compilata ecc.

    
risposta data 28.12.2012 - 09:36
fonte
5

The phrase "I know it when I see it" is a colloquial expression by which a speaker attempts to categorize an observable fact or event, although the category is subjective or lacks clearly defined parameters. The phrase was famously used by United States Supreme Court Justice Potter Stewart to describe his threshold test for obscenity in Jacobellis v. Ohio (1964).

- "Lo so quando lo vedo" articolo di Wikipedia

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

Quindi qual è esattamente l'obiettivo di perseguire una definizione formale? Yannis ha già dato una grande carrellata di motivi per cui la definizione più popolare, la completezza di Turing, è imperfetta: porta a una categorizzazione che sfidano il test "Lo so quando lo vedo".

Ti ho detto che la qualsiasi definizione che puoi ottenere porterà ad alcune lingue che tutti noi riteniamo siano non "programming" le lingue saranno classificate come così; o in alcune lingue che tutti noi riteniamo sono le "lingue di programmazione" saranno classificate come non come tali.

Perché non vai solo con l'intestino? Uso una euristica semplice: un linguaggio di programmazione è una lingua 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 generali. Preferirei semplicemente saperlo quando lo vedo piuttosto che cercare di definire una definizione formale, e non vedo alcun vero valore che possa venire dal tentativo di una tale definizione.

    
risposta data 28.12.2012 - 21:51
fonte
2

I linguaggi di markup si occupano principalmente di come vengono visualizzate le informazioni e generalmente non dispongono dell'infrastruttura di programmazione di variabili, matematica, confronto, processo decisionale (se ... allora), cicli (per, mentre), ecc.

HTML di per sé è statico; cioè, proprio come un word-processor, è pensato per presentare l'informazione così com'è. Solo con l'aggiunta di una sorta di linguaggi di programmazione (in genere linguaggi di scripting come JavaScript, PHP, ecc.) Le pagine Web HTML possono avere un contenuto "modificabile". I linguaggi di scripting forniscono le possibilità di "programmazione" con variabili, matematica, confronti, decisioni, loop, ecc.

    
risposta data 03.01.2013 - 00:11
fonte
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).

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

    
risposta data 01.01.2013 - 21:32
fonte

Leggi altre domande sui tag