Depois do Acordo Ortográfico de 1990, palavras como "recepção" e "óptimo" perderam letras mudas em Portugal, virando "receção" e "ótimo" — enquanto o Brasil, que já escrevia sem essas consoantes, mudou pouco. Comparar um texto em português europeu antigo com a versão pós-acordo, ou um arquivo pt-BR com seu equivalente pt-PT, é um caso clássico onde um diff acaba destacando dezenas de linhas "diferentes" que na prática dizem a mesma coisa.
A maior subsequência comum
A abordagem clássica do diff se baseia em encontrar a maior subsequência comum (LCS) de linhas entre duas versões de um texto. As linhas que fazem parte dessa subsequência são consideradas inalteradas; tudo o mais é marcado como removido da versão antiga ou adicionado à nova. O resultado é o conjunto mínimo de mudanças, não qualquer sequência possível de remoções e adições.
Como ler o resultado
Linhas removidas costumam ser marcadas com - em vermelho, e as adicionadas com + em verde. Uma linha "alterada" no sentido comum é tecnicamente mostrada como a remoção da linha antiga somada à adição da nova — o diff não tem noção própria de editar uma linha existente.
Por que a comparação linha por linha nem sempre é intuitiva
Inserir uma única linha nova no meio de um texto pode fazer a comparação linha por linha marcar todas as linhas seguintes como "alteradas", porque o algoritmo nem sempre distingue uma inserção de uma substituição em massa. Isso fica evidente ao comparar arquivos de localização entre variantes do português: uma única string nova no meio do arquivo pode disparar dezenas de diferenças falsas.
Para que serve
- Verificar exatamente o que mudou entre duas versões de um arquivo de configuração ou documento.
- Revisar um code review entendendo a lógica do algoritmo de busca de diferenças.
- Comparar a saída de um script antes e depois de uma refatoração para confirmar a ausência de regressões.
Diff em nível de linha vs. em nível de caractere
A comparação linha por linha funciona bem para código e arquivos de configuração, mas para um texto corrido ou uma frase longa em que só uma palavra mudou, ela marca a linha inteira como removida e adicionada de novo. Um diff em nível de palavra ou caractere dentro da linha aponta com precisão qual palavra mudou — ao custo de maior complexidade computacional em textos grandes.