Công cụ dành cho nhà phát triển · So sánh văn bản
Lịch sử ngắn gọn về sự khác biệt của Unix: Hunt, McIlroy và Mô hình dựa trên dòng
· Lý lịch
text-diff thuật toán software-history
Dấu vết khác biệt giữa Bell Labs vào những năm 1970 với các công cụ ngày nay, giải thích tại sao việc so sánh văn bản theo dòng trở thành tiêu chuẩn và các thuật toán sau này đã tinh chỉnh nó như thế nào.
Tại sao mọi bức ảnh về 'những gì đã thay đổi' trông giống như sự khác biệt của Unix - mở đầu bằng quan sát rằng các trang web lưu trữ mã, công cụ đánh giá và công cụ trình duyệt đều kế thừa cùng một mô hình
Màn hình đánh giá hiện đại thường chia sẻ ngữ pháp trực quan với bối cảnh, nội dung bị loại bỏ và bổ sung không thay đổi. Thật hấp dẫn khi biến sự giống nhau đó thành một câu chuyện dòng dõi hoàn chỉnh, nhưng kho lưu trữ này là bằng chứng cho việc triển khai hiện tại của ToolAcre chứ không phải là kho lưu trữ chính cho lịch sử Unix.
Do đó, bài viết an toàn phân biệt hai nhiệm vụ. Nó giải thích những gì nguồn hiện tại chứng minh một cách chi tiết và đánh dấu tên lịch sử, ngày tháng và động cơ của cuốn sách là yêu cầu các tài liệu tham khảo có thẩm quyền bên ngoài. Sự quen thuộc không phải là một trích dẫn, đặc biệt đối với quyền tác giả thuật toán.
Bell Labs và vấn đề so sánh các tệp - mô tả nhu cầu Unix ban đầu để so sánh các tệp nguồn và công việc của Douglas McIlroy và James Hunt
Bản phác thảo quy kết công việc ban đầu cho các số liệu của Bell Labs. Không có tệp nào trong số bốn tệp nguồn khác biệt Văn bản ghi lại lịch sử và tác vụ cấm các tuyên bố được phát minh hoặc không được trích dẫn. Do đó, mô-đun này không lặp lại các chi tiết tiểu sử, trích dẫn hoặc ngày tháng như các sự kiện đã được giải quyết.
Một bài viết lịch sử trong tương lai nên trích dẫn trực tiếp các giấy tờ, sách hướng dẫn hoặc tài liệu lưu trữ của cơ quan. Cho đến khi những nguồn đó là một phần của tập hợp bằng chứng, thì việc chỉnh sửa là rõ ràng: ToolAcre có thể minh họa một mô hình khác biệt về dòng ngày nay, nhưng nó không thể xác thực từng bước trong câu chuyện nguồn gốc của mô hình.
Quyền tác giả của Bell Labs và lịch sử Unix thời kỳ đầu cần các nguồn chính bên ngoài không có trong kho lưu trữ này
Mã hiện tại phân chia theo quy ước dòng mới được chuẩn hóa và so sánh các mảng dòng. Thực tế đó giải thích tính chi tiết của ngày nay. Nó không chứng minh được các hạn chế về kiểu chữ hoặc lưu trữ đã gây ra lựa chọn thiết kế lịch sử vì không có tài liệu lịch sử nào được nhập vào quá trình triển khai.
Sự khác biệt còn quan trọng hơn cả học thuật. “Công cụ này hoạt động trên đường dây” có thể được lặp lại bằng các thử nghiệm. “Các đường được chọn vì lý do lịch sử này” là một tuyên bố nhân quả cần có tài liệu từ thời kỳ đó. Bài viết kỹ thuật tốt không sử dụng mã hiện tại làm bằng chứng hồi tố về ý định trong quá khứ.
Kho lưu trữ chứng minh ToolAcre so sánh các dòng; nó không chứng minh tại sao các hệ thống lịch sử lại chọn chúng
`toUnifiedText` phát ra các nhãn `---` và `+++` theo sau là mỗi hàng có tiền tố dấu cách, dấu trừ hoặc dấu cộng. Nó có dạng bản vá và hữu ích để tải xuống nhưng nó không chứa các tiêu đề lớn `@@`. Gọi nó là một khác biệt thống nhất hoàn chỉnh sẽ phóng đại định dạng được triển khai ở đây.
Tuyến đường cũng không tạo ra các định dạng thông thường hoặc ngữ cảnh. Sự phát triển lịch sử giữa các định dạng đó có thể cần được giải thích bằng các hướng dẫn sử dụng bên ngoài, tuy nhiên, đầu ra được gửi đi hỗ trợ mô tả hẹp hơn: luồng toàn hàng có thể đọc được với các điểm đánh dấu quen thuộc và nhãn do người gọi cung cấp.
ToolAcre xuất luồng có hình dạng bản vá, không xuất các định dạng khác biệt lịch sử đầy đủ
Bản phác thảo cho biết các động cơ hiện đại sử dụng Myers, nhưng ToolAcre thì không. Tiêu đề tệp của nó đặt tên đơn giản là LCS lập trình động và ghi lại thời gian và bộ nhớ O(n·m) ở phần giữa khác nhau. Quá trình triển khai sẽ điền vào bảng `Uint32Array` và xây dựng lại một đường dẫn xuyên qua bảng đó.
Đây không phải là một chỉnh sửa thẩm mỹ. Tên thuật toán có độ phức tạp và hành vi ràng buộc cụ thể. Việc cắt bớt tiền tố và hậu tố cộng với giới hạn dòng 2,000 làm cho thiết kế này phù hợp với các khác biệt được dán giới hạn. Người đọc không nên chuyển yêu cầu về độ phức tạp của Myers sang mã bằng ma trận bậc hai.
ToolAcre sử dụng lập trình động LCS đơn giản, không phải Myers
So sánh dựa trên dòng vẫn không thể xác định được sự tương đương về ngữ nghĩa, các khối đã di chuyển hoặc mục đích định dạng. Những hạn chế đó tuân theo trực tiếp từ các khóa chuỗi được sắp xếp. Trình biên dịch có thể coi hai đoạn nguồn là tương đương nhau trong khi một dòng khác biệt báo cáo các thay thế hoặc ngược lại khi chuẩn hóa mạnh mẽ.
Mô hình ban đầu vẫn hữu ích vì kết quả của nó có thể kiểm tra được. Mỗi hàng có văn bản, loại và số dòng dành riêng cho từng bên. Người đánh giá có thể không đồng ý với cách căn chỉnh trong khi vẫn tính đến từng dòng, điều này khó hơn với điểm “đã thay đổi ý nghĩa” không rõ ràng.
Điều này không bao gồm những gì - so sánh nhị phân, nén delta và nội bộ kiểm soát phiên bản
Delta nhị phân, nén, lưu trữ đối tượng kho lưu trữ và nội bộ hợp nhất nằm ngoài cả tuyến đường này và bộ bằng chứng. Bài viết cũng bỏ qua niên đại lịch sử được yêu cầu thay vì điền nó vào bộ nhớ. Thà bỏ sót một tuyên bố còn hơn là xuất bản một tuyên bố chưa được xác minh.
Đối với những chủ đề đó, hãy thu thập thông số kỹ thuật chính và nguồn từ các hệ thống được mô tả. Không suy ra định dạng tệp từ sự giống nhau về mặt hình ảnh hoặc thuật toán từ từ “tối thiểu”. Cấu hình của ToolAcre sử dụng từ đó trong khi việc triển khai cung cấp cơ chế chính xác đủ điều kiện cho nó.
Bài học rút ra: năm mươi năm của một ý tưởng hay — tóm tắt dòng dõi và lưu ý rằng so sánh văn bản của ToolAcre áp dụng cùng một mô hình dựa trên dòng trong tab trình duyệt
Bài học lâu dài là về phương pháp luận: tách lịch sử khỏi việc thực hiện. Công cụ trình duyệt này chứng minh việc phân tách dòng được chuẩn hóa, xây dựng lại LCS, các tùy chọn rõ ràng, giới hạn dòng khác nhau và hiển thị cục bộ. Nó không chứng minh được ai đã phát minh ra những quy ước xung quanh hoặc tại sao.
Sử dụng lộ trình để kiểm tra văn bản hiện tại và sử dụng các nguồn chính để kể về quá khứ. Ranh giới đó có thể làm cho bài viết lịch sử ít sâu rộng hơn, nhưng nó làm cho mọi tuyên bố được đưa vào đều có thể kiểm tra được. Độ chính xác đánh bại một dòng dõi bóng bẩy được tập hợp từ hồi ức không được trích dẫn.