Este repositorio contiene la nueva implementación de PseudoD: PseudoD v3.
La forma recomendada de obtener PseudoD es descargando una versión precompilada. Originalmente podías compilar el compilador usando el ínterprete en C++ de PseudoD, sin embargo, debido a diferencias entre las dos implementaciones actualmente no es posible "bootstrapear" el compilador de esa forma. Esto es un bug y cuando pueda actualizaré el intérprete en C++ para que pueda ejecutar el compilador.
Las dependencias principales son:
- Lua 5.4.
- Fish 3.1 para generar el archivo de distribución (
dist.zip
) y generar los "enlaces"pdc
/pdcjit
. - Python 3.8 o superior es necesario para ejecutar las pruebas.
- Opcionalmente: LuaJIT 2.1 o superior.
- Opcionalmente: PseudoD (original en C++).
Sin embargo, si solo quieres usar el compilador precompilado y no estás interesado en compilarlo tu mismo, entonces solo necesitas Lua 5.4 y opcionalmente LuaJIT.
Otras dependencias de desarrollo son:
- GNU Make.
- Un shell bourne POSIX. Idealmente Bash o Dash.
- Programas POSIX, como sed, awk, etc.
zip
/unzip
.- etc.
Puedes descargar la última versión estable del compilador en esta página. También puedes acceder a la última versión de desarrollo aquí.
Una vez que descargues el compilador de la página de versiones, puedes ejecutarlo usando Lua 5.4:
lua5.4 bootstrapped/stage1/inicio.lua --help
Abajo se encuentran las instrucciones para compilar el compilador por ti mismo, si así lo deseas.
Llamar al compilador con la opción --help
debe mostrar todas las opciones
soportadas. Actualmente el compilador solo puede ejecutarse dentro del
directorio de donde se descargó.
El directorio ejemplos/
contiene algunos ejemplos. Para compilar uno puedes
usar:
lua5.4 bootstrapped/stage1/inicio.lua -o HolaMundo.lua ejemplos/HolaMundo.pd
lua5.4 HolaMundo.lua
Es posible generar dos "guiones de enlace" pdc
y pdcjit
que te dejan
ejecutar el compilador fuera de este directorio. Sin embargo, estos requieren
que no muevas el lugar en donde instalastes el compilador y tienen otras
limitaciones. Debido a esto, estos "enlaces" no son distribuídos junto al resto
del compilador pero si estás leyendo esto dentro del repositorio git puedes
generarlos con make binlink
(véase la documentación del
makefile para más información).
El resto de este documento asume que los estas usando, si no es así, solo
reemplaza pdc
por lua5.4 bootstrapped/stage1/inicio.lua
.
Para compilar el compilador, primero necesitas descargar una versión anterior precompilada. Estas se encuentran aquí. Con el compilador en tu PATH, comienza "arrancando" el bootstrap:
make force_update_stage0 # Crea los directorios de bootstrapping
# Copia los archivos:
cp "$BASE"/bootstrapped/stage1/inicio.lua ./bootstrapped/stage0/inicio.lua
cp "$BASE"/bootstrapped/stage1/inicio.sdb ./bootstrapped/stage0/inicio.sdb
make force_update_stage0 # Actualizalos para que Make no los reconstruya
Reemplaza $BASE
por la ruta a tu instalación actual de PseudoD (o la versión
que descargastes).
Tendrás que ejecutar el comando make force_update_stage0
después de cada
cambio.
Después de esto, cada vez que quieras compilar el compilador con tus cambios bastará con usar:
make force_update_stage0
make stage1
Esto creará el nuevo compilador en bootstrapping/stage1/
. Después de
verificar que tus cambios funcionen correctamente, querrás usar make shift_stages
para rotas el stage 0 y el stage 1. Para más información véase el
documento acerca del bootstrapping.
TODO: Estoy trabajando en un instalador que hará que todo este trabajo sea
tan sencillo como ejecutar ./instalar-pseudod --local
/./instalar-pseudod --global
seguido de make
.
Los archivos ESTRUCTURA.md
y ARQUITECTURA.md
contienen la estructura de
archivos y la arquitectura del compilador.
El directorio docs/
contiene documentación adicional.
Casi todos los archivos de PseudoD (y el runtime de Lua) están documentados con comentarios. Estoy trabajando en la documentación "final" en HTML.
La implementación actual tiene los siguientes bugs conocidos:
- El compilador acepta instrucciones
devolver
fuera de funciones. - La opción
-I
no está implementada. - Las variables de entorno
RUTA_PSEUDOD
,RUTA_PSEUDOD_LIB
yRUTA_PSEUDOD_BEPD
no son respetadas. - En el backend de Lua,
NULO
es considerado falso en los condicionales (debería ser un error). - Los espacios de nombres no actualizan sus valores cuando se fijan variables.
- El experimento
v3x
no está implementado. - El REPL no está implementado.
- Los números de línea y columna del compilador con el backend a Lua a veces están mal por 1 o 2.
Además, el lenguaje tiene los siguientes problemas conocidos:
- Las palabras clave
hacer
/finhacer
no están implementadas. - No existe palabra clave
super
como en Python/Ruby/SmallTalk/etc. - Las palabras clave
implementa
/finimplementa
no están implementadas. - Las interfaces y fragmentos no están implementados.
- La sintaxis de las clases aún no está lista.