# Dicotomia di Ousterhout

La Dicotomia di Ousterhout è un teorema dello scienziato informatico John Ousterhout.

## Descrizione

Il teorema dice che i linguaggi di programmazione ad alto livello cadono in due gruppi, ognuno con diverse proprietà e usi: Linguaggio di programmazione di sistema e Linguaggio di scripting. Questa distinzione è alla base della progettazione del suo linguaggio Tcl.
I linguaggi di programmazione di sistema, o linguaggi applicativi, di solito hanno le seguenti proprietà:
* sono tipizzati staticamente
* supportano la creazione di complesse strutture di dati
* sono utilizzati per scrivere programmi che vengono compilati in linguaggio macchina
* sono utilizzati per scrivere programmi destinati ad operare in gran parte indipendentemente dagli altri programmi
I linguaggi di programmazione di sistema generalmente sono utilizzati per i componenti e le applicazioni con grandi quantità di funzionalità interne come i sistemi operativi, database server e browser web. Queste applicazioni in genere utilizzano complessi algoritmi e strutture di dati e richiedono alte prestazioni. Esempi prototipici di linguaggi di programmazione di sistema includono C e Modula-2. Al contrario i linguaggi di scripting (o linguaggi collante) generalmente hanno le seguenti proprietà:
* sono tipizzati dinamicamente
* hanno poca o nessuna predisposizione per strutture di dati complesse
* sono utilizzati per scrivere programmi (script) interpretati
I linguaggi di scripting sono generalmente utilizzati per applicazioni in cui la maggior parte delle funzionalità viene da altri programmi, spesso implementati in linguaggi di programmazione di sistema. Gli script vengono utilizzati per incollare insieme le chiamate a programmi esterni e i costrutti nativi del linguaggio di scripting in un unico programma o aggiungere ulteriori livelli di funzionalità a programmi esistenti. L'asserzione di Ousterhout che gli script generalmente sono brevi e sono spesso scritti da programmatori meno qualificati e per cui l'efficienza di esecuzione è meno importante della semplicità e della facilità di interazione con altri programmi. Le applicazioni più comuni per lo scripting includono la generazione di pagine Web, la generazione di report, le interfacce grafiche, e l'amministrazione del sistema. Esempi tipici di linguaggi di scripting sono Bash, AppleScript, C shell, DOS File batch, e Tcl.
Altri ritengono che la dicotomia sia altamente arbitraria e si riferiscono a essa come fallacia di Ousterhout o falsa dicotomia di Ousterhout. Mentre la tipizzazione forte confrontata con la tipizzazione debole, la complessità della strutture di dati e il confronto tra indipendenza dal sistema operativo rispetto a stand-alone potrebbe affermare per essere le caratteristiche non correlate. La critica comune alla "dicotomia di Ousterhout" è la sua distinzione tra compilazione e interpretazione poiché né la semantica né la sintassi dipendono in misura significativa dall'essere compilato in linguaggio macchina, interpretato, tokenizzato, o byte-compilato all'inizio di ogni esecuzione o qualsiasi combinazione di questi. Molti linguaggi possono essere sia interpretati sia compilati, ad esempio Lisp, Forth, UCSD Pascal, Perl, e Java. Questo rende il confronto tra compilazione e interpretazione un parametro dubbio in una tassonomia dei linguaggi di programmazione.