Italiano

Strumenti per sviluppatori · Confronto di testi

Una breve storia di Unix diff: Hunt, McIlroy e il modello basato su linee

· Sfondo

testo-diff algoritmi storia del software

Una sequenza temporale storica che si ferma a un pannello di confronto moderno LCS verificato
Illustrazione vettoriale originale ToolAcre

Le tracce differiscono dagli strumenti Bell Labs degli anni '70 fino agli strumenti di oggi, spiegando perché il confronto del testo per riga è diventato lo standard e come gli algoritmi successivi lo hanno perfezionato.

Perché ogni immagine di "cosa è cambiato" assomiglia a Unix Diff: si apre con l'osservazione che i siti di hosting di codice, gli strumenti di revisione e gli strumenti del browser ereditano tutti lo stesso modello

Le schermate di revisione moderne spesso condividono una grammatica visiva di contesto invariato, rimozioni e aggiunte. È forte la tentazione di trasformare quella somiglianza in una storia di discendenza completa, ma questo repository è la prova dell'attuale implementazione di ToolAcre piuttosto che un archivio primario per la storia di Unix.

L'articolo sicuro distingue quindi due compiti. Spiega ciò che la presente fonte dimostra in dettaglio e segnala i nomi storici, le date e i motivi del libro di esercizi come richiedenti riferimenti autorevoli esterni. La familiarità non è una citazione, soprattutto per la paternità dell'algoritmo.

Bell Labs e il problema del confronto dei file: descrive la necessità dei primi Unix di confrontare i file sorgente e il lavoro di Douglas McIlroy e James Hunt

Lo schema attribuisce i primi lavori ai dati dei Bell Labs. Nessuno dei quattro file sorgente di differenze di testo documenta quella storia e l'attività vieta affermazioni inventate o non citate. Questo modulo pertanto non ripete dati biografici, citazioni o date come fatti accertati.

Un futuro articolo storico dovrebbe citare direttamente carte, manuali o archivi istituzionali. Fino a quando tali fonti non faranno parte dell'insieme di prove, la correzione è esplicita: ToolAcre può dimostrare un modello con differenza di linea oggi, ma non può autenticare ogni passaggio nella storia delle origini del modello.

La paternità dei Bell Labs e la storia dei primi Unix necessitano di fonti primarie esterne non presenti in questo repository

Il codice corrente si divide in base a convenzioni di fine riga normalizzate e confronta matrici di righe. Questo fatto spiega la granularità odierna. Non prova che le telescriventi o i vincoli di archiviazione abbiano causato una scelta progettuale storica, poiché nell'implementazione non viene importato materiale storico.

La distinzione conta oltre la borsa di studio. "Questo strumento funziona su linee" è riproducibile mediante test. "Le linee sono state scelte per questo motivo storico" è un'affermazione causale che necessita di documenti dell'epoca. Una buona scrittura tecnica non utilizza il codice attuale come prova retroattiva di intenti passati.

Il repository dimostra che ToolAcre confronta le righe; non dimostra perché i sistemi storici li abbiano scelti

`toUnifiedText` genera le etichette `---` e `+++` seguite da ogni riga preceduta da spazio, meno o più. Ha la forma di una patch ed è utile per il download, ma non contiene intestazioni di pezzi `@@`. Chiamarlo un differenziale unificato completo sovrastimerebbe il formato implementato qui.

Inoltre, il percorso non genera formati normali o di contesto. Potrebbe valere la pena spiegare l'evoluzione storica di questi formati con manuali esterni, ma l'output fornito supporta una descrizione più ristretta: un flusso leggibile di righe complete con marcatori familiari ed etichette fornite dal chiamante.

ToolAcre esporta un flusso a forma di patch, non formati di differenza storici completi

Lo schema dice che i motori moderni utilizzano Myers, ma ToolAcre no. L'intestazione del file nomina semplicemente LCS programmazione dinamica e documenta O(n·m) tempo e memoria nel diverso mezzo. L'implementazione riempie una tabella `Uint32Array` e ricostruisce un percorso attraverso di essa.

Questa non è una correzione estetica. I nomi degli algoritmi comportano una complessità specifica e un comportamento di collegamento. La rifinitura del prefisso e del suffisso più un limite di linea 2,000 rendono questo design adatto per differenze incollate delimitate. I lettori non dovrebbero trasferire una richiesta di complessità di Myers al codice con una matrice quadratica.

ToolAcre utilizza la semplice programmazione dinamica LCS, non Myers

Il confronto basato su righe non è ancora in grado di identificare l'equivalenza semantica, i blocchi spostati o l'intento di formattazione. Tali limitazioni derivano direttamente dalle chiavi di stringa ordinate. Un compilatore può considerare equivalenti due frammenti di origine mentre una differenza di riga riporta le sostituzioni o il contrario in caso di normalizzazione aggressiva.

Il modello originale resta utile proprio perché il suo risultato è ispezionabile. Ogni riga contiene testo, tipo e numeri di riga specifici del lato. Il revisore può non essere d'accordo con un allineamento pur tenendo conto di ogni riga, il che è più difficile con un punteggio opaco di "significato cambiato".

Ciò che questo non copre: confronto binario, compressione delta e aspetti interni del controllo della versione

I delta binari, la compressione, l'archiviazione di oggetti del repository e le operazioni interne di fusione sono esterni sia a questo percorso che al set di prove. L'articolo omette inoltre la cronologia storica richiesta invece di riempirla a memoria. È preferibile ignorare un reclamo piuttosto che pubblicarne uno non verificato.

Per questi argomenti, raccogliere le specifiche primarie e le fonti dai sistemi descritti. Non dedurre un formato di file dalla somiglianza visiva o un algoritmo dalla parola “minimo”. La configurazione di ToolAcre utilizza quella parola, mentre l'implementazione fornisce l'esatto meccanismo che la qualifica.

Conclusione: cinquant'anni di una buona idea: riassume il lignaggio e rileva che il confronto testuale di ToolAcre applica lo stesso modello basato su righe in una scheda del browser

La lezione durevole è metodologica: separare la storia dall’implementazione. Questo strumento del browser dimostra la suddivisione della linea normalizzata, la ricostruzione LCS, le opzioni esplicite, un limite di linea diverso e il rendering locale. Non dimostra chi ha inventato le convenzioni circostanti o perché.

Utilizza il percorso per esaminare il testo attuale e utilizza le fonti primarie per raccontare il passato. Questo confine può rendere l’articolo storico meno ampio, ma rende verificabile ogni affermazione inclusa. La precisione batte un lignaggio raffinato assemblato da ricordi non citati.