Semántica denotacional


En informática , la semántica denotacional (inicialmente conocida como semántica matemática o semántica de Scott-Strachey ) es un enfoque para formalizar los significados de los lenguajes de programación mediante la construcción de objetos matemáticos (llamados denotaciones ) que describen los significados de las expresiones de los lenguajes. Otros enfoques que proporcionan la semántica formal de los lenguajes de programación incluyen la semántica axiomática y la semántica operativa .

En términos generales, la semántica denotacional se ocupa de encontrar objetos matemáticos llamados dominios que representan lo que hacen los programas. Por ejemplo, los programas (o frases de programas) pueden representarse mediante funciones parciales [1] [2] o mediante juegos [3] entre el entorno y el sistema.

Un principio importante de la semántica denotacional es que la semántica debe ser compositiva : la denotación de una frase de programa debe construirse a partir de las denotaciones de sus subfrases .

La semántica denotacional se originó en el trabajo de Christopher Strachey y Dana Scott publicado a principios de la década de 1970. [1] [2] Tal como la desarrollaron originalmente Strachey y Scott, la semántica denotacional proporcionó el significado de un programa de computadora como una función que asignaba la entrada a la salida. [2] Para dar significados a los programas definidos recursivamente , Scott propuso trabajar con funciones continuas entre dominios , específicamente órdenes parciales completas . Como se describe a continuación, se ha continuado investigando la semántica denotacional apropiada para aspectos de los lenguajes de programación como la secuencialidad,concurrencia , no determinismo y estado local .

La semántica denotacional ha sido desarrollada para lenguajes de programación modernos que usan capacidades como concurrencia y excepciones , por ejemplo, Concurrent ML , [4] CSP , [5] y Haskell . [6] La semántica de estos idiomas es composicional en el sentido de que el significado de una frase depende de los significados de sus subfrases. Por ejemplo, el significado de la expresión aplicativa f(E1,E2) se define en términos de la semántica de sus subfrases f, E1 y E2. En un lenguaje de programación moderno, E1 y E2 pueden evaluarse simultáneamente y la ejecución de uno de ellos puede afectar al otro al interactuar a través de objetos compartidos.haciendo que sus significados sean definidos en términos de cada uno. Además, E1 o E2 pueden generar una excepción que podría terminar la ejecución del otro. Las siguientes secciones describen casos especiales de la semántica de estos lenguajes de programación modernos.

La semántica denotacional se atribuye a una frase de programa como una función de un entorno (que contiene los valores actuales de sus variables libres) a su denotación. Por ejemplo, la frase n*mproduce una denotación cuando se le proporciona un entorno que tiene enlace para sus dos variables libres: ny m. Si en el entorno ntiene el valor 3 y mtiene el valor 5, entonces la denotación es 15. [2]