C 라이브러리가 포인터와 길이를 돌려줍니다. 지금까지 아는 것. 단일 스레드 호출 순서라면 다음 라이브러리 호출 전까지 버퍼를 읽을 수 있고 유효합니다. 소유권 이전은 없습니다. 모르는 것. 다른 핸들이나 콜백, 백그라운드 스레드가 이 버퍼를 무효로 만들 수 있는지. 이 부분은 아직 가정입니다.
const 바이트를 가리키는 포인터는 그 접근 경로로 고치는 것만 막습니다. 수명에 대해서는 아무것도 말하지 않고, 다른 경로로는 바이트가 여전히 바뀔 수 있습니다. 그러니 라이브러리 핸들을 살려 두는 일은 필요하더라도 충분하지는 않을 수 있습니다.
첫째 안. 다른 호출을 허용하기 전에 소유한 Vec<u8>로 복사합니다. 복사하는 내내 포인터와 길이가 읽을 수 있는 유효한 범위를 가리켜야 하고, 그동안 외부에서 충돌하는 쓰기가 없어야 합니다. 이미 잘못된 포인터는 복사로 고칠 수 없습니다.
둘째 안. 빌린 뷰. 뷰가 살아 있는 동안 그것을 무효로 만들 수 있는 호출을 모두 막아야 합니다. 대여를 핸들 하나에 묶는 방식은 모든 무효화가 그 핸들을 거칠 때만 통합니다. 라이브러리가 전역 공유 저장소를 쓴다면 다른 핸들도 문제가 됩니다. 동시 호출과 재진입 콜백도 같은 목록에 들어갑니다.
복사부터 시작하고, 그래도 기대고 있는 외부 쪽 보장은 적어 둡니다. C 쪽에서 근거가 나오기 전까지 그것들은 가정입니다.