En el siguiente índice se resumen los contenidos principales de este README:
-
🎉 Uso del repositorio : Describe cómo utilizar el repositorio GitHub del proyecto.
-
❓ Resumen del proyecto : Describe los objetivos y el propósito de este proyecto.
-
📖 Documentación del proyecto : Resume cómo obtener la documentación del proyecto en TeX.
-
⭐ Recomendaciones : Algunas indicaciones y sugerencias para una mejor experiencia.
-
🐚 Instalación de dependencias y verificación : Indica cómo se realiza la gestión de dependencias del proyecto mediante el
Makefile
implementado para ello. -
🏗️ Construcción del compilador : Indica cómo construir el proyecto completo para su uso.
-
🐋 Uso del compilador en contenedor Docker : Indica cómo ejecutar el compilador utilizando el contenedor Docker que lo contiene.
-
✅ Testeo de módulos : Indica cómo realizar pruebas sobre el código implementado.
GitHub es un cliente de Git. Una de las formas para poder descargar el contenido completo del repositorio es instalando git
en su sistema. Para sistemas Linux que usen APT como gestor de paquetes, esto se puede hacer con la siguiente orden:
$ sudo apt install git
Y a continuación, para clonar el repositorio y acceder a todos los fuentes, puede usar la siguiente orden:
$ git clone https://github.com/danielsp13/lamport.git
La orden anterior generará una carpeta en el directorio donde ejecutó la orden con todo el proyecto.
Otra opción de descarga es pulsando este enlace, que descargará un zip
con la rama principal del proyecto.
Lamport es un lenguaje de programación para la simulación de sistemas concurrentes y distribuidos. Utiliza una máquina virtual para la ejecución de las instrucciones, por lo que su uso no necesita de una arquitectura hardware específica.
Su nombre es en honor al informático Leslie Lamport, una de las mayores eminencias en el campo de la programación concurrente, y que dentro de las muchas contribuciones que realizó uno muy notorio es la introducción de un sistema lógico formal para la verificación de las propiedades de los sistemas concurrentes, denominado: Lógica Temporal de Acciones.
En este repositorio se encuentra el código fuente del compilador en tiempo de ejecución (Just-In-Time) desarrollado, así como el estudio teórico del trabajo de Lamport en la materia de verificación.
⭐ Novedad: Ahora puede acceder directamente a la documentación final del proyecto en el PDF en este enlace.
La documentación completa de este proyecto está redactada en LaTeX
, en el directorio tex/
. Para poder recuperar el informe, es necesario instalar el paquete texlive
en la distribución donde se clone este repositorio.
En el Makefile
del proyecto se han definido unas reglas para su construcción (siempre y cuando se encuentre en un sistema basado en Debian, o cualquiera que utilice el gestor de paquetes APT) .
Si desea construir el informe TeX ejecute la siguiente orden:
$ make build_tex
Esta orden además se encargará de instalar todas las dependencias en el sistema en caso de que no se encuentren. El resultado se encontrará dentro del directorio tex/
con el nombre de archivo proyecto.pdf
.
Si desea eliminar el informe TeX y todos los demás ficheros generados en la compilación:
$ make clean_tex
Para poder tener una mejor experiencia en el uso del compilador Lamport, puede considerar alguna de estas dos alternativas:
- Utilizar un entorno Linux para la instalación de dependencias y compilación del compilador.
- Utilizar el contenedor virtual Docker mediante el script proporcionado. Este contenedor contiene todas las dependencias integradas, por lo que lo único que se necesita es tener docker instalado en el sistema, compatible con Windows, Linux y Mac.
En este proyecto hay diferentes bibliotecas y programas que son necesarias para poder construir el compilador adecuadamente. Para ello, se han definido reglas en el Makefile
que permiten la gestión de dichas dependencias:
Si desea instalar todas las dependencias del proyecto:
$ make install_dependencies
Otra opción podría ser la instalación por separado de las dependencias:
# Instala dependencias sólo para informe TeX
$ make install_tex_dependencies
# Instala dependencias sólo del compilador
$ make install_compiler_dependencies
# Instala dependencias sólo de tests sobre compilador
$ make install_tests_dependencies
Si desea desinstalar todas las dependencias del proyecto:
$ make uninstall_dependencies
Otra opción podría ser la desinstalación por separado de las dependencias:
# Desinstala dependencias sólo para informe TeX
$ make uninstall_tex_dependencies
# Desinstala dependencias sólo del compilador
$ make uninstall_compiler_dependencies
# Desinstala dependencias sólo de tests sobre compilador
$ make uninstall_tests_dependencies
Si desea comprobar las versiones instaladas de las dependencias:
$ make version_dependencies
Otra opción podría ser la comprobación de versiones por separado:
# Muestra las versiones instaladas de las dependencias de TeX
$ make version_tex_dependencies
# Muestra las versiones instaladas de las dependencias del compilador
$ make version_compiler_dependencies
# Muestra las versiones instaladas de las dependencias de tests sobre compilador
$ make version_tests_dependencies
Para poder utilizar el compilador desarrollado para el lenguaje de lamport, hay que compilar todos los módulos implementados.
Para constuir el compilador completo:
$ make compile
Esto hará que el ejecutable final se encuentre en el directorio bin/
.
Puede además utilizar la orden de ejecución paralela, para reducir el tiempo:
$ make parallel
con el mismo efecto que la orden anterior.
Para eliminar todos los ficheros ejecutables generados:
$ make clean
Este proyecto dispone de un Dockerfile
que construye un contenedor virtual con todas las dependencias necesarias para el funcionamiento del compilador, aislándolo del SO por completo.
$ make install_virtualenv_dependencies
Para construir y ejecutar el compilador dockerizado, utilice el script de la siguiente forma:
$ ./lmp_docker.sh <fichero_lamport.lmp>
Esto hará que se ejecute directamente el compilador desde el contenedor de la misma manera que si se compilara de la forma tradicional.
Para eliminar el contenedor docker construido:
$ make rmi_docker
En este proyecto se ha utilizado una herramienta de análisis (cppcheck) para analizar las clases en búsqueda de errores / fallos que el compilador no es capaz de detectar.
Si desea comprobar la sintaxis y lanzar un análisis (sin compilación) de todas las clases:
$ make check