API가 이름들의 슬라이스를 반환하지만, 호출자가 다 읽기 전에 기반 할당 영역이 해제되거나 교체될 수 있다고 하겠습니다. 슬라이스에는 여전히 주소와 길이가 있습니다. 그 필드들이 할당 영역을 살아 있게 하지는 않습니다.
여기서 범위로 정한 Zig 0.15.2 레퍼런스에서는 포인터의 유효성과 수명이 프로그래머의 책임입니다. 슬라이스는 다른 메모리를 참조합니다. 따라서 함수 문서는 소유권과 반환된 접근을 무효화하는 사건을 밝혀야 합니다. 슬라이스를 반환한다고 기반 저장 공간의 수명이 늘어나지는 않습니다.
가상의 카탈로그에서 names 연산이 내부 할당 영역의 뷰를 빌려준다고 하겠습니다. 그 영역은 카탈로그가 소유합니다. 호출자는 뷰를 해제하면 안 됩니다. 카탈로그 파괴는 뷰를 무효화하며, 할당 영역을 교체하는 재로딩이 성공하면 이전 뷰는 모두 무효화됩니다. 이름 추가로 저장 공간이 커지고 이동할 수 있다면 그 연산에도 무효화 규칙이 필요합니다. 슬라이스 서술자를 복사해도 이름들이 복사되거나 이 의존성이 없어지지는 않습니다.
실패에도 별도의 설명이 필요합니다. 재로딩은 교체할 저장 공간을 따로 구성하고 성공한 뒤에만 설치하도록 만들 수 있습니다. 이 설계 계약이라면 준비가 실패해도 기존 할당 영역과 뷰는 유효합니다. 기존 저장 공간부터 비우는 구현은 다른 약속이 필요합니다.
다른 API는 이름 데이터를 별도 할당 영역에 복사해 반환하고, 문서에 명시한 할당자로 해제할 책임을 넘길 수도 있습니다. 소유권 관리 작업을 더 하는 대신 독립적인 수명을 얻습니다. 호출자의 실제 읽기, 재로딩, 정리 경계를 따라간 뒤 두 방식을 고르겠습니다.