Tipos declarativos para el sistema de gestión de memoria de WASM

Fuentes: Declarative WASM GC Types

El sistema de gestión de memoria (GC) de WebAssembly introduce desafíos complejos para la gestión declarativa de tipos, especialmente con estructuras anidadas y grupos de tipos recursivos. El artículo técnico analiza cómo modelar estos tipos de manera coherente en el código fuente, superando las limitaciones de la especificación original de WASM, que carece de documentación conectiva suficiente para facilitar la comprensión de las instrucciones y la validación.

La solución propuesta se basa en la deduplicación de referencias mediante tablas de índices, similar a la memoria lineal, pero adaptada a la naturaleza de los tipos. Un aspecto clave es que los valores de la pila (heap) conocen su tipo específico, lo que permite simular tipos nominales mediante reglas de subtipado existentes. Para resolver la dificultad de generar índices en tipos recursivos, se utiliza una técnica de separación de claves y código, permitiendo deduplicar funciones recursivas sin entrar en bucles infinitos.

El marco declarativo distingue entre tipos de pila (WTyp) y tipos de pila (HTyp). Los tipos de pila incluyen enteros, flotantes, vectores y referencias, siendo siempre monomórficos, aunque las referencias pueden apuntar a una jerarquía de tipos más rica. Los tipos de pila, por su parte, abarcan tipos compuestos como estructuras y arrays, así como clasificadores de tipos de pila (HCls) que definen la jerarquía superior e inferior de la memoria. Este enfoque permite a los desarrolladores escribir valores coherentes en Haskell que se refieren a los tipos sin depender de la unicidad global de identificadores, simplificando la comparación de tipos mediante instancias de igualdad estándar, aunque omitiendo metadatos como nombres de campos.