Computed Goto es una extensión del lenguaje C (y C++) soportada por compiladores como GCC y Clang, que permite realizar un salto (goto) a una dirección de memoria calculada en tiempo de ejecución. A diferencia del 'goto' estándar que salta a una etiqueta fija, 'Computed Goto' utiliza un puntero a una etiqueta, lo que permite implementar tablas de salto dinámicas. Esto se logra almacenando las direcciones de las etiquetas en un array y luego utilizando un índice para seleccionar la etiqueta de destino. Su sintaxis típica es 'goto *expression;', donde 'expression' es un puntero a 'void' que contiene la dirección de una etiqueta.
Esta técnica es fundamental en la implementación de intérpretes de bytecode, máquinas de estados finitos (FSM) de alto rendimiento y dispatchers de eventos. Un ejemplo prominente es el intérprete de bytecode de Python (CPython), que utiliza 'Computed Goto' para optimizar el bucle principal de ejecución de instrucciones, reduciendo la sobrecarga de los 'switch-case' anidados. Otro caso de uso es en el kernel de Linux, donde se ha empleado en ciertas arquitecturas para optimizar el manejo de interrupciones o la implementación de funciones de traza, mejorando la eficiencia del control de flujo en rutas críticas.
Para un Arquitecto de Sistemas, 'Computed Goto' representa una herramienta de optimización de bajo nivel con implicaciones significativas en el rendimiento de sistemas críticos. Su valor radica en la capacidad de eliminar las costosas ramificaciones condicionales (branching) asociadas a grandes estructuras 'switch-case', lo que puede resultar en una reducción de los 'branch mispredictions' y una mejora en la localidad de caché de instrucciones. Sin embargo, su uso introduce complejidad y reduce la portabilidad del código, ya que es una extensión no estándar del lenguaje. La decisión de emplearlo debe sopesar la ganancia de rendimiento marginal en cuellos de botella extremos frente a la mantenibilidad, la depuración y la compatibilidad con diferentes compiladores y arquitecturas. Es una técnica para aplicar con precisión quirúrgica en escenarios donde cada ciclo de CPU cuenta.