Português (Brasil)

Ferramentas para desenvolvedores · Comparação de texto

Uma breve história do diff Unix: Hunt, McIlroy e o modelo baseado em linha

· Fundo

diferença de texto algoritmos histórico do software

Uma linha do tempo histórica parando em um painel de comparação LCS moderno e verificado
Ilustração vetorial original ToolAcre

Os rastreamentos diferem dos Bell Labs na década de 1970 para as ferramentas atuais, explicando por que comparar texto por linhas se tornou o padrão e como algoritmos posteriores o refinaram.

Por que cada imagem de 'o que mudou' se parece com o Unix diff - começa com a observação de que sites de hospedagem de código, ferramentas de revisão e ferramentas de navegador herdam o mesmo modelo

As telas de revisão modernas geralmente compartilham uma gramática visual de contexto, remoções e acréscimos inalterados. É tentador transformar essa semelhança em uma história de linhagem completa, mas este repositório é uma evidência da implementação atual de ToolAcre, em vez de um arquivo primário da história do Unix.

O artigo seguro distingue, portanto, duas tarefas. Explica o que a presente fonte prova em detalhe e marca os nomes históricos, datas e motivos do livro de exercícios como exigindo referências externas autorizadas. Familiaridade não é uma citação, especialmente para autoria de algoritmo.

Bell Labs e o problema de comparação de arquivos - descreve a necessidade do início do Unix de comparar arquivos de origem e o trabalho de Douglas McIlroy e James Hunt

O esboço atribui os primeiros trabalhos aos números do Bell Labs. Nenhum dos quatro arquivos de origem Text diff documenta essa história, e a tarefa proíbe afirmações inventadas ou não citadas. Conseqüentemente, este módulo não repete detalhes biográficos, citações ou datas como fatos consolidados.

Um futuro artigo histórico deverá citar diretamente artigos, manuais ou arquivos institucionais. Até que essas fontes façam parte do conjunto de evidências, a correção é explícita: ToolAcre pode demonstrar um modelo de diferença de linha hoje, mas não pode autenticar todas as etapas da história de origem do modelo.

A autoria do Bell Labs e a história do início do Unix precisam de fontes primárias externas não presentes neste repositório

O código atual se divide em convenções de nova linha normalizadas e compara matrizes de linhas. Esse fato explica a granularidade de hoje. Isso não prova que teletipos ou restrições de armazenamento causaram uma escolha de projeto histórico, porque nenhum material histórico é importado para a implementação.

A distinção importa além da bolsa de estudos. “Esta ferramenta funciona em linhas” é reproduzível por testes. “As linhas foram escolhidas por esta razão histórica” é uma afirmação causal que necessita de documentos da época. Uma boa redação técnica não usa o código atual como evidência retroativa de intenções passadas.

O repositório prova que ToolAcre compara linhas; não prova por que os sistemas históricos os escolheram

`toUnifiedText` emite rótulos `---` e `+++` seguidos por cada linha prefixada com espaço, menos ou mais. Ele tem formato de patch e é útil para download, mas não contém cabeçalhos `@@`. Chamá-lo de comparação unificada completa seria exagerar o formato implementado aqui.

A rota também não gera formatos normais ou de contexto. Pode valer a pena explicar a evolução histórica entre esses formatos com manuais externos, mas a saída enviada suporta uma descrição mais restrita: um fluxo de linha completa legível com marcadores familiares e rótulos fornecidos pelo chamador.

ToolAcre exporta um fluxo em forma de patch, não formatos de comparação históricos completos

O esboço diz que os motores modernos usam Myers, mas ToolAcre não. Seu cabeçalho de arquivo nomeia programação dinâmica simples LCS e documenta tempo e memória O(n·m) em meio diferente. A implementação preenche uma tabela `Uint32Array` e reconstrói um caminho através dela.

Esta não é uma correção cosmética. Os nomes dos algoritmos carregam complexidade específica e comportamento vinculado. O corte de prefixo e sufixo, além de um limite de linha 2,000, tornam este design adequado para diferenças coladas limitadas. Os leitores não devem transferir uma afirmação de complexidade de Myers para um código com uma matriz quadrática.

ToolAcre usa programação dinâmica simples LCS, não Myers

A comparação baseada em linhas ainda não consegue identificar equivalência semântica, blocos movidos ou intenção de formatação. Essas limitações decorrem diretamente das chaves de string ordenadas. Um compilador pode considerar dois fragmentos de origem equivalentes enquanto uma linha diff relata substituições, ou o inverso sob normalização agressiva.

O modelo original permanece útil precisamente porque o seu resultado é inspecionável. Cada linha possui texto, tipo e números de linha específicos do lado. O revisor pode discordar de um alinhamento e ainda levar em conta cada linha, o que é mais difícil com uma pontuação opaca de “significado alterado”.

O que isso não cobre – comparação binária, compactação delta e controles internos de versão

Deltas binários, compactação, armazenamento de objetos de repositório e mesclagem interna estão fora dessa rota e do conjunto de evidências. O artigo também omite a cronologia histórica solicitada, em vez de preenchê-la de memória. É preferível perder uma reivindicação do que publicar uma não verificada.

Para esses tópicos, colete especificações primárias e fontes dos sistemas que estão sendo descritos. Não infira um formato de arquivo a partir de semelhança visual ou um algoritmo a partir da palavra “mínimo”. A configuração de ToolAcre usa essa palavra, enquanto a implementação fornece o mecanismo exato que a qualifica.

Conclusão: cinquenta anos de uma boa ideia — resume a linhagem e observa que a comparação de texto de ToolAcre aplica o mesmo modelo baseado em linhas em uma guia do navegador

A lição duradoura é metodológica: separar a história da implementação. Esta ferramenta de navegador prova divisão de linha normalizada, reconstrução LCS, opções explícitas, limite de linha diferente e renderização local. Não prova quem inventou as convenções circundantes nem porquê.

Use a rota para inspecionar o texto atual e use fontes primárias para contar o passado. Essa fronteira pode tornar o artigo histórico menos abrangente, mas torna cada declaração incluída auditável. A precisão supera uma linhagem polida montada a partir de lembranças não citadas.