Documentación de Whale

Guía de componentes de la cadena de herramientas, comandos disponibles y documentación de referencia.

Wave Foundation

Introducción

Whale es una cadena de herramientas de compilación de propósito general para implementaciones de lenguajes de programación y herramientas de compilación. Proporciona expresiones intermedias escritas (IR), ensamblador AMD64, biblioteca de archivos de objetos y funciones basadas en enlazadores. Cada componente se utiliza a través de la biblioteca Rust y el comando whale.

IR expresa la semántica de un cálculo independientemente de la codificación del lenguaje de máquina. El ensamblador codifica instrucciones de máquina para crear objetos reubicables. Las bibliotecas de objetos representan secciones, símbolos y reordenamientos. El vinculador resuelve referencias entre objetos y coloca el archivo ejecutable.

Construir y usar herramientas

trabajo documento
Qué hace cada herramienta Componentes de la cadena de herramientas
Wave Creación de programa/enlace/selección de destino Construir y vincular
Gestión de paquetes/dependencias Vex
Whale Ejecutar comando Whale CLI

Guía de documentos

documento de referencia contenido
Ver IR Tipos, valores, funciones, flujo de control, validación, formatos de intercambio.
Operaciones numéricas Aritmética de enteros, desplazamiento, conversión de tipos, punto flotante
Modelo de memoria Inicialización, validación de puntero, cálculo de direcciones, diseño, cadenas.
Depurando con O0 Retención de cálculo, almacenamiento de variables, información de depuración.
AMD64 Objetivo Identificador de destino, convención de llamada, alcance de función native
Ensamblador y enlazador Operandos de ensamblaje, secciones, símbolos, enlaces estáticos.

El documento de referencia define las reglas semánticas para Whale. Las funciones disponibles siguen la siguiente tabla. Es posible que las operaciones descritas en la documentación de referencia no estén disponibles en todas las versiones.

Estado de soporte

componente Interfaz proporcionada límite
ensamblador Cree ELF64 objeto reubicable a partir del ensamblaje AMD64 Cobertura incompleta de comandos y directivas.
biblioteca de objetos Composición de objetos, payload sin BSS, validación de objetivos, AMD64 ELF64 serialización e implementación de registro Wave seleccionable para verificar el tamaño. Los objetos reubicables no son ejecutables.
IR Construcción, impresión, llamadas directas/indirectas con verificación de firma, reducción de versiones AST, validación de objetivos y diseños tipográficos verificados AST/typed IR formato 2 y constantes exactas en bits están disponibles; escrito IR el análisis y la emisión de llamadas a máquina siguen no disponibles
enlazador Interpretación de símbolos, verificación de objetivos de entrada, inspección de ubicación de sección de archivo/memoria No se admite la aplicación de reubicación completa ni la generación de archivos ejecutables.
Ejecución y depuración Reglas semánticas definidas en este documento. IR intérprete, generación de código native completa, inspección en tiempo de ejecución de la memoria de seguimiento, salida DWARF no compatible

Las reglas que prohíben el comportamiento indefinido se aplican a las memorias de rastreo y IR verificadas. La implementación experimental aún no implementa todas las comprobaciones de tiempo de ejecución en la documentación de referencia de memoria/ejecución.

Construir y ensamblar

Compile con Rust 1.86.0 o superior.

git clone https://github.com/wavefnd/Whale.git
cd Whale
cargo build --release --locked

Guarde el siguiente ensamblaje como answer.asm.

section .text
global answer

answer:
    mov eax, 42
    ret

Crea un objeto ELF64.

./target/release/whale asm --amd64 answer.asm -o answer.o

Utiliza el propio ensamblador de Whale, por lo que no se requiere ningún ensamblador externo. La salida contiene una función invocable y no contiene ningún código de inicio de proceso.

Los comandos experimentales AST→IR están disponibles compilando con --features socket-cli. Para conocer el comando de CLI, consulte Referencia de comando.

Uso y diagnóstico de la biblioteca.

IR debe verificarse antes de la ejecución o generación de código. Los errores de entrada y el mal uso de builder devolverán errores estructurales. Los errores de entrada en la biblioteca no deben finalizar el proceso del host ni sobrescribir el contenido existente. Las herramientas que aceptan entradas que no son de confianza deberían poder ajustar los límites de recursos.

La misma versión, entrada, destino y configuración de la cadena de herramientas deberían producir resultados deterministas. Los metadatos de la distribución identifican la versión·commit·y las funciones disponibles. CI verifica si hay buena entrada, entrada para rechazar, trap, O0 retención, round-trip, native semántica de ejecución para cada interfaz. Para conocer los comandos de desarrollo/verificación, consulte Whale Información de contribución.