네가 lifetime 을 쓰게 될 제일 흔한 곳은 참조를 받아 하나를 반환하는 함수야. 이게 canonical 예제 — Rust Book 이 쓰는 그거 — 인데, 아이디어 전체를 담고 있어서야.
longest 함수
두 문자열 참조 중 더 긴 걸 반환하는 함수를 써봐. 컴파일러가 벽에 부딪혀: 반환된 참조는 입력 중 하나에서 빌리는데, 어느 쪽 인지가 런타임 비교에 달렸거든. 도움 없이는 출력이 자기가 나온 입력보다 오래 안 산다고 증명 못 해. 그래서 표기해달라고 해.
같은 lifetime, 같은 운명
두 파라미터랑 반환을 같은 'a 로 표기하면 컴파일러한테 말하는 거야: '결과는 두 입력 lifetime 의 겹침 동안 유효해.' 이제 안전을 증명할 수 있어: 두 입력이 살아있는 동안 반환 참조가 유효하고; 하나라도 죽으면 결과를 못 써. 표기는 동작을 안 바꿨어 — 빠진 사실을 제공했을 뿐이야.
lifetime 을 제어하려는 게 아니라 모호함을 푸는 거야. 컴파일러는 이미 모든 게 얼마나 오래 사는지 알아.
'a 는 출력의 유효성이 입력들과 어떻게 관계되는지를 말해줘 — 답이 런타임 로직에 달렸을 때 컴파일러가 못 추론한 관계 말이야.입력들이 다른 lifetime 일 때
출력이 특정 파라미터 하나에서만 빌리면, 그 하나만 공유 lifetime 이 필요하고; 다른 건 독립일 수 있어. 출력이 어느 입력에서 빌리는지 정밀해지는 게 진짜 기술이야 — 그리고 컴파일러 에러가 거기로 곧장 안내해.