Las funciones anidadas de C —un caso particular del lenguaje soportado por GCC— han dependido históricamente de un fragmento de código auxiliar llamado trampolín que se genera en tiempo de ejecución sobre la pila. Para poder alojarlo, la pila debía ser ejecutable, algo que choca con una de las medidas de seguridad más extendidas en los sistemas operativos modernos. Aunque GCC ya ofrecía la opción de colocar el trampolín en el heap, esa alternativa sigue siendo imperfecta: la asignación es más costosa y el código puede filtrarse al usar longjmp. Este artículo repasa dos novedades recientes que apuntan a eliminar el problema de raíz. La primera es la publicación de GCC 16, que garantiza formalmente que una función anidada que no capture variables de su función padre no necesitará ningún trampolín, incluso sin optimizaciones, y emite una advertencia cuando se intenta devolver una función que sí captura el contexto local. La segunda es la incorporación, en la rama de desarrollo de GCC, de un parche del propio autor que añade dos nuevos built-ins pensados para escribir esas mismas funciones sin trampolines, apoyándose en el registro ya reservado por la ABI para la cadena estática. El texto muestra ejemplos concretos de código, macros para construir un tipo genérico de puntero ancho y cómo el compilador llega a optimizar el cierre resultante a una única instrucción de ensamblador. El cierre señala que la portabilidad sigue siendo limitada, ya que solo GCC soporta esta característica, y adelanta próximos trabajos para extender el uso de funciones anidadas a clang y a versiones antiguas de GCC.
