- El comportamiento indefinido en C se refiere a situaciones de código en las que el estándar no define el resultado. Según el texto original, esto es un problema porque los compiladores pueden aplicar optimizaciones distintas de lo que esperan los programadores.
- El ponente, Martin Uecker, explicó que el estándar C23 añadió una cláusula 'no time travel' para impedir optimizaciones de tipo viaje en el tiempo. También afirmó que, de unos 100 comportamientos indefinidos del estándar, 45 se eliminaron en el borrador C2y.
- Según la presentación, aumentan las herramientas de comprobación, como advertencias del compilador, analizadores estáticos, sanitizadores y verificación formal. La seguridad de memoria se aborda en tres partes: tipos, espacio y tiempo. La opinión del ponente es que las garantías completas requieren comprobaciones en tiempo de ejecución costosas o verificación formal.
- El texto original ofrece un ejemplo de división en 0, que muestra que una optimización que elimina una comprobación antes de una división está permitida en algunos casos, pero es errónea en otros. Esto se debe a que una llamada a función intermedia cambia el comportamiento del programa.
Me llamó la atención el ejemplo de la división entre 0, donde se puede eliminar por completo la comprobación. También es interesante que el mismo código pase a ser una optimización incorrecta con solo añadir una llamada a una función. Por el artículo solo, cuesta saber cuándo la eliminación de 45 comportamientos indefinidos del borrador de C2y se reflejará realmente en el comportamiento de los compiladores.