เครื่องมือสำหรับนักพัฒนา · การเปรียบเทียบข้อความ
ประวัติโดยย่อของ Unix diff: Hunt, McIlroy และ Line-Based Model
· พื้นหลัง
ข้อความที่แตกต่าง อัลกอริธึม ประวัติซอฟต์แวร์
ร่องรอยแตกต่างจาก Bell Labs ในปี 1970 จนถึงเครื่องมือในปัจจุบัน โดยอธิบายว่าเหตุใดการเปรียบเทียบข้อความทีละบรรทัดจึงกลายเป็นมาตรฐาน และวิธีที่อัลกอริธึมปรับปรุงในภายหลังอย่างไร
เหตุใดรูปภาพทุกภาพของ 'สิ่งที่เปลี่ยนแปลง' จึงดูเหมือน Unix diff — เปิดขึ้นมาพร้อมกับสังเกตว่าไซต์โฮสต์โค้ด เครื่องมือตรวจสอบ และเครื่องมือเบราว์เซอร์ล้วนสืบทอดโมเดลเดียวกัน
หน้าจอตรวจสอบสมัยใหม่มักจะแชร์ไวยากรณ์ภาพของบริบท การลบออก และการเพิ่มเติมที่ไม่เปลี่ยนแปลง เป็นเรื่องที่น่าสนใจที่จะเปลี่ยนความคล้ายคลึงนั้นให้กลายเป็นเรื่องราวเชื้อสายโดยสมบูรณ์ แต่พื้นที่เก็บข้อมูลนี้เป็นหลักฐานของการนำไปใช้งานในปัจจุบันของ ToolAcre แทนที่จะเป็นไฟล์เก็บถาวรหลักสำหรับประวัติ Unix
บทความที่ปลอดภัยจึงแยกงานสองอย่างออกจากกัน โดยจะอธิบายสิ่งที่แหล่งข้อมูลปัจจุบันพิสูจน์โดยละเอียด และทำเครื่องหมายชื่อ ประวัติศาสตร์ วันที่ และแรงจูงใจของสมุดงานว่าต้องมีการอ้างอิงที่เชื่อถือได้จากภายนอก ความคุ้นเคยไม่ใช่การอ้างอิง โดยเฉพาะอย่างยิ่งสำหรับผู้เขียนอัลกอริทึม
Bell Labs และปัญหาในการเปรียบเทียบไฟล์ - อธิบายถึงความจำเป็นของ Unix ยุคแรกในการเปรียบเทียบไฟล์ต้นฉบับและงานของ Douglas McIlroy และ James Hunt
โครงร่างระบุถึงการทำงานในช่วงแรกๆ ของตัวเลขของ Bell Labs ไม่มีไฟล์ต้นฉบับ Text diff ทั้งสี่ไฟล์ที่บันทึกประวัตินั้น และงานนี้ห้ามการกล่าวอ้างที่มีการประดิษฐ์หรือไม่ได้อ้างอิง โมดูลนี้จึงไม่ทำซ้ำรายละเอียดชีวประวัติ ใบเสนอราคา หรือวันที่ตามข้อเท็จจริงที่ตกลงกันไว้
บทความประวัติศาสตร์ในอนาคตควรอ้างอิงเอกสาร คู่มือ หรือเอกสารสำคัญของสถาบันโดยตรง จนกว่าแหล่งที่มาเหล่านี้จะเป็นส่วนหนึ่งของชุดหลักฐาน การแก้ไขมีความชัดเจน: ToolAcre สามารถสาธิตโมเดล line-diff ได้ในปัจจุบัน แต่ไม่สามารถตรวจสอบทุกขั้นตอนในเรื่องราวต้นกำเนิดของโมเดลได้
ความเป็นผู้เขียนของ Bell Labs และประวัติ Unix ยุคแรกๆ จำเป็นต้องมีแหล่งข้อมูลหลักภายนอกที่ไม่มีอยู่ในที่เก็บนี้
โค้ดปัจจุบันจะแยกตามแบบแผนการขึ้นบรรทัดใหม่ที่เป็นมาตรฐานและเปรียบเทียบอาร์เรย์ของบรรทัด ข้อเท็จจริงดังกล่าวอธิบายรายละเอียดเล็กๆ น้อยๆ ของวันนี้ ไม่ได้พิสูจน์ว่าเทเลไทป์หรือข้อจำกัดในการจัดเก็บข้อมูลทำให้เกิดตัวเลือกการออกแบบในอดีต เนื่องจากไม่มีการนำเข้าเนื้อหาทางประวัติศาสตร์ในการนำไปใช้งาน
ความแตกต่างมีความสำคัญมากกว่าทุนการศึกษา “เครื่องมือนี้ใช้งานได้ในบรรทัด” สามารถทำซ้ำได้โดยการทดสอบ “เส้นถูกเลือกด้วยเหตุผลทางประวัติศาสตร์นี้” เป็นการกล่าวอ้างเชิงสาเหตุซึ่งจำเป็นต้องมีเอกสารจากช่วงเวลานั้น การเขียนทางเทคนิคที่ดีไม่ได้ใช้รหัสปัจจุบันเป็นหลักฐานย้อนหลังของเจตนาในอดีต
พื้นที่เก็บข้อมูลพิสูจน์ว่า ToolAcre เปรียบเทียบบรรทัด มันไม่ได้พิสูจน์ว่าทำไมระบบประวัติศาสตร์จึงเลือกพวกมัน
`toUnifiedText` ปล่อยป้ายกำกับ `---` และ `+++` ตามด้วยทุกแถวที่นำหน้าด้วยการเว้นวรรค ลบหรือบวก มันเป็นรูปแบบแพตช์และมีประโยชน์สำหรับการดาวน์โหลด แต่ไม่มีส่วนหัว `@@` ก้อนใหญ่ การเรียกมันว่าความแตกต่างแบบครบวงจรจะเกินจริงรูปแบบที่ใช้ที่นี่
เส้นทางยังไม่สร้างรูปแบบปกติหรือบริบท วิวัฒนาการในอดีตของรูปแบบเหล่านั้นอาจคุ้มค่าที่จะอธิบายด้วยคู่มือภายนอก แต่เอาต์พุตที่จัดส่งยังรองรับคำอธิบายที่แคบกว่า นั่นคือสตรีมเต็มแถวที่อ่านได้พร้อมเครื่องหมายที่คุ้นเคยและป้ายกำกับที่ผู้โทรระบุ
ToolAcre ส่งออกสตรีมที่มีรูปแบบแพตช์ ไม่ใช่รูปแบบความแตกต่างในอดีตแบบเต็ม
โครงร่างบอกว่าเอ็นจิ้นสมัยใหม่ใช้ Myers แต่ ToolAcre ไม่ได้ใช้ ส่วนหัวของไฟล์ชื่อธรรมดา LCS การเขียนโปรแกรมแบบไดนามิกและเอกสาร O(n·m) เวลาและหน่วยความจำเหนือจุดกึ่งกลางที่ต่างกัน การใช้งานจะเติมตาราง `Uint32Array` และสร้างเส้นทางเดียวผ่านตารางนั้น
นี่ไม่ใช่การแก้ไขเพื่อความสวยงาม ชื่ออัลกอริทึมมีความซับซ้อนและพฤติกรรมที่เชื่อมโยงกันโดยเฉพาะ การตัดแต่งคำนำหน้าและส่วนต่อท้ายบวกกับตัวพิมพ์ใหญ่ 2,000 บรรทัด ทำให้การออกแบบนี้เหมาะสำหรับความแตกต่างในการวางแบบมีขอบเขต ผู้อ่านไม่ควรถ่ายโอนการอ้างสิทธิ์ความซับซ้อนของ Myers ไปยังโค้ดที่มีเมทริกซ์กำลังสอง
ToolAcre ใช้การเขียนโปรแกรมแบบไดนามิก LCS ธรรมดา ไม่ใช่ Myers
การเปรียบเทียบแบบใช้เส้นยังคงไม่สามารถระบุความเท่าเทียมกันทางความหมาย บล็อกที่ถูกย้าย หรือความตั้งใจในการจัดรูปแบบ ข้อจำกัดเหล่านั้นเป็นไปตามโดยตรงจากคีย์สตริงที่สั่ง คอมไพเลอร์อาจพิจารณาซอร์สแฟรกเมนต์สองชิ้นที่เทียบเท่ากัน ในขณะที่ line diff รายงานการแทนที่ หรือย้อนกลับภายใต้การทำให้เป็นมาตรฐานเชิงรุก
โมเดลดั้งเดิมยังมีประโยชน์เพราะตรวจสอบผลลัพธ์ได้ แต่ละแถวมีข้อความ ประเภท และหมายเลขบรรทัดของแต่ละฝั่ง ผู้ตรวจสอบอาจไม่เห็นด้วยกับการจัดแนวแต่ยังติดตามทุกบรรทัดได้ ซึ่งทำได้ยากกว่าเมื่อใช้คะแนน “ความหมายเปลี่ยนไป” ที่ไม่อธิบายเหตุผล
สิ่งนี้ไม่ครอบคลุมถึง - การเปรียบเทียบไบนารี การบีบอัดเดลต้า และการควบคุมเวอร์ชันภายใน
เดลต้าไบนารี การบีบอัด พื้นที่เก็บข้อมูลออบเจ็กต์ และการรวมภายในอยู่นอกเส้นทางนี้และชุดหลักฐาน บทความนี้ยังละเว้นลำดับเหตุการณ์ทางประวัติศาสตร์ที่ร้องขอ แทนที่จะกรอกจากหน่วยความจำ การไม่มีการอ้างสิทธิ์จะดีกว่าการเผยแพร่การอ้างสิทธิ์ที่ไม่ได้รับการตรวจสอบ
สำหรับหัวข้อเหล่านั้น ให้รวบรวมข้อกำหนดหลักและแหล่งที่มาจากระบบที่อธิบายไว้ อย่าอนุมานรูปแบบไฟล์จากความคล้ายคลึงกันทางสายตาหรืออัลกอริทึมจากคำว่า "ขั้นต่ำ" การกำหนดค่าของ ToolAcre ใช้คำนั้น ในขณะที่การใช้งานมีกลไกที่แน่นอนที่เข้าเกณฑ์
ประเด็นสำคัญ: ห้าสิบปีของความคิดที่ดีหนึ่งข้อ - สรุปเชื้อสายและหมายเหตุว่าการเปรียบเทียบข้อความของ ToolAcre ใช้โมเดลแบบบรรทัดเดียวกันในแท็บเบราว์เซอร์
บทเรียนที่ยั่งยืนคือระเบียบวิธี: แยกประวัติออกจากการนำไปปฏิบัติ เครื่องมือเบราว์เซอร์นี้พิสูจน์การแยกบรรทัดแบบปกติ, การสร้างใหม่ LCS, ตัวเลือกที่ชัดเจน, การจำกัดบรรทัดที่แตกต่างกัน และการเรนเดอร์เฉพาะที่ ไม่ได้พิสูจน์ว่าใครเป็นผู้คิดค้นอนุสัญญาโดยรอบหรือทำไม
ใช้เส้นทางเพื่อตรวจสอบข้อความปัจจุบันและใช้แหล่งข้อมูลหลักในการบอกเล่าอดีต ขอบเขตนั้นอาจทำให้บทความทางประวัติศาสตร์ครอบคลุมน้อยลง แต่ทำให้ทุกข้อความที่รวมไว้สามารถตรวจสอบได้ ความแม่นยำเหนือกว่าเชื้อสายที่ขัดเกลาซึ่งประกอบขึ้นจากความทรงจำที่ไม่ได้อ้างอิง