A mi abuelito Salvador, tus primeras sumas fueron el inicio de mi camino.
iii iv
AbstractConcurrent languages are increasingly present in our society, both in new technologies and in the systems used on a daily basis. Moreover, given the current systems distribution and their internal architecture, one can expect that this remains so in the coming years. In this context, the development of tools to support the implementation of concurrent programs becomes essential. Futhermore, the behavior of concurrent systems is particularly difficult to analyse, so that any tool that helps in this task, even if in a limited way, will be very useful. For example, one can find tools for debugging, analysis, testing, optimisation, or simplification of programs, which are widely used by programmers nowadays.The purpose of this thesis is to introduce, through various concurrent programming languages, some analysis techniques that can help to improve the experience of the software development and release for concurrent models. This thesis introduces both static (approximating all possible executions) and dynamic (considering a specific execution) analysis. The topics considered here differ enough from each other to be fully independent. Nevertheless, they have a common link: they can be used to analyse properties of a concurrent programming language. All the analyses presented here have been formally defined and their correctness have been proved, ensuring that the results will have the reliability degree which is needed for some systems (for instance, for critical systems). It also includes a description of the software tools that implement the different ideas proposed. This gives the work a usefulness well beyond the theoretical aspect, allowing us to put it in practice and to test the different analyses with real-world examples. v All the ideas here presented are, by themselves, approaches that can be applied in many current contexts and problems. Moreover, individually they serve as a starting point for other derived analysis, as well as for the adaptation to other languages of the same family. This gives an added value to this work, a fact confirmed by some later works that are already benefiting from the results obtained in this thesis.
vi
ResumenLos lenguajes concurrentes están cada día más presentes en nuestra sociedad, tanto en las nuevas tecnologías como en los sistemas utilizados de manera cotidiana. Más aún, dada la actual distribución de los sistemas y su arquitectura interna, cabe esperar que este hecho siga siendo una realidad en los próximos años. En este contexto, el desarrollo de herramientas de apoyo a la implementación de programas concurrentes se vuelve esencial. Además, el comportamiento de los sistemas concurrentes es especialmente difícil de analizar, por lo que cualquier herramienta que ayude en esta tarea, aún cuando sea limitada, será de gran utilidad. Por ejemplo, podemos encontrar herramientas para la depuración, análisis, comprobación, optimización, o simplificación de programas. Muchas de ellas son a...