Wasmtime 47, el runtime de WebAssembly desarrollado por Bytecode Alliance, activa por defecto las propuestas de estándar Wasm GC y excepciones, dos extensiones del lenguaje que permiten soportar de forma nativa lenguajes de alto nivel con modelos de objetos y referencias y con manejo de excepciones. Hasta ahora, los toolchains de esos lenguajes debían incrustar su propio recolector de basura dentro de los binarios .wasm o implementar convenciones de llamada manuales que devolvieran, además del resultado, un indicador de excepción, lo que inflaba el tamaño del binario y añadía sobrecarga en tiempo de ejecución.
La propuesta Wasm GC añade al lenguaje tipos struct y array con relaciones de subtipado, gestionados por el runtime, lo que elimina la necesidad de un recolector propio y reduce el tamaño de los binarios. La propuesta de excepciones introduce construcciones tipo throw y try/catch, con desenrollado clásico que no penaliza la ruta de retorno normal, mejorando el rendimiento.
El recolector de Wasmtime es un colector copiador de semi-espacios estilo Cheney, construido sobre las memorias lineales de WebAssembly. Las referencias a objetos GC son índices de 32 bits, no punteros nativos, lo que aporta seguridad por defensa en profundidad, integración con el asignador agrupado de instancias —con tiempos de instanciación de unos 5 microsegundos— y portabilidad entre plataformas, incluido bare metal. El equipo extendió además la infraestructura de fuzzing con wasm-smith y dos fuzzers adicionales específicos para grafos de objetos y detección de corrupción del heap. El artículo advierte de que el rendimiento todavía no alcanza al de los recolectores de V8 o SpiderMonkey, ya que la prioridad ha sido la corrección, y de que el diseño está optimizado para el caso de uso más habitual en producción: muchas instancias Wasm pequeñas y desechables.
