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".