libhandler: efectos algebraicos y handlers en C99 portable

Fuentes: libhandler: algebraic effects and handlers in portable C99

libhandler es una biblioteca en C99 que implementa efectos algebraicos y handlers en un compilador C estándar, sin requerir extensiones específicas del compilador. Su objetivo declarado es ofrecer un mecanismo ligero de captura de pilas de ejecución —de forma segura y portable— que permita escribir código asíncrono en estilo directo (straight-line), aplanando lo que tradicionalmente serían cadenas de callbacks. Los propios autores la describen como “mónadas gratis en C” y señalan la integración con libuv como caso de uso prioritario para simplificar la programación basada en esa biblioteca de E/S asíncronas.

En la práctica, libhandler se distribuye como una biblioteca estática generada con ./configure y make, con variantes de compilación debug, testopt y release, y soporte opcional para análisis con Valgrind. Admite opciones de configuración para seleccionar compilador (gcc, clang, cl), ABI (amd64, x64), sistema operativo y archivador, y expone destinos (targets) como staticlib, tests, bench y staticlibxx para la variante con soporte de excepciones y desenrollado de destructores de C++. La documentación incluye configuraciones verificadas en Linux x86_64 y ARMv7/v8 (incluidos Raspberry Pi 3 con Raspbian y Gentoo), y en Windows tanto con la consola bash sobre Windows 10 como con msys2 y el IDE Visual Studio 2015.

El proyecto se presenta explícitamente como “en desarrollo activo” y advierte de que la API puede cambiar. Detalla además las dependencias en particularidades de las implementaciones de pilas y setjmp de cada plataforma, por lo que recomienda pruebas cuidadosas en nuevas arquitecturas. Un informe técnico de Microsoft Research acompaña a la biblioteca, y existe código inicial de integración con libuv en la rama dev.