La dicotomía de Ousterhout es la categorización del científico informático John Ousterhout [1] de que los lenguajes de programación de alto nivel tienden a dividirse en dos grupos, cada uno con propiedades y usos distintos: lenguajes de programación de sistemas y lenguajes de scripting : compare la programación a gran escala y la programación a pequeña escala .
Los lenguajes de programación de sistemas (o lenguajes de aplicaciones ) suelen tener las siguientes propiedades:
Los lenguajes de programación de sistemas suelen utilizarse para componentes y aplicaciones con grandes cantidades de funcionalidad interna, como sistemas operativos, servidores de bases de datos y navegadores web. Estas aplicaciones suelen emplear algoritmos y estructuras de datos complejos y requieren un alto rendimiento. Algunos ejemplos prototípicos de lenguajes de programación de sistemas son C , OCaml y Modula-2 .
Por el contrario, los lenguajes de script (o lenguajes de pegamento ) tienden a tener las siguientes propiedades:
Los lenguajes de script tienden a usarse para aplicaciones donde la mayor parte de la funcionalidad proviene de otros programas (a menudo implementados en lenguajes de programación de sistemas); los scripts se utilizan para unir otros programas o agregar capas adicionales de funcionalidad sobre programas existentes. Ousterhout afirma que los scripts tienden a ser cortos y a menudo son escritos por programadores menos sofisticados, por lo que la eficiencia de ejecución es menos importante que la simplicidad y la facilidad de interacción con otros programas. Las aplicaciones comunes para scripts incluyen generación de páginas web, generación de informes, interfaces gráficas de usuario y administración de sistemas. Los ejemplos prototípicos de lenguajes de scripts incluyen Python , AppleScript , C shell , archivos por lotes de DOS y Tcl .
La dicotomía de Ousterhout subyace al diseño de su lenguaje Tcl .
La dicotomía fue completamente expuesta en Ousterhout (1998) , aunque Ousterhout había establecido esta distinción al menos desde el diseño de Tcl (1988), y la había declarado públicamente en varias ocasiones. Un episodio temprano fue "La guerra de Tcl" de finales de septiembre y octubre de 1994, donde Richard Stallman publicó un artículo crítico de Tcl, titulado "Por qué no debería usar Tcl", [2] al que Ousterhout respondió con una articulación de su dicotomía: [3]
Creo que las objeciones de Stallman a Tcl pueden deberse en gran medida a un aspecto del diseño de Tcl que no entiende o con el que no está de acuerdo. Se trata de la propuesta de que se deben utilizar *dos* lenguajes para un gran sistema de software: uno, como C o C++, para manipular las complejas estructuras de datos internas donde el rendimiento es clave, y otro, como Tcl, para escribir scripts pequeños que unan las piezas de C y se utilicen para extensiones.
Los críticos creen que la dicotomía es altamente arbitraria y se refieren a ella como la falacia de Ousterhout o la falsa dicotomía de Ousterhout . [4] Si bien se podría decir que la tipificación estática versus dinámica, la complejidad de la estructura de datos y la dependencia versus la autonomía son características no relacionadas, la crítica habitual de la dicotomía de Ousterhout es su distinción entre compilación e interpretación. Ni la semántica ni la sintaxis dependen significativamente de si una implementación de lenguaje compila en lenguaje de máquina, interpreta, tokeniza o compila bytes al comienzo de cada ejecución, o cualquier combinación de estos. Además, básicamente ningún lenguaje de uso generalizado se interpreta puramente sin un compilador; esto hace que la compilación versus la interpretación sea un parámetro dudoso en una taxonomía de lenguajes de programación. [5]