Alat pembangun · Perbandingan teks
Sejarah Singkat Unix diff: Hunt, McIlroy dan Model Berasaskan Garis
· Latar belakang
perbezaan teks algoritma perisian-sejarah
Jejak berbeza daripada Bell Labs pada tahun 1970-an kepada alat hari ini, menerangkan sebab membandingkan teks mengikut baris menjadi standard dan cara algoritma kemudiannya memperhalusinya.
Sebab setiap gambar 'apa yang berubah' kelihatan seperti Unix diff — dibuka dengan pemerhatian bahawa kod tapak pengehosan, alat semakan dan alat pelayar semuanya mewarisi model yang sama
Skrin ulasan moden selalunya berkongsi tatabahasa visual konteks, pengalihan keluar dan penambahan yang tidak berubah. Memang menggoda untuk mengubah persamaan itu menjadi cerita keturunan yang lengkap, tetapi repositori ini adalah bukti untuk pelaksanaan semasa ToolAcre dan bukannya arkib utama untuk sejarah Unix.
Oleh itu, artikel selamat membezakan dua tugas. Ia menerangkan perkara yang dibuktikan secara terperinci oleh sumber semasa dan menandakan nama sejarah, tarikh dan motif buku kerja itu sebagai memerlukan rujukan berwibawa luaran. Kebiasaan bukan petikan, terutamanya untuk pengarang algoritma.
Bell Labs dan masalah membandingkan fail — menerangkan keperluan Unix awal untuk membandingkan fail sumber dan kerja Douglas McIlroy dan James Hunt
Garis besar mengaitkan kerja awal kepada angka Bell Labs. Tiada satu pun daripada empat fail sumber perbezaan Teks yang mendokumenkan sejarah itu, dan tugas itu melarang tuntutan yang dicipta atau tidak disimpan. Modul ini tidak mengulangi butiran biografi, petikan atau tarikh sebagai fakta yang telah diselesaikan.
Rencana sejarah masa depan harus memetik kertas, manual atau arkib institusi secara langsung. Sehingga sumber tersebut menjadi sebahagian daripada set bukti, pembetulan adalah eksplisit: ToolAcre boleh menunjukkan model perbezaan garis hari ini, tetapi ia tidak dapat mengesahkan setiap langkah dalam cerita asal model.
Kepengarangan Bell Labs dan sejarah Unix awal memerlukan sumber utama luaran yang tidak terdapat dalam repositori ini
Pemisahan kod semasa pada konvensyen baris baharu yang dinormalkan dan membandingkan tatasusunan baris. Fakta itu menjelaskan butiran hari ini. Ia tidak membuktikan teletaip atau kekangan storan menyebabkan pilihan reka bentuk sejarah, kerana tiada bahan sejarah diimport ke dalam pelaksanaan.
Perbezaan itu penting di luar kesarjanaan. "Alat ini berfungsi pada talian" boleh dihasilkan semula melalui ujian. "Barisan dipilih atas sebab sejarah ini" ialah tuntutan kausal yang memerlukan dokumen dari tempoh tersebut. Penulisan teknikal yang baik tidak menggunakan kod sekarang sebagai bukti retroaktif niat lalu.
Repositori membuktikan ToolAcre membandingkan baris; ia tidak membuktikan mengapa sistem sejarah memilih mereka
`toUnifiedText` mengeluarkan label `---` dan `+++` diikuti dengan setiap baris yang diawali dengan ruang, tolak atau tambah. Ia berbentuk tampalan dan berguna untuk dimuat turun, tetapi ia tidak mengandungi `@@` pengepala sekelip. Memanggilnya sebagai perbezaan bersatu yang lengkap akan melebih-lebihkan format yang dilaksanakan di sini.
Laluan itu juga tidak menjana format biasa atau konteks. Evolusi sejarah dalam kalangan format tersebut mungkin patut dijelaskan dengan manual luaran, namun output yang dihantar menyokong penerangan yang lebih sempit: aliran baris penuh yang boleh dibaca dengan penanda biasa dan label yang dibekalkan oleh pemanggil.
ToolAcre mengeksport strim berbentuk tampalan, bukan format perbezaan sejarah penuh
Garis besar mengatakan enjin moden menggunakan Myers, tetapi ToolAcre tidak. Pengepala failnya menamakan biasa LCS pengaturcaraan dinamik dan dokumen O(n·m) masa dan memori di bahagian tengah yang berbeza. Pelaksanaan mengisi jadual `Uint32Array` dan membina semula satu laluan melaluinya.
Ini bukan pembetulan kosmetik. Nama algoritma membawa kerumitan tertentu dan tingkah laku seri. Pemangkasan awalan dan akhiran ditambah penutup baris 2,000 menjadikan reka bentuk ini sesuai untuk perbezaan tampalan bersempadan. Pembaca tidak seharusnya memindahkan tuntutan kerumitan Myers ke kod dengan matriks kuadratik.
ToolAcre menggunakan LCS pengaturcaraan dinamik biasa, bukan Myers
Perbandingan berasaskan baris masih tidak dapat mengenal pasti kesetaraan semantik, blok yang dialihkan atau niat pemformatan. Had tersebut mengikuti terus daripada kunci rentetan yang dipesan. Pengkompil boleh mempertimbangkan dua serpihan sumber yang setara manakala perbezaan baris melaporkan penggantian, atau sebaliknya di bawah normalisasi yang agresif.
Model asal kekal berguna dengan tepat kerana hasilnya boleh diperiksa. Setiap baris mempunyai teks, jenis dan nombor baris khusus sisi. Penyemak boleh tidak bersetuju dengan penjajaran sementara masih mengambil kira setiap baris, yang lebih sukar dengan skor "makna berubah" legap.
Perkara ini tidak meliputi — perbandingan binari, pemampatan delta dan dalaman kawalan versi
Delta binari, mampatan, storan objek repositori dan dalaman gabungan berada di luar kedua-dua laluan ini dan set bukti. Artikel itu juga mengetepikan kronologi sejarah yang diminta dan bukannya mengisinya dari ingatan. Ketiadaan tuntutan adalah lebih baik daripada menerbitkan tuntutan yang tidak disahkan.
Untuk topik tersebut, kumpulkan spesifikasi utama dan sumber daripada sistem yang diterangkan. Jangan simpulkan format fail daripada persamaan visual atau algoritma daripada perkataan "minimal." Konfigurasi ToolAcre menggunakan perkataan itu, manakala pelaksanaan membekalkan mekanisme tepat yang melayakkannya.
Bawa pulang: lima puluh tahun satu idea yang bagus — meringkaskan keturunan dan menyatakan bahawa Perbandingan Teks ToolAcre menggunakan model berasaskan baris yang sama dalam tab pelayar
Pelajaran yang tahan lama adalah metodologi: pisahkan sejarah daripada pelaksanaan. Alat pelayar ini membuktikan pemisahan baris yang dinormalkan, pembinaan semula LCS, pilihan eksplisit, had garis berbeza dan pemaparan setempat. Ia tidak membuktikan siapa yang mencipta konvensyen sekeliling atau mengapa.
Gunakan laluan untuk memeriksa teks semasa dan gunakan sumber utama untuk memberitahu masa lalu. Sempadan itu mungkin menjadikan artikel sejarah kurang meluas, tetapi ia menjadikan setiap pernyataan yang disertakan boleh diaudit. Ketepatan mengalahkan garis keturunan yang digilap yang terhimpun daripada ingatan yang tidak tercatat.