Un linguaggio di programmazione deve essere compilato per essere considerato un linguaggio di programmazione? [duplicare]

4

Una persona che ho incontrato di recente ha avuto una discussione. Era che un linguaggio di programmazione doveva essere compilato per essere considerato un linguaggio di programmazione. Questo renderebbe HTML / CSS (a meno che tu non stia utilizzando SCSS o LESS) non un linguaggio di programmazione. Quindi, ha per essere compilato?

    
posta StackExchange User 26.04.2013 - 18:10
fonte

6 risposte

11

HTML e CSS non sono comunemente considerati linguaggi di programmazione, ma non a causa del modo in cui sono implementati. Sono linguaggi di markup, non si programma in essi, si specifica solo il contenuto e la sua presentazione. Sono linguaggi informatici, ma non per programmare cose, quindi non sono linguaggi di programmazione. Sebbene i recenti standard CSS consentano alcuni calcoli (e penso che siano addirittura completi) non è nemmeno vicino a nulla per cui la lingua è destinata o adatta.

Ma quella non sembra essere la domanda principale. No , la compilazione non è necessaria perché qualcosa sia un linguaggio di programmazione, che non ha nemmeno senso. Tradisce un equivoco piuttosto fondamentale (qualsiasi linguaggio può essere implementato sia con l'interpretazione che con la compilazione), e le conclusioni da trarre da ciò contraddicono radicalmente il consenso. Chi pensa che molto probabilmente usa anche definizioni discutibili (anche se tristemente più comuni, e quindi più difficili da liquidare) di "compilazione" e può disegnare distinzioni artificiali come "linguaggio di scripting / linguaggio di programmazione (reale)". Probabilmente è meglio ignorare la loro opinione su questo argomento.

    
risposta data 26.04.2013 - 18:27
fonte
8

La risposta semplice è no . Né HTML né CSS sono un linguaggio di programmazione.

Tuttavia, ci sono altri indicatori

  • variabili o oggetti: int x;
  • assegnamenti: x = 3;
  • espressioni: x * 5
  • Funzioni
  • : int doubleMyInt(int a) { return a*2; }
  • dichiarazioni (ad esempio come incarichi, espressioni e dichiarazioni di variabili)
  • condizionali: if(x > 10) { x = 10; }
  • loop (per, while, do while, until, ...)

Suggerisco di leggere questo articolo incredibilmente interessante che tratta esaurientemente questo argomento esatto.

    
risposta data 26.04.2013 - 18:12
fonte
1

No.

Ci sono stati molti, molti linguaggi di programmazione che sono stati implementati con un interprete. Alcuni di loro hanno visto un sacco di uso commerciale. Hai mai sentito parlare di dBase II? Era un linguaggio e un sistema basato su interpreti.

La prima implementazione BASIC, a Dartmouth, era in realtà basata sul compilatore, ma un gran numero di implementazioni successive erano basate solo su interpreti. Bill Gates e Paul Allen iniziarono scrivendo un interprete BASIC (e un caricatore di bootstrap per caricarlo) per l'Altair 8800.

    
risposta data 26.04.2013 - 18:29
fonte
1

Una lingua è un linguaggio di programmazione se in qualche modo (compilazione, interpretazione o entrambi) le istruzioni del linguaggio vengono trasformate direttamente in istruzioni che possono essere eseguite da una CPU, cioè istruire la CPU su cosa fare. Da un altro punto di vista, un linguaggio di programmazione è una lingua in cui è possibile descrivere un algoritmo.

Ora in HTML o CSS non puoi dire alla CPU cosa fare né puoi descrivere algoritmi.

    
risposta data 26.04.2013 - 18:36
fonte
0

No, non è necessario compilare un linguaggio di programmazione.

Tuttavia, un linguaggio di programmazione appropriato deve essere in grado di implementare la stessa classe di algoritmi che possono essere gli altri linguaggi di programmazione; questa proprietà si chiama completezza di Turing .

HTML e CSS non sono linguaggi di programmazione reali perché possono specificare solo una classe limitata di calcoli; non possono descrivere un loop arbitrario. Poiché è importante che le pagine Web possano essere visualizzate in modo rapido e affidabile, HTML e CSS sono stati progettati in modo che siano garantiti per la chiusura - se potrebbero descrivere un loop arbitrario , un sito Web danneggiato o malintenzionato potrebbe bloccare il motore di visualizzazione indefinitamente, mentre tenta di valutare l'HTML e il CSS di base.

D'altra parte, Javascript è un vero linguaggio di programmazione. Interpretato o no, ha il potere espressivo che HTML e CSS mancano: qualsiasi tipo di calcolo disponibile in C / C ++ può essere descritto in Javascript. Potrebbe non essere carino e potrebbe non essere conveniente, e potrebbe non essere efficiente, ma la potenza espressiva è ciò che rende un vero linguaggio di programmazione.

Aggiunta: alcuni dei commenti menzionano che CSS3 è completo di Turing. Questo è discutibilmente, tecnicamente vero nel senso che è possibile codificare un automa cellulare in esso - ma, se capisco correttamente, qualsiasi valutazione del CSS può solo fare un passo dell'automa cellulare.

Per dirla in altro modo: il "loop" che consente a CSS3 di essere completato da Turing è un ciclo dell'utente che rivaluta il CSS. Come risposta a questa domanda mette: "chiamare il codice non completo di Turing in un ciclo può renderlo completo di Turing".

    
risposta data 26.04.2013 - 18:56
fonte
0

Chiedi alla persona che cosa intende (s) per linguaggio di programmazione , o semplicemente programmazione . Esistono molti linguaggi di programmazione di scripting che non sono compilati (come gli script di shell), o solo facoltativamente compilati (come JavaScript - è compilato solo per l'efficienza). Per ulteriori esempi vedi l'elenco delle lingue interpretate . La persona insiste sul fatto che nessuno di loro è un linguaggio di programmazione?

Forse un esempio ancora più esotico è XSLT - Trasformazioni della lingua dei fogli di stile eXtensible per XML. Un foglio di stile XSLT è un documento XML (come questo esempio ), tuttavia è Turing completo , il che significa che puoi esprimere qualsiasi algoritmo al suo interno. Poiché molti processori XSLT ottimizzano il processo tramite compilando un foglio di stile in codice , hai una lingua che è sia compilata sia Turing completo. Quindi potresti fare una discussione come:

  • "Consideri XSLT un linguaggio di programmazione?"
  • (Molto probabilmente la risposta sarà "no".)
  • "Perché no? È completo e compilato da Turing."

(Sarei curioso di vedere dove va.)

    
risposta data 26.04.2013 - 19:18
fonte

Leggi altre domande sui tag