Máquina abstracta de Warren


En 1983, David HD Warren diseñó una máquina abstracta para la ejecución de Prolog que constaba de una arquitectura de memoria y un conjunto de instrucciones . [1] [2] [3] Este diseño se conoció como Warren Abstract Machine (WAM) y se ha convertido en el objetivo estándar de facto para los compiladores de Prolog .

El propósito de compilar el código Prolog en el código WAM de nivel más bajo es hacer que la interpretación posterior del programa Prolog sea más eficiente. El código de Prolog es razonablemente fácil de traducir a instrucciones WAM, que se pueden interpretar de manera más eficiente. Además, las mejoras de código posteriores y las compilaciones del código nativo suelen ser más fáciles de realizar en la representación de nivel más bajo.

Para escribir programas Prolog eficientes, un conocimiento básico de cómo funciona WAM puede resultar ventajoso. Algunos de los conceptos de WAM más importantes son la indexación del primer argumento y su relación con los puntos de elección, la optimización de la llamada de cola y la recuperación de memoria en caso de falla.

Una característica importante de este código es su capacidad para hacer frente a los diversos modos en los que se pueden evocar los predicados: cualquier argumento puede ser una variable, un término básico o un término parcialmente instanciado. Las instrucciones de "cambio" manejan los diferentes casos.