Segurança de memória em Go: O perigo oculto da falta de segurança de threads

2025-07-25

Este artigo questiona a compreensão comum da segurança de memória em Go. O autor argumenta que a simples segurança de memória (por exemplo, evitar acesso fora dos limites) não é suficiente para programas robustos; a verdadeira segurança reside em evitar comportamento indefinido (UB). Um exemplo de programa Go demonstra como corridas de dados podem levar a UB e travamentos, mesmo sem usar operações `unsafe`. O autor argumenta que o tratamento de corridas de dados em Go não é estrito o suficiente, contradizendo suas afirmações de segurança de memória, tornando os programas Go mais vulneráveis a exploits de segurança. A conclusão enfatiza que a segurança da linguagem não é binária, mas entender as garantias de segurança de uma linguagem e as compensações é crucial.

Leia mais
Desenvolvimento Corrida de Dados

Ponteiros São Complicados II: Bugs Subtis em Otimizações do LLVM

2025-02-02

Esta postagem aprofunda a importância da semântica precisa para representações intermediárias de compilador (IRs), especialmente para linguagens como C, C++ e Rust que permitem manipulação de ponteiros inseguros. O autor demonstra como uma sequência de três otimizações de compilador LLVM aparentemente corretas pode levar a um comportamento de programa incorreto. A causa raiz é a proveniência do ponteiro – as informações extras embutidas em um ponteiro além de seu endereço de memória, detalhando como ele foi calculado. Isso requer uma especificação de IR LLVM mais precisa, incluindo uma definição precisa de comportamento indefinido (UB). Tratar IRs de compilador como linguagens de programação autônomas com especificações rigorosas é fundamental para resolver esses problemas.

Leia mais
Desenvolvimento semântica de ponteiros