Abstract
En esta tesis se tratan dos aspectos fundamentales de los sistemas
funcionales, de cuyo tratamiento depende, en gran medida, la eficiencia de
tales sistemas. En primer lugar, se presentan y evalúan una serie de soluciones
al problema de representación interna en los sistemas funcionales,
soluciones basadas en la utilización de estructuras lineales para obtener
una mejora en el tiempo de ejecución y en la ocupación de la memoria del
sistema.
En segundo lugar, se presenta un sistema de evaluación multitarea
para reducir programas funcionales, basado en la especificación de varios
ficheros de salida. En él, las tareas del sistema evalúan, de forma concurrente,
las diversas partes del resultado de un programa y se .comunican
entre sí en base a mensajes que permiten detectar y resolver, sin necesidad
de abortar la ejecución, bucles de dependencias entre tareas. El sistema
reacciona ante estas situaciones de error de forma comedida, de modo
que este error no afecta al resto de las tareas del sistema.
Se plantea también un mecanismo de gestión de memoria, mecanismo
que introduce una tarea especial en el sistema, encargada de la gestión de
una memoria común a todo él, y satisface las necesidades de memoria de las
tareas de forma, transparente al mecanismo de evaluación.---ABSTRACT---Two fundamental aspects of functional systems, of which their efficiency
to a large extent depends, are dealt with in this thesis.
Firstly, several solutions to the internal representation problem of functional
systems are proposed and evaluated. These solutions are based on
the use of linear data structures in order to achieve a shorter execution
time and smaller memory requirement.
Secondly, a new multitask evaluation system for the reduction of
functional programs is described; it is based on the specifücation of several
output files. In this evaluation system, the task evaluates in the
different parts of the program result concurrently. Tasks communicate one
another through messages, which make it possible to detect and solve the
dependency loops within tasks. The program does not need to be aborted,
the sistem reacts to such error situations in a smooth way, no other tasks
are affected.
A memory management system is also introduced. This management
system inserts a special task, that carries-out the management of a common
memory and serves all tasks memory requirements in a transparent mode to
the evaluation mechanism.