원래 문제가 없는 프로그램이 컴파일이 불가능한 경우는 있을거라고 생각해요
예를 들면,
첫번째 인수의 라이프타임 'a 만 필요한 경우에
두번째 인수의 라이프타임까지 'a로 명시하여, 쓸데없이 의존성을 추가하는 경우
컴파일러는 존재하지도 않은 의존성을 검사해서 두번째 인수의 수명이 먼저 끝난다면 에러를 일으킬테니까요.
근데, 의존성을 고의적으로 추가하는 경우 외에도 라이프타임의 설정방식엔 은근히 자유도가 있는거 같아요.
이게, 라이프타임 명시에 여러가지 해답이 있는건지,
아니면 각각이 실제로 다른 코드인건지 뭔가 철학적인 의문이 들어서 질문 남깁니다.
저는 라이프타임에 정답이 있다고 생각해요.
위의 코드는
제가 the book의 1회차에 짠 방식의 라이프타임 명시법입니다.
그때에는 진짜 정신 오락가락 하면서 컴파일러한테 이러면 돼? 하면서 왜 그러면 될까 고민하는식으로 시행착오 끝에 짰었죠.
주석부분은, 현재 제가 정답이라고 생각하는 라이프타임 명시법입니다.
분명히 두번째는 정답이지만,
첫번째 코드에 대한 해석이 궁금합니다.
아무리 생각해도 첫번째 방식의 라이프타임 기술이, 런타임에 영향을 주지 않는거같은데 실제로 영향을안주는거 맞나요??
물론 impl블록이 확장될 때에 코드의 수정 용이성 측면에서 두번째 방식을 선택해야하긴 할텐데,
완성된 라이브러리안의 코드이며, 더이상의 수정을 생각하지 않은 상태를 가정할 때에를 논해볼게요.
저는 혹시나 실 코드가 (컴파일된 바이너리파일이) 라이프타임에 따라서 달라진다면,
메소드가 제네릭이냐 아니냐에 의한 차이에서 기인할거 같아요.
예를 들면,
첫번째 인수의 라이프타임 'a 만 필요한 경우에
두번째 인수의 라이프타임까지 'a로 명시하여, 쓸데없이 의존성을 추가하는 경우
컴파일러는 존재하지도 않은 의존성을 검사해서 두번째 인수의 수명이 먼저 끝난다면 에러를 일으킬테니까요.
근데, 의존성을 고의적으로 추가하는 경우 외에도 라이프타임의 설정방식엔 은근히 자유도가 있는거 같아요.
이게, 라이프타임 명시에 여러가지 해답이 있는건지,
아니면 각각이 실제로 다른 코드인건지 뭔가 철학적인 의문이 들어서 질문 남깁니다.
저는 라이프타임에 정답이 있다고 생각해요.
위의 코드는
제가 the book의 1회차에 짠 방식의 라이프타임 명시법입니다.
그때에는 진짜 정신 오락가락 하면서 컴파일러한테 이러면 돼? 하면서 왜 그러면 될까 고민하는식으로 시행착오 끝에 짰었죠.
주석부분은, 현재 제가 정답이라고 생각하는 라이프타임 명시법입니다.
분명히 두번째는 정답이지만,
첫번째 코드에 대한 해석이 궁금합니다.
아무리 생각해도 첫번째 방식의 라이프타임 기술이, 런타임에 영향을 주지 않는거같은데 실제로 영향을안주는거 맞나요??
물론 impl블록이 확장될 때에 코드의 수정 용이성 측면에서 두번째 방식을 선택해야하긴 할텐데,
완성된 라이브러리안의 코드이며, 더이상의 수정을 생각하지 않은 상태를 가정할 때에를 논해볼게요.
저는 혹시나 실 코드가 (컴파일된 바이너리파일이) 라이프타임에 따라서 달라진다면,
메소드가 제네릭이냐 아니냐에 의한 차이에서 기인할거 같아요.
참고로 이 코드는 제가 the book 12장을 처음 읽을 때에, clone 방식이 비효율적이라면서 다른 해결책을 제시하지 않는거에 대해서, (1)구조체한테 라이프타임을 주는방법과 (2) for in 을 통해서 추후에 나올 반복자를 간접적으로 사용하는 방식으로 해결해보는 과정에서 썼던 코드에요
아 그리고, 혹시 두번째 기술보다 더 깔끔한 라이프타임 기술이 있다면 알려주시면 ㄱㅅ
수명은 런타임에 전혀 아무런 어떠한 영향도 끼치지 않음
옙. 그러면 의도된 파일이 컴파일만 된다면 걱정할건 없겠군요!
ㅇㅇ unsafe만 없으면 뭔 짓을해도 컴파일만 되면 됨
근데 첫번째 코드가 컴파일이 됨? 난 맨날 두번째로 짰는데
옙. 저도 하두 라이프타임 하나도 이해 못한애가 이상한 라이프타임을 기술해놨길래 보니까, 그당시에 딸리는 이해도로 간신히 컴파일 에러를 면해놨나보더라구요
두번째 방식 (현재 이해도)는 어느정도 국룰을 따르고 있는거 같아서 다행이네요
시발 왜 지금까지 모르고 하나하나 명시했을까 화나네
아 '_ 말씀이신가요? 그거 std 라이브러리 보다가 가끔 이상한 기호가 나오길래 찾아봤었는데 2018년? 에 새로나온 문법같더라구요
elision이 impl에도 써지는지 몰랐음
근데 저는 저 당시에, impl블록에 왜 제네릭 라이프타임을 명시하는지 자체를 이해를 잘 못하고있었어서 '_를 남용했던거같아요. 죄다 메소드에 파라미터를 주는 방식으로...
근데 생각해보니 안하는게 좋을거같음 수명 들고있는 타입이면 어차피 그 수명 명시해가며 써야하는데 익명이면 뭔가 이상해질듯