Instalar Vesta

Vesta esta en alfa. El codigo fuente es publico y se puede compilar hoy; los binarios preparados llegaran con la primera version publicada.

En desarrollo. Todavia no hay binarios publicados, asi que de momento la via para probar Vesta es compilarlo desde el codigo fuente.

Cuando existan, aqui apareceran los paquetes para Windows, Linux y macOS junto a su suma de verificacion y su firma.

Que no haya binarios no significa que no se pueda usar. En Windows, ademas, el propio proyecto genera su instalador con una sola orden.

1. Dependencias

PlataformaOrden
Debian y Ubuntusudo apt install build-essential cmake libssl-dev
Arch Linuxsudo pacman -S base-devel cmake openssl
macOSbrew install cmake openssl
WindowsTDM-GCC-64 (o MinGW) y CMake, mas OpenSSL

Keystone, Capstone y LibPEparse vienen como submodulos y se clonan solos. No hace falta nada mas.

2. Clonar y compilar

git clone --recursive https://github.com/vesta-lang/vesta.git
cd vesta

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

En Windows con TDM-GCC hay que pedir el generador de MinGW:

cmake -G "MinGW Makefiles" -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

Con CMake 4 o superior puede hacer falta anadir -DCMAKE_POLICY_VERSION_MINIMUM=3.5, porque alguno de los submodulos declara un minimo mas antiguo del que esa version acepta.

El ejecutable resultante es build/vm. Al instalarlo pasa a llamarse vesta.

3. Comprobar que funciona

./build/vm --version

4. Tu primer programa

Guarda esto como hola.vx:

site/snippets/hello.vx
i32 main() {
    println("Hello from Vesta ${1 + 1}!");
    return 0;
}

Y compilalo, desde la raiz del repositorio (ver la nota sobre la biblioteca estandar, mas abajo):

./build/vm --vx hola.vx -o hola
./build/vm --run hola.velb

El mismo fuente se puede compilar a un ejecutable nativo autonomo, sin la maquina virtual:

./build/vm --vx hola.vx -m aot -o hola
./hola

No hay make install. El empaquetado del proyecto es hoy solo de Windows, asi que en Linux y macOS la instalacion se hace copiando los ficheros a mano. Son cuatro ordenes.

No basta con copiar el binario. El compilador resuelve la biblioteca estandar, los complementos nativos y las cabeceras del preprocesador relativos a su propia ubicacion, asi que hay que llevarselos con el.

sudo mkdir -p /usr/local/lib/vesta
sudo cp build/vm            /usr/local/lib/vesta/vesta
sudo cp -r stdlib           /usr/local/lib/vesta/
sudo cp -r preprocessor/include_lib /usr/local/lib/vesta/

Queda una disposicion que satisface las tres busquedas a la vez:

/usr/local/lib/vesta/
    vesta              el compilador
    stdlib/vx/         modulos de la biblioteca estandar
    stdlib/native/     complementos nativos
    include_lib/       cabeceras del preprocesador

Y para invocarlo desde cualquier parte, un enlace simbolico:

sudo ln -s /usr/local/lib/vesta/vesta /usr/local/bin/vesta
vesta --version

El enlace funciona porque en Linux el compilador averigua donde esta leyendo /proc/self/exe, que resuelve el enlace y devuelve la ruta real.

En macOS, mejor sin enlace simbolico. Alli la ruta del ejecutable se obtiene de otro modo y puede devolver la del propio enlace, con lo que el compilador buscaria sus recursos en /usr/local/bin. Anade el directorio al PATH en su lugar:

echo 'export PATH="/usr/local/lib/vesta:$PATH"' >> ~/.zshrc

Es la via mas comoda en Windows. El proyecto genera su propio instalador desde CMake, y descarga NSIS por su cuenta si no lo tienes.

cmake --build build --target installer

Eso deja un VestaVM-<version>-win64.exe que se encarga de todo: copia la biblioteca estandar y los complementos nativos junto al ejecutable, anade Vesta al PATH y crea el acceso directo del menu de inicio.

A partir de ahi, vesta funciona desde cualquier consola y encuentra sus recursos solo. Nada de variables de entorno ni de trabajar desde una carpeta concreta.

vesta --version

Si prefieres no instalar nada, hay una version portable en ZIP con la misma disposicion de ficheros:

cmake --build build --target installer-zip
Elegir componentes al instalar

El instalador permite marcar y desmarcar que se instala. Los valores por defecto son los correctos para la mayoria; esta tabla es solo por si quieres afinar.

ComponenteQue incluye
coreEl compilador, el runtime y las bibliotecas de enlace. Obligatorio.
stdlibLa biblioteca estandar y los complementos nativos.
lspEl servidor de lenguaje, para editores.
examplesLos programas de ejemplo.
toolsUtilidades del proyecto.
sdkCabeceras y bibliotecas para embeber Vesta o escribir complementos.

Solo una advertencia: no desmarques stdlib salvo que sepas lo que haces. Sin ella el compilador arranca, pero ningun programa que importe un modulo de la biblioteca estandar llegara a compilar.

Como encuentra el compilador sus recursos

Esto importa si compilas desde el fuente o instalas a mano. Con el instalador de Windows no hace falta saberlo: deja los ficheros donde el compilador los espera y funciona sin mas.

Es la causa mas frecuente de que una instalacion manual falle. El compilador no lleva sus recursos dentro: los busca en disco, y no todos se buscan igual.

RecursoQue esDonde se busca
stdlib/vxModulos de la biblioteca estandarVX_STDLIB_DIR, luego relativo al directorio de trabajo, luego al ejecutable
include_libCabeceras del preprocesador VPPRelativo al ejecutable
stdlib/nativeComplementos nativos (E/S, matematicas)Solo relativo al ejecutable

La ultima fila es la que sorprende: los complementos nativos no miran ni la variable de entorno ni el directorio de trabajo. Por eso copiar unicamente el binario a /usr/local/bin deja un compilador que arranca y falla en cuanto un programa hace entrada o salida.

Para stdlib/vx, el orden completo es:

  1. La variable VX_STDLIB_DIR, si esta definida.
  2. Relativa al directorio de trabajo: stdlib/vx, ../stdlib/vx o ../../stdlib/vx.
  3. Relativa al ejecutable: <directorio>/stdlib/vx o <directorio>/../stdlib/vx.

De ahi que los ejemplos de mas arriba se ejecuten desde la raiz del repositorio: build/vm no tiene ninguna stdlib/ al lado, y funciona por la segunda regla. En cuanto cambias de directorio, deja de funcionar.

Hay ademas una variable VX_PATH, con la misma forma que PATH, para anadir directorios donde buscar modulos propios.

Que esperar de una alfa

El lenguaje, el compilador, la maquina virtual y el JIT funcionan y tienen pruebas. Hay partes en desarrollo activo, y se senalan como tales alli donde aparecen en esta documentacion.

No se recomienda todavia para produccion, y la sintaxis puede cambiar entre versiones. Si encuentras un fallo, el sitio para contarlo es el repositorio del proyecto.