한국어

개발자 도구 · 텍스트 비교

Unix 차이점의 간략한 역사: Hunt, McIlroy 및 라인 기반 모델

· 배경

텍스트 비교 알고리즘 소프트웨어 기록

검증된 최신 LCS 비교 패널에서 멈추는 과거 타임라인
원본 ToolAcre 벡터 일러스트레이션

1970년대 Bell Labs에서 오늘날의 도구까지의 차이점을 추적하여 텍스트를 줄별로 비교하는 것이 표준이 된 이유와 이후 알고리즘이 이를 어떻게 개선했는지 설명합니다.

'변경된 사항'에 대한 모든 그림이 Unix diff처럼 보이는 이유 — 코드 호스팅 사이트, 검토 도구 및 브라우저 도구가 모두 동일한 모델을 상속한다는 관찰로 시작됩니다.

최신 검토 화면은 변경되지 않은 컨텍스트, 제거 및 추가의 시각적 문법을 공유하는 경우가 많습니다. 그 유사성을 완전한 계보 이야기로 바꾸고 싶은 유혹이 있지만 이 저장소는 Unix 역사의 기본 아카이브가 아니라 ToolAcre의 현재 구현에 대한 증거입니다.

따라서 안전 문서는 두 가지 작업을 구별합니다. 현재 출처가 무엇을 증명하는지 자세히 설명하고 통합 문서의 역사적 이름, 날짜 및 동기를 외부 권위 있는 참조가 필요한 것으로 표시합니다. 특히 알고리즘 작성자의 경우 익숙함은 인용이 아닙니다.

Bell Labs 및 파일 비교 문제 — 소스 파일을 비교해야 하는 초기 Unix 요구 사항과 Douglas McIlroy 및 James Hunt의 작업을 설명합니다.

개요는 Bell Labs 수치에 대한 초기 작업을 설명합니다. 4개의 텍스트 비교 소스 파일 중 어느 것도 기록을 문서화하지 않았으며 작업은 발명되었거나 인용되지 않은 주장을 금지합니다. 따라서 이 모듈은 전기적 세부 사항, 인용문 또는 날짜를 확정된 사실로 반복하지 않습니다.

미래의 역사적 기사는 논문, 매뉴얼 또는 기관 기록 보관소를 직접 인용해야 합니다. 해당 소스가 증거 세트의 일부가 될 때까지 수정은 명시적입니다. ToolAcre는 오늘날 라인 차이 모델을 시연할 수 있지만 모델의 원본 스토리의 모든 단계를 인증할 수는 없습니다.

Bell Labs 저작자 및 초기 Unix 기록에는 이 저장소에 없는 외부 기본 소스가 필요합니다.

현재 코드는 정규화된 개행 규칙에 따라 분할되고 행 배열을 비교합니다. 그 사실은 오늘날의 세분성을 설명합니다. 역사적 자료를 구현에 가져오지 않기 때문에 텔레타이프나 저장 제약으로 인해 역사적 디자인 선택이 발생했음을 입증하지 못합니다.

구별은 장학금 이상의 의미를 갖습니다. "이 도구는 라인에서 작동합니다"는 테스트를 통해 재현 가능합니다. “역사적인 이유로 대사를 선택했다”는 것은 당시의 문헌이 필요한 인과적 주장이다. 훌륭한 기술 문서 작성은 과거 의도에 대한 소급적 증거로 현재 코드를 사용하지 않습니다.

저장소는 ToolAcre가 라인을 비교한다는 것을 증명합니다. 역사적 시스템이 그들을 선택한 이유를 증명하지는 않습니다.

`toUnifiedText`는 `---` 및 `+++` 레이블과 공백, 빼기 또는 더하기 접두사가 붙은 모든 행을 내보냅니다. 패치 형태이며 다운로드에 유용하지만 `@@` 덩어리 헤더가 포함되어 있지 않습니다. 완전한 통합 diff라고 부르면 여기에 구현된 형식이 과장됩니다.

경로는 일반 또는 컨텍스트 형식도 생성하지 않습니다. 이러한 형식 간의 역사적 발전은 외부 설명서를 통해 설명할 가치가 있지만 제공된 출력은 더 좁은 설명, 즉 친숙한 마커와 호출자 제공 레이블이 있는 읽을 수 있는 전체 행 스트림을 지원합니다.

ToolAcre는 전체 기록 diff 형식이 아닌 패치 모양의 스트림을 내보냅니다.

개요에 따르면 최신 엔진은 Myers를 사용하지만 ToolAcre는 그렇지 않습니다. 파일 헤더는 일반 LCS 동적 프로그래밍을 명명하고 O(n·m) 시간과 메모리를 서로 다른 중간에 기록합니다. 구현에서는 `Uint32Array` 테이블을 채우고 이를 통해 하나의 경로를 재구성합니다.

이는 미용적인 교정이 아닙니다. 알고리즘 이름은 특정 복잡성과 연결 동작을 수행합니다. 접두사 및 접미사 트리밍과 2,000 줄 캡을 사용하면 이 디자인이 제한된 붙여넣기 차이에 적합합니다. 독자들은 마이어스의 복잡성 주장을 2차 행렬이 있는 코드로 옮겨서는 안 됩니다.

ToolAcre는 Myers가 아닌 일반 LCS 동적 프로그래밍을 사용합니다.

줄 기반 비교에서는 여전히 의미론적 동등성, 이동된 블록 또는 형식 지정 의도를 식별할 수 없습니다. 이러한 제한은 순서가 지정된 문자열 키에서 직접 따릅니다. 컴파일러는 라인 diff가 교체를 보고하는 동안 두 개의 소스 조각을 동등하다고 간주하거나 공격적인 정규화에서는 그 반대를 고려할 수 있습니다.

원본 모델은 결과를 검사할 수 있기 때문에 여전히 유용합니다. 각 행에는 텍스트, 유형 및 측면별 줄 번호가 있습니다. 검토자는 모든 라인을 설명하면서 정렬에 동의하지 않을 수 있으며, 이는 불투명한 "의미 변경" 점수의 경우 더 어렵습니다.

여기서 다루지 않는 내용 — 바이너리 비교, 델타 압축 및 버전 제어 내부

바이너리 델타, 압축, 저장소 개체 저장소 및 병합 내부는 이 경로와 증거 세트 외부에 있습니다. 기사는 또한 요청된 역사적 연대기를 기억에서 채우는 대신 생략합니다. 확인되지 않은 주장을 게시하는 것보다 주장이 누락되는 것이 좋습니다.

해당 주제에 대해서는 설명 중인 시스템에서 기본 사양과 소스를 수집합니다. 시각적 유사성에서 파일 형식을 추론하거나 '최소'라는 단어에서 알고리즘을 추론하지 마세요. ToolAcre의 구성은 해당 단어를 사용하는 반면 구현은 이를 충족하는 정확한 메커니즘을 제공합니다.

요점: 50년 동안의 하나의 좋은 아이디어 — ToolAcre의 텍스트 비교가 브라우저 탭에서 동일한 라인 기반 모델을 적용한다는 내용과 계보를 요약합니다.

지속 가능한 교훈은 방법론적입니다. 즉, 구현과 기록을 분리합니다. 이 브라우저 도구는 정규화된 라인 분할, LCS 재구성, 명시적 옵션, 다른 라인 캡 및 로컬 렌더링을 증명합니다. 주변 규칙을 누가, 왜 창안했는지는 입증되지 않습니다.

경로를 사용하여 현재 텍스트를 검사하고 기본 소스를 사용하여 과거를 알려줍니다. 이러한 경계는 역사적인 기사를 덜 포괄적으로 만들 수 있지만 포함된 모든 진술을 감사할 수 있게 만듭니다. 정확성은 인용되지 않은 기억으로 구성된 세련된 계보를 능가합니다.