Seguridad de memoria en Go: El peligro oculto de la falta de seguridad de hilos

2025-07-25

Este artículo cuestiona la comprensión común de la seguridad de memoria en Go. El autor argumenta que la simple seguridad de memoria (por ejemplo, evitar el acceso fuera de los límites) no es suficiente para programas robustos; la verdadera seguridad radica en evitar el comportamiento indefinido (UB). Un ejemplo de programa Go demuestra cómo las carreras de datos pueden llevar a UB y bloqueos, incluso sin usar operaciones `unsafe`. El autor argumenta que el manejo de las carreras de datos en Go no es lo suficientemente estricto, contradiciendo sus afirmaciones de seguridad de memoria, haciendo que los programas Go sean más vulnerables a exploits de seguridad. La conclusión enfatiza que la seguridad del lenguaje no es binaria, pero comprender las garantías de seguridad de un lenguaje y las compensaciones es crucial.

Leer más
Desarrollo Carrera de Datos

Los punteros son complicados II: Errores sutiles en las optimizaciones de LLVM

2025-02-02

Esta publicación profundiza en la importancia de la semántica precisa para las representaciones intermedias del compilador (IR), especialmente para lenguajes como C, C++ y Rust que permiten la manipulación insegura de punteros. El autor demuestra cómo una secuencia de tres optimizaciones del compilador LLVM aparentemente correctas puede llevar a un comportamiento de programa incorrecto. La causa raíz es la procedencia del puntero: la información adicional incrustada en un puntero más allá de su dirección de memoria, que detalla cómo se calculó. Esto requiere una especificación de IR de LLVM más precisa, incluyendo una definición precisa del comportamiento indefinido (UB). Tratar las IR del compilador como lenguajes de programación independientes con especificaciones rigurosas es clave para resolver estos problemas.

Leer más