Linguaggio di programmazione vs Markup Language vs Scripting Language


38

Fino ad ora non conosco le differenze CHIAVE tra questi tre. Quando qualcuno me lo chiede, dico solo che C # è un linguaggio di programmazione, HTML e XML sono Markup Language e JavaScript e VBScript sono linguaggi di scripting. Ma quali sono le differenze chiave che le distinguono l'una dall'altra?


Non dimenticare di interrogare le lingue!
Kyle Delaney,

Risposte:


38

Vorrei tentare di trovare una linea di demarcazione tra questi tre tipi di linguaggio. Naturalmente, ci saranno numerose eccezioni e controesempi, dal momento che questa è solo la mia opinione.

  • Un linguaggio di markup viene utilizzato per controllare la presentazione dei dati, ad esempio "rappresentare questi nomi utente come elenco puntato o come tabella".

  • Un linguaggio di scripting viene utilizzato per mediare tra i programmi al fine di generare dati. Ciò è particolarmente vero per i linguaggi di shell scripting come bash, ma se ci rifletti, anche Python o Perl sono venuti dalla necessità di eseguire attività in UNIX senza scrivere un programma in C. Il programma che controlli la maggior parte del tempo in quelle lingue è l'interprete della lingua stessa , che svolge compiti generali per te. Altri programmi tipici con cui interagisci sono server di database o server Web.

    Tornando alla metafora dell'elenco utenti, in un linguaggio di scripting chiedi al database "dammi tutti i nomi utente", quindi chiedi al server web "invia questo elenco utenti a questo richiedente".

  • Un linguaggio di programmazione viene utilizzato per trasformare i dati . Lo fa creando istruzioni CPU che riscrivono i dati di input nell'output; si spera, l' output desiderato . Esempi di trasformazione dei dati sono calcolare una somma da un numero di addend, o risolvere un sistema di equazioni differenziali da un insieme di condizioni, o scrivere e leggere da una struttura ad albero in modo coerente, data una sequenza di query eventualmente simultanee .

    Tornando alla metafora dell'elenco utenti, in un linguaggio di programmazione si scrive come attraversare una tabella di record, estrarre da ciascun record il campo "nome" e restituirli tutti al richiedente.

Si noti che i linguaggi di scripting sono un sottoinsieme di linguaggi di programmazione, ad esempio un linguaggio può essere sia "scripting" che "programmazione": Python viene regolarmente utilizzato per "mediare tra i programmi" e anche per "trasformare i dati". Esistono altri linguaggi come Java che raramente vengono utilizzati per "mediare tra i programmi", non perché ciò sia impossibile, ma perché non sono progettati per renderlo facile. La caratteristica chiave di un linguaggio di scripting è che può orchestrare altri programmi, proprio come una sceneggiatura dà lo spunto a un attore per iniziare la sua parte.


7
I linguaggi di scripting sono formalmente una sottoclasse di linguaggi di programmazione. (Ho visto anche lingue come C e Java essere completamente interpretate, con un REPL; la barriera è trapelata in entrambi i modi ...)
Donal Fellows

1
@DonalFellows: hai ragione. Ho risposto con questo in mente, ma non ho usato esplicitamente l'espressione "l'uno è un sottoinsieme dell'altro". Inoltre, non ho insinuato che una categoria sia interpretata e l'altra no, perché sapevo che si tratta di una distinzione debole.
logc,

1
@DonalFellows: ho modificato la mia risposta per menzionare esplicitamente che uno è un sottoinsieme dell'altro.
logc,

1
Sostengo questa risposta per essere l'unico (finora) a sostenere che i linguaggi di markup sono linguaggi che descrivono la struttura dei dati.
Idan Arye,

3
@ JörgWMittag: sapevo che ci sarebbero state delle eccezioni, ecco perché ho iniziato con "ci saranno numerose eccezioni" :) Altrimenti, dove nella mia risposta sottintendo che un linguaggio di scripting non è stato compilato? Ho cercato di concentrarmi sullo scopo delle lingue proprio per evitare quella trappola ...
logc

11

Un linguaggio di markup è un linguaggio utilizzato per rappresentare dati strutturati. Ad esempio, HTML consente di specificare che una parte del documento è un titolo o un'altra parte è un elenco, rispetto a un documento di testo semplice.

I linguaggi di markup non sono considerati linguaggi di programmazione¹.

La differenza con i linguaggi di programmazione non è sempre evidente. Ad esempio, XSLT è un linguaggio completo di Turing², ma si basa su XML, che è un linguaggio di markup.

Wikipedia stessa compie importanti sforzi per evitare di qualificare XSLT come linguaggio di programmazione o linguaggio di markup. Dice solo che è un linguaggio dichiarativo e che utilizza "tecniche di ottimizzazione presenti nei linguaggi di programmazione funzionale e nei linguaggi di query del database".

Un linguaggio di scripting è un linguaggio di programmazione che viene interpretato, piuttosto che compilato, il che significa che i linguaggi di scripting rappresentano un sottoinsieme di tutti i linguaggi di programmazione.

Non è sempre ovvio se un linguaggio di programmazione sia un linguaggio di scripting, come non è sempre ovvio se un linguaggio sia compilato o interpretato. Ad esempio, PHP può essere compilato in bytecode³ intermedio e quindi tradotto in codice macchina dal compilatore JIT, pur essendo ancora considerato come linguaggio di scripting⁴.

Vedi anche: Splitting Meta-Hairs di Steven Lott.


¹ "XML non è un linguaggio di programmazione". Vedi XML in 10 punti .

² "XSLT è un linguaggio completo di Turing" Vedi XSLT su Wikipedia

³ “HHVM compila Hack e PHP in un bytecode intermedio. Questo bytecode viene quindi tradotto dinamicamente in codice macchina x64 in fase di esecuzione da un compilatore just-in-time (JIT). ”Vedi HHVM .

Linguaggi di scripting in Elenco di linguaggi di programmazione per tipo su Wikipedia.


16
Le lingue non vengono mai compilate o interpretate. Le lingue lo sono . Compilazione e interpretazione sono tratti del compilatore o dell'interprete (duh!) Utilizzati per implementare il linguaggio. I termini "linguaggio compilato" o "linguaggio interpretato" non hanno nemmeno senso, appartengono a diversi livelli di astrazione. Se l'inglese fosse una lingua tipizzata, la "lingua compilata" sarebbe una TypeError! Ogni lingua può essere implementata da un interprete, ogni lingua può essere implementata da un compilatore.
Jörg W Mittag,

@ JörgWMittag "Ogni lingua può essere implementata da un interprete, ogni lingua può essere implementata da un compilatore" - 100% vero?
spartacus,

@spartacus lo chiamo esitante "no". Penso che qualsiasi linguaggio compilabile potrebbe anche essere interpretato (basta eseguire le istruzioni invece di salvarlo), ma ho sentito che l' omoiconicità limita gravemente la possibilità di compilazione
Izkata

@Izkata Non direi che l'omoiconicità stessa cambia la possibilità di compilazione, ma piuttosto la metaprogrammazione che consente significa che molta compilazione deve essere rinviata al runtime, se non del tutto.
Mark Hurd,

1
La parte "Linguaggio di scripting" è puramente sbagliata come già indicato da "Jörg W Mittag". E in cima non c'è spiegazione di "Linguaggio di programmazione".
David Raab,

2

Per produrre qualsiasi tipo di tassonomia, è necessario innanzitutto porsi alcune domande:

  • Gli oggetti che inserirò in qualsiasi relazione saranno definiti correttamente?
  • In tal caso, esistono davvero?
  • Mi sto limitando solo a un tipo specifico di relazioni tra oggetti, oppure esiste un requisito prestabilito affinché il sistema usi solo relazioni legittime?

In genere, quando si sente una domanda come quella che si è posta, la risposta prevista fa diverse ipotesi. Ad esempio, è naturale presumere che, poiché tutte queste sono lingue, devono formare una gerarchia sotto un concetto più generale di lingua, o che suddividono lo spazio di tutte le lingue o che sono sottoinsiemi l'uno dell'altro.

Linguaggi di programmazione

Sfortunatamente, nessuna delle precedenti sembra essere vera. Forse solo i linguaggi di programmazione hanno una definizione su cui concordare. I linguaggi di programmazione sono linguaggi che codificano i programmi. La codifica significa che una parola nella lingua può essere interpretata come un programma (una sequenza di azioni). I linguaggi di programmazione per computer sono un sottoinsieme di questi. Esempi di linguaggi di programmazione non informatici: una lista della spesa, interpretata come le indicazioni per un acquirente in un supermercato, il DNA interpretato trascrivendo i peptidi, un disco musicale analogico che funge da programma per un registratore.

I linguaggi di programmazione per computer sono quindi quelli che programmano i computer.

Linguaggi di scripting

Non sono ben definiti. È aperto all'interpretazione del significato di questo termine. Storicamente, sembrerebbe che i linguaggi di programmazione che non avevano un compilatore per produrre codice macchina fossero stati chiamati in questo modo. Secondo gli standard odierni, tutti i linguaggi di programmazione più diffusi senza gli assemblatori rientrano in questa categoria. Anche i cosiddetti linguaggi di basso livello come C richiedono un runtime con procedure preesistenti, quindi i binari ottenuti compilando un programma C non sono interamente codice macchina, ma chiamano ogni tanto il runtime.

Linguaggi di markup

Non sono ben definiti. Ogni volta che viene usato il termine, l'intenzione sembra essere quella di descrivere un linguaggio di programmazione con un lessico molto limitato, usato principalmente per generare immagini visive o audio. Può essere difficile vedere XML come qualcosa di programmabile, ma se guardi il markup Man o TexInfo, vedrai che i caratteri "speciali" sono in realtà istruzioni dell'interprete.

È anche possibile dare un'interpretazione di "programmazione" per il linguaggio XML, qualcosa che potrebbe andare così:

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

In conclusione: questa divisione ad oggi, non sembra molto significativa, può solo darti un'idea del tipo di linguaggio che stai affrontando, ma non ti fornirà una definizione rigorosa.


1

Tutti e tre i concetti si sovrappongono in qualche modo, quindi è possibile ottenere infinite discussioni sul fatto che XSLT sia un linguaggio di programmazione o che Python sia o meno un linguaggio di scripting.

Un linguaggio di markup è un linguaggio che rappresenta i dati strutturati in un formato testuale , l'HTML è il più noto, ma ci sono numerosi formati per vari scopi, come SVG per la grafica, WSDL per la descrizione delle interfacce dei servizi Web, resx per i file di risorse. netto e così via. Una regola empirica è che un linguaggio di markup non descriva un processo o un algoritmo (come fa un linguaggio di programmazione) ma sono dati puri. Ma è anche un fondamentale CS intuizione che ci sianessuna differenza fondamentale tra codice e dati. Alcuni linguaggi di markup come XSLT hanno loop e condizionali come un "vero" linguaggio di programmazione, e alcuni linguaggi di programmazione come Prolog sono dati quasi puri senza alcun processo specificato nel codice. E Lisp sfuma così tanto la linea che tratta il proprio codice come un formato di dati strutturato.

Per quanto riguarda la distinzione tra linguaggio di programmazione e linguaggio di scripting , questa è una distinzione storica che è quasi obsoleta oggi. In passato avevamo compilato programmi autonomi scritti in dire C, e poi avevamo linguaggi di scripting come script di shell o Word Basic, che erano interpretati e progettati per manipolare altri programmi e strumenti. Oggi la linea è piuttosto sfocata con molta via di mezzo, poiché abbiamo vari livelli di compilazione e interpretazione (compilazione bytecode, compilazione JIT ecc.) E varie API indipendenti dal linguaggio. Quindi la distinzione non è così utile.


0

Un linguaggio di markup viene utilizzato per descrivere i dati piuttosto che la logica. Un loro uso tipico è descrivere la formulazione di documenti, ad esempio HTML è progettato per questo. Ma a volte vengono utilizzati anche come formati di dati generali, XML è un linguaggio di markup che viene spesso utilizzato solo per descrivere i dati.

La differenza tra i linguaggi di programmazione e di scripting è molto confusa, entrambi tendono ad essere completamente completi in quanto è possibile risolvere eventuali problemi calcolabili con essi. Ci sono alcuni 'suggerimenti' generali che puoi cercare per vedere se un linguaggio è un linguaggio di programmazione o meno.

  • I linguaggi di scripting sono spesso interpretati piuttosto che compilati, o almeno offrono la possibilità di essere interpretati.
  • I linguaggi di scripting sono spesso progettati per essere veloci con cui lavorare piuttosto che veloci da eseguire.
  • I linguaggi di scripting tendono ad avere librerie standard molto estese. Anche molti linguaggi di programmazione lo fanno, ma è più opzionale per loro.

Ma alla fine, se un linguaggio è un linguaggio di scripting o un linguaggio di programmazione è più una questione di convenzioni che di criteri rigorosi. Anche i suggerimenti di cui sopra sono solo tendenze, troverete linguaggi di programmazione che soddisfano tutti i criteri per un linguaggio di scripting ma sono ancora considerati linguaggi di programmazione.


4
Le lingue non vengono mai compilate o interpretate. Le lingue lo sono . Compilazione e interpretazione sono tratti del compilatore o dell'interprete (duh!) Utilizzati per implementare il linguaggio. I termini "linguaggio compilato" o "linguaggio interpretato" non hanno nemmeno senso, appartengono a diversi livelli di astrazione. Se l'inglese fosse una lingua tipizzata, la "lingua compilata" sarebbe una TypeError! Ogni lingua può essere implementata da un interprete, ogni lingua può essere implementata da un compilatore. È anche possibile generare automaticamente un compilatore da un interprete e viceversa.
Jörg W Mittag,

@ JörgWMittag è vero che nessuna lingua è intrinsecamente compilata o interpretata. Ma ci sono spesso convenzioni su come viene generalmente eseguita, che è principalmente ciò a cui mi riferisco qui.
Pierre Andersson,
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.