Máquina abstracta de Warren
En 1983, David H. D. Warren diseñó una máquina abstracta para la ejecución de Prolog que constaba de una arquitectura de memoria y un conjunto de instrucciones. 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.
Propósito
El propósito de compilar el código Prolog al 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 Prolog es razonablemente fácil de traducir a instrucciones WAM, que pueden interpretarse de manera más eficiente. Además, las mejoras de código posteriores y las compilaciones a código nativo suelen ser más fáciles de realizar en la representación de más bajo nivel.
Para escribir programas Prolog eficientes, una comprensión básica de cómo funciona el WAM puede ser ventajoso. Algunos de los conceptos más importantes de WAM son la indexación del primer argumento y su relación con los puntos de elección, la optimización de llamadas finales y la recuperación de memoria en caso de falla.
Áreas de memoria
El WAM tiene las siguientes áreas de memoria:
- El apilación global o Salto, utilizado para almacenar términos compuestos
- El pila local para marcos ambientales y puntos de elección
- El sendero para registrar qué variables vinculantes debe ser deshecho en el retroceso
Ejemplo
Aquí hay una parte del código de Prolog:
chica()sally). chica()Jane.). chico()B) :- + chica()B).
Un compilador Prolog basado en WAM compilará esto en instrucciones WAM similares a las siguientes:
predicar()chica/1): switch_on_term()2,1,falla,falla,falla), etiqueta()1): switch_on_atom([()sally,3),(Jane.,5)] etiqueta()2): try_me_else()4) etiqueta()3): get_atom()sally,0) procede etiqueta()4): trust_me_else_fail etiqueta()5): get_atom()Jane.,0) procede predicar()chico/1): get_variable()x()1),0) put_estructura()chica/1,0) unify_local_value()x()1) ejecutar()+)/1)]
Una característica importante de este código es su capacidad para hacer frente a los distintos 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. El "interruptor" Las instrucciones manejan los diferentes casos.
Contenido relacionado
TNP
Efecto del segundo sistema
Señalización de canal separado