Start Debugging

Blog

Página 8 de 91

Como casar parênteses aninhados e tags balanceadas com balancing groups no Regex do .NET

Balancing groups (?<name>) e (?<-name>) transformam um grupo de captura do Regex do .NET em uma pilha, então um único padrão consegue casar parênteses ou tags <div> aninhados em qualquer profundidade. O padrão completo, como a pilha funciona, a captura do conteúdo interno com (?<inner-open>) e as armadilhas verificadas no .NET 11 RC1: a checagem de pilha vazia, backtracking catastrófico, NonBacktracking e tipos de colchetes misturados.

O que é o layout transparente de struct, e por que um struct wrapper de campo único muda a convenção de chamada no .NET?

Um struct transparente é aquele que a ABI trata exatamente como seu único campo. O .NET 11 não oferece essa garantia: um struct que encapsula um double é passado em RCX no Windows x64, mas em XMM0 no Linux e no macOS. Veja o disassembly do JIT do .NET 11 em três ABIs, os bugs de P/Invoke que isso causa e como escrever tipos wrapper seguros em qualquer fronteira.